Vba 如何使用命令按钮计算Excel中同一列中不同范围的平均值?

Vba 如何使用命令按钮计算Excel中同一列中不同范围的平均值?,vba,excel,Vba,Excel,我正在使用Excel 2013。大约有50张工作表,我必须在一张工作表中计算出数百个平均值。数据像C3:C10、C12:C16、C18:C35等那样分散。我想计算每个范围(如C11、C17、C36等)末尾的平均值。范围始终位于同一列中,每个范围由两个空白单元格分隔,但范围不是固定的 我试着录制一个宏 Sub Averaging() ActiveCell.FormulaR1C1 = "=AVERAGE(R[-12]C:R[-1]C)" End Sub 但我不知道如何使R[-12]C部分动态。我

我正在使用Excel 2013。大约有50张工作表,我必须在一张工作表中计算出数百个平均值。数据像C3:C10、C12:C16、C18:C35等那样分散。我想计算每个范围(如C11、C17、C36等)末尾的平均值。范围始终位于同一列中,每个范围由两个空白单元格分隔,但范围不是固定的

我试着录制一个宏

Sub Averaging() 
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-12]C:R[-1]C)"
End Sub
但我不知道如何使R[-12]C部分动态。我想创建一个命令按钮,在选择单元格后,例如范围为C3:C10,我选择单元格C11,按下命令按钮后,它将自动选择范围并计算平均值。可能吗


任何帮助都将不胜感激。VBA,任何公式。

单击列C中包含数据的第一个单元格,然后运行此宏:

Sub dural()
    Dim r1 As Range, r2 As Range
    Set r1 = ActiveCell
    Do
        Set r2 = r1.End(xlDown)
        If r2.Row = Rows.Count Then Exit Sub
        r2.Offset(1, 0).Formula = "=AVERAGE(" & Range(r1, r2).Address(0, 0) & ")"
        Set r1 = r2.Offset(3, 0)
    Loop
End Sub
之前:

及之后:


单击列C中包含数据的第一个单元格,然后运行此宏:

Sub dural()
    Dim r1 As Range, r2 As Range
    Set r1 = ActiveCell
    Do
        Set r2 = r1.End(xlDown)
        If r2.Row = Rows.Count Then Exit Sub
        r2.Offset(1, 0).Formula = "=AVERAGE(" & Range(r1, r2).Address(0, 0) & ")"
        Set r1 = r2.Offset(3, 0)
    Loop
End Sub
之前:

及之后:

您可以使用

Sub WriteAverage(columnRng As Range)
Dim iArea As Long

With columnRng.Columns(1).SpecialCells(xlCellTypeConstants, xlNumbers).Areas
    For iArea = 1 To .Count
        With .Item(iArea).Cells
            .Offset(.Rows.Count).Resize(1).FormulaR1C1 = "=average(R" & .Cells(1, 1).Row & "C:R[-1]C)"
        End With
    Next iArea
End With

End Sub
被称为

Call WriteAverage(Columns("C"))
你可以用

Sub WriteAverage(columnRng As Range)
Dim iArea As Long

With columnRng.Columns(1).SpecialCells(xlCellTypeConstants, xlNumbers).Areas
    For iArea = 1 To .Count
        With .Item(iArea).Cells
            .Offset(.Rows.Count).Resize(1).FormulaR1C1 = "=average(R" & .Cells(1, 1).Row & "C:R[-1]C)"
        End With
    Next iArea
End With

End Sub
被称为

Call WriteAverage(Columns("C"))


如果数据总是在C列,一个问题是数据是否总是从C1开始?如果C1是带有文本的标题行,数据是否总是从C2开始?或者C列中的第一个数字可以出现在任何点上吗?此外,在C列中是否只有数字和空单元格,或者它们也是文本?此外,是否希望将公式转储到计算范围平均值的单元格中,还是希望在VBA中计算范围并转储平均值。这两种方法都有效。你需要求平均值的数字范围是否会变成一个单一的数字,或者更确切地说是一个1行长的范围?数据并不总是在C列。主要是在M列和AA列。数据总是从第二行开始。第一行有标题。这些列中只有数字,没有文本。任何方法都可以。我不明白。你说的1行长是什么意思?我在问,如果你的随机范围长度有时是4,10,12,3,16个数字长,你是否需要处理单个数字的情况。。。现在我看到你在下面的评论。如果数据总是在C列,一个问题是数据总是从C1开始吗?如果C1是带有文本的标题行,数据是否总是从C2开始?或者C列中的第一个数字可以出现在任何点上吗?此外,在C列中是否只有数字和空单元格,或者它们也是文本?此外,是否希望将公式转储到计算范围平均值的单元格中,还是希望在VBA中计算范围并转储平均值。这两种方法都有效。你需要求平均值的数字范围是否会变成一个单一的数字,或者更确切地说是一个1行长的范围?数据并不总是在C列。主要是在M列和AA列。数据总是从第二行开始。第一行有标题。这些列中只有数字,没有文本。任何方法都可以。我不明白。你说的1行长是什么意思?我在问,如果你的随机范围长度有时是4,10,12,3,16个数字长,你是否需要处理单个数字的情况。。。现在我在下面看到你对这一点的评论。如果数据在M列和AA列怎么办?它适用于C列。非常感谢。如果c2是一个数字,C3和C4为空,会发生什么情况。他正试图平均一个数字,因为这就是随机数列表被吐出来的原因?不存在平均一个数字的情况。它总是两个或更多@ForwardEdI相信gary的宏将在选定的任何列中工作。您只需选择列中的第一个数字哦,是的!它正在工作。非常感谢你。非常感谢@gary的学生如果数据在M列和AA列怎么办?它适用于C列。非常感谢。如果c2是一个数字,C3和C4为空,会发生什么情况。他正试图平均一个数字,因为这就是随机数列表被吐出来的原因?不存在平均一个数字的情况。它总是两个或更多@ForwardEdI相信gary的宏将在选定的任何列中工作。您只需选择列中的第一个数字哦,是的!它正在工作。非常感谢你。非常感谢@加里的学生