1527772083 VBAで、ある列に入力されている数値の平均値を求めるコードを教えてください。

Sheet2には、A列とB列に同じ行数、2行目から数値が入力されています。何行入力されているかは、場合によって異なります。そのSheet2の値をSheet3の右端の列にコピペしていくコードを以下のように書いています。

Dim i
i = Sheet3.Cells(1, Columns.Count).End(xlToLeft).Column
If Sheet3.Cells(1, i).Value <> "" Then i = i + 1 'A1が空白ならiを1とする

Sheet2.Range("A1").CurrentRegion.Copy 'Sheet2のデータをコピー
'Sheet3に貼りつけ
Sheet3.Cells(1, i).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheet2.Cells.Clear '記録用シートの初期化

ここでSheet3に貼りつけた数値の右側の列の値を、2行目から、入力されている最後の行まで平均し、右側の列の1行目に入力したいと考えています。どのように、コードを書いたら良いか教えてください。

分かりにくい説明で申し訳ありませんがよろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2018/06/01 09:33:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Z1000S No.1

回答回数39ベストアンサー獲得回数27

ポイント100pt

こういう事でしょうか?

Public Sub sample()

    Dim i
    i = Sheet3.Cells(1, Columns.Count).End(xlToLeft).Column
    If Sheet3.Cells(1, i).Value <> "" Then i = i + 1 'A1が空白ならiを1とする

    Sheet2.Range("A1").CurrentRegion.Copy 'Sheet2のデータをコピー
    'Sheet3に貼りつけ
    Sheet3.Cells(1, i).PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheet2.Cells.Clear '記録用シートの初期化

    Call getAverage(i)

End Sub

Private Sub getAverage(ByVal lBeginCol As Long)

    Const TARGET_SHEET_NAME As String = "Sheet3"

    Const COL_OFFSET        As Long = 2

    Dim sHeader     As String
    Dim lCol        As Long
    Dim lEndRow     As Long
    Dim lTargetCol  As Long

    lCol = lBeginCol

    With ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
        sHeader = .Cells(1, lCol).Value

        Do Until sHeader = ""
            lEndRow = .Cells(1, lCol).End(xlDown).Row

            lTargetCol = lCol + 1

            .Cells(1, lTargetCol).Value = WorksheetFunction.Average(.Range(.Cells(2, lTargetCol), .Cells(lEndRow, lTargetCol)))

            lCol = lCol + COL_OFFSET

            sHeader = .Cells(1, lCol).Value
        Loop
    End With

End Sub
id:cpsaku

す・・・すごいです。
完璧に望んでいた処理が実行されています。

変数やコードの意味を、きちんと読ませていただいて理解したいと思います!

2018/06/01 09:34:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません