1

各行の値の平均を列Bに配置するマクロの一部として単純なVBAコードを取得しようとしています。時系列を生成し、各列が列Cから始まる時系列になるように、シミュレーションごとに列を埋めるコードがあります。シミュレーションの数はさまざまであるため、各時点の値を平均化するものが必要です。実行されるシミュレーションの数(塗りつぶされた列)を調整しながら、すべてのシミュレーションの行)。次に、計算された平均値を強調するすべての時系列の単一のグラフを生成したいと思います。あなたが助けることができればどうもありがとう!

ここでは、たとえば、sheet1からタイムステップの値を取得し、それをcolumnAsheet2に配置するコードです。マクロで平均を列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 に答える