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行目に入力したいと考えています。どのように、コードを書いたら良いか教えてください。
分かりにくい説明で申し訳ありませんがよろしくお願いいたします。
こういう事でしょうか?
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
す・・・すごいです。
2018/06/01 09:34:31完璧に望んでいた処理が実行されています。
変数やコードの意味を、きちんと読ませていただいて理解したいと思います!