2016-06-30 6 views
0

У меня есть набор данных на sheet1, и я пытаюсь принять среднее значение из каждых 48 значений и вставить его на sheet2. Я получаю ошибку времени выполнения «1004»: невозможно получить свойство Average класса WorksheetFunction. Я пробовал искать различные решения, но не смог придумать их. Могу ли я получить помощь с моим кодом. Мой код работал, когда он просто принимал среднее значение и вставлял его на один лист.WorksheetFunction.Average и вставить на новый лист

Dim wb As Workbook 
Dim j As Long, i As Long, irow As Integer, lastrow1 As Long, lastcol1 As Long 

lastrow1 = Range(Sheets("HalfHour").Cells(5, 5), Sheets("HalfHour").Cells(5, 5).End(xlDown)).Count 
lastcol1 = Range(Sheets("HalfHour").Cells(5, 5), Sheets("HalfHour").Cells(5, 5).End(xlToRight)).Count 
Set wb = ActiveWorkbook 
    With Worksheets("Daily") 
     For j = 5 To lastcol + 5 
      For i = 5 To lastrow1 + 5 Step 48 
       wb.Worksheets("Daily").Cells(irow, a - 1).Value = Application.WorksheetFunction.Average(wb.Worksheets("HalfHour").Range(Cells(i, j), Cells(i + 47, j))) 
       irow = irow + 1 
      Next i 
      If Cells(i, j).Value = "" Then 
       GoTo done 
      End If 
     Next j 
    End With 

сделано:

ответ

0

Написать следующий цикл

For i = 5 To lastrow1 + 5 Step 48 
    wb.Worksheets("Daily").Cells(irow, a - 1).Value = Application.WorksheetFunction.Average(wb.Worksheets("HalfHour").Range(Cells(i, j), Cells(i + 47, j))) 
    irow = irow + 1 
Next i 

в

For i = 5 To lastrow1 + 5 Step 48 
    Set myRange = Range(wb.Worksheets("HalfHour").Cells(i, j), wb.Worksheets("HalfHour").Cells(i, j).Cells(i + 47, j)) 
    If Application.WorksheetFunction.Count(myRange) > 0 Then 
     wb.Worksheets("Daily").Cells(irow, a - 1).Value = Application.WorksheetFunction.Average(myRange) 
    End If 
    irow = irow + 1 
Next i 

Примечание: Запись Dim myRange As Range где вы объявляете переменные.

Вы можете написать полный код, как:

Sub Demo() 
    Dim wb As Workbook 
    Dim j As Long, i As Long, irow As Integer, lastrow1 As Long, lastcol1 As Long 
    Dim myRange As Range 

    irow = 1 
    a = 2 

    lastrow1 = Range(Sheets("HalfHour").Cells(5, 5), Sheets("HalfHour").Cells(5, 5).End(xlDown)).Count 
    lastcol1 = Range(Sheets("HalfHour").Cells(5, 5), Sheets("HalfHour").Cells(5, 5).End(xlToRight)).Count 
    Set wb = ActiveWorkbook 
    For j = 5 To lastcol + 5 
     For i = 5 To lastrow1 + 5 Step 48 
      Set myRange = Range(wb.Worksheets("HalfHour").Cells(i, j), wb.Worksheets("HalfHour").Cells(i, j).Cells(i + 47, j)) 
      If Application.WorksheetFunction.Count(myRange) > 0 Then 
       wb.Worksheets("Daily").Cells(irow, a - 1).Value = Application.WorksheetFunction.Average(myRange) 
      End If 
      irow = irow + 1 
     Next i 
     If Cells(i, j).Value = "" Then 
      GoTo done 
     End If 
    Next j 
done: 
End Sub 

Этот код будет отображать средние значения для наборов 48 строк в листе Daily в Column A.

+0

Этот код отлично работает, однако для среднего значения требуется небольшая корректировка 'Set myRange = Range (wb.Worksheets (« HalfHour »). Ячейки (i, j), wb.Worksheets (« HalfHour »)) .Cells (i, j) .Cells (i + 47, j)) ' должен быть ' Set myRange = Range (wb.Worksheets («HalfHour»). Ячейки (i, j), wb.Worksheets (" HalfHour "). Ячейки (i + 47, j))' , но я не совсем понимаю, как использовать myRange, не могли бы вы объяснить, почему его кодирование работает так, но у меня нет? – Bubs

Смежные вопросы