需要帮助平均此阵列(Excel VBA)

时间:2014-08-06 04:39:25

标签: excel excel-vba vba

我是VBA的初学者,所以如果有人能给我一个明确的解释,那就太好了。 我写了以下内容,意图是每周平均(每行)没有空单元格。它在w_avg(i)步骤给我一个错误消息。

Sub weekly_avg()

    Dim w_avg(19) As Long
    Dim MyRange(19, 6) As Long
    Dim i As Integer
    Dim j As Integer

    Cells(1, 11) = "Weekly Avg by VBA"
    Cells(1, 11).Columns.AutoFit

    For i = 0 To 19
       For j = 0 To 6
           MyRange(i, j) = Cells(i + 2, j + 3)
                If Not Cells(i + 2, j + 3) = 0 Then
                   w_avg(i)=Worksheets("sheet1").WorksheetFunction.Average(Range(MyRange(i, 0),MyRange(i, j)))
                    Cells(i + 2, 11).Value = w_avg(i)
            End If
        Next j
    Next i
End Sub

2 个答案:

答案 0 :(得分:0)

Average()函数是Excel.WorksheetFunction对象的一种方法,而不是任何Worksheet对象的方法:w_avg(i) = Excel.WorksheetFunction.Average(...)

答案 1 :(得分:0)

这里有几个问题

  1. WorksheetFunctionApplication对象的一种方法(实际上并不需要)
  2. Range(MyRange(i, 0),MyRange(i, j))无法正常工作,因为MyRange(...)值是数字。 (Cells(MyRange(i, 0),MyRange(i, j))可能有用)
  3. 您正在For j
  4. 的每次迭代重复相同的计算
  5. 太多魔法数字
  6. 输出将写入活动工作表。这可能是你的意图,但最好是明确的
  7. 如果您的范围很大(1000行),您可以考虑转换为使用变量数组来加快速度
  8. 试试这个

    Sub Demo()
        Dim ws As Worksheet
        Dim rng As Range
        Dim i As Long
        Dim OutputColumn As Long
    
        Set ws = Worksheets("Sheet1")
        ws.Cells(1, 11) = "Weekly Avg by VBA"
        ws.Cells(1, 11).Columns.AutoFit
    
        ' Get a reference to the data range
        Set rng = ws.Range("C2:I21")
        ' Specify output column relative to data range
        OutputColumn = rng.Columns.Count + 2
    
        With Application
            For i = 1 To rng.Rows.Count
                rng.Cells(i, OutputColumn).Value = _
                  .AverageIf(rng.Rows(i), "<>0")
            Next
        End With
    End Sub