1

我正在尝试获取一个简单的 VBA 代码作为宏的一部分,该宏将在 B 列中放入每行值的平均值。我有生成时间序列并在每次模拟中填充一列的代码,这样每一列都是从 C 列开始的时间序列。模拟的数量各不相同,所以我只需要平均每个时间点的值(即每个所有模拟的行),同时调整运行的模拟数量(填充的列)。然后,我希望它生成所有时间序列的单个图表,突出显示计算的平均值。非常感谢您能提供帮助!

例如,这里的代码从 sheet1 获取时间步长的值并将其放置在 columnA sheet2 中。我希望宏现在将平均值放在 B 列下方的适当行中: 当前输出截图

Sheets("Sheet1").Select
Range("E5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet2").Select
Cells(1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
4

2 回答 2

1

试试这个,尽管这段代码会有很多不同的变体:

Sub AddAvgFormula()

With Sheets("Sheet2")
        .Range("B2").FormulaR1C1 = "=AVERAGE(RC[1]:RC[3])"
        .Range("B2").Copy
        .Range("B2:B" & .Cells(Excel.Rows.Count, 1).End(Excel.xlUp).Row).PasteSpecial Excel.xlPasteFormulas
End With

End Sub

在当前代码的末尾End Sub添加以下内容:

Call AddAvgFormula

这是原始代码的变体:

Sub AddAvgFormula()

With Sheets("Sheet2")
        .Range("B2") = "=AVERAGE(C2:E2)"
        .Range("B2").Copy
        .Range("B2:B" & .Cells(Excel.Rows.Count, 1).End(Excel.xlUp).Row).PasteSpecial Excel.xlPasteFormulas
End With

End Sub

另一个更短但可能不那么直观的变体:

Sub AddAvgFormula()

With Sheets("Sheet2")
        .Range("B2:B" & .Cells(Excel.Rows.Count, 1).End(Excel.xlUp).Row) = "=AVERAGE(C2:E2)"
End With

End Sub
于 2012-07-13T11:30:12.407 回答
1

尝试这个

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("B2:B" & lRow).Formula = _
        "=IF(ISERROR(AVERAGE(C2:E2)),"""",AVERAGE(C2:E2))"
    End With
End Sub

跟进

尝试这个

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, lCol As Long
    Dim ColNm As String

    Set ws = Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        lCol = .Cells(2, .Columns.Count).End(xlToLeft).Column
        ColNm = Split(.Cells(, lCol).Address, "$")(1)

        .Range("B2:B" & lRow).Formula = "=IF(ISERROR(AVERAGE(C2:" _
                                        & ColNm & _
                                        "2)),"""",AVERAGE(C2:" & _
                                        ColNm & "2))"
    End With
End Sub
于 2012-07-13T12:39:07.897 回答