平均可变长度的VBA行

我想获得一个简单的VBA代码作为一个macros的一部分,将列B列的每个行的平均值。 我有代码生成一个时间序列,并填充每个模拟列,使每列是从列C开始的时间序列。模拟的数量不同,所以我只需要一些东西,平均每个时间点的价值(即每横过所有模拟),同时调整运行的模拟数量(填充的列)。 然后我会喜欢它生成所有时间序列的单个图表,突出显示所计算的平均值。 非常感谢,如果你能帮助!

在这里,例如,代码将从sheet1中获取时间步的值,并将其放在columnA sheet2中。 我希望macros现在将平均值放在适当的行下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 

尝试这个

 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 

试试这个,虽然这个代码会有很多不同的变体:

 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