- ベストアンサー
EXCEL2000VBAの記述について
e列~j列の5行目に 下記の項目が入っています。 e列 f列 g列 h列 i列 j列 5行目 4月 5月 6月 7月 8月 9月 別シートのE列の5行目に入っているデータと、上記の列(e列~j列)の5行目に入っているデータが 同じの場合は、別シートのE列の6行目から38行目に入っているデータをコピーして、上記の 同じ項目の場所の6行目から38行目にデータを貼り付けたい場合 VBAで記述の仕方を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
問題の表現がわかりにくいです。 こう言うことですか。 シートをSheet1とSheet2の2つ考えているとする。 Sheet2の第5行内で、E列より右列を「検索し」、Sheet1のE5セルと同じ月が入っている、セルを探し、一致したセルの列の第6行から38行を採ってきて、Sheet1のE6:E38へもってこい。 同じことをSheet1のFからJ列にも繰り返す。 Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") For i = 5 To 10 'E列からj列まで For j = 5 To 30 'Sheet2は30列までと仮定 sh1.Activate CutCopyMode = False If sh1.Cells(5, i) = sh2.Cells(5, j) Then sh2.Activate sh2.Range(Cells(6, j), Cells(38, j)).Copy sh1.Activate sh1.Cells(6, i).Select ActiveSheet.Paste 'sh1.Cells(6, i) = sh2.Cells(6, j) GoTo p01 End If Next j MsgBox "見つかりません" p01: Next i End Sub
その他の回答 (2)
- sakenomo
- ベストアンサー率52% (35/67)
このマクロは、 ○ 別シート(コピー元)の位置は、シート名タブの一番左。 ○コピー先シートが選択された状態。 で使用するようになっています。 Sub test1() Dim c As Range For Each c In Range("E5:J5") If c.Value = Worksheets(1).Range("E5").Value Then Worksheets(1).Range("E6:E38").Copy c.Offset(1, 0).Select ActiveSheet.Paste End If Next c Application.CutCopyMode = False End Sub
- ja7awu
- ベストアンサー率62% (292/464)
「別シート」と項目名が一致している場合は、その下のデータを、 項目の下に貼り付ける ということでいいのですね。 それなら、こんな感じでどうでしょうか。 Sub test() Dim Rng As Range Dim FinRng As Range For Each Rng In Range("E5:J5") Set FinRng = Sheets("別シート").Range("E5:J5"). _ Find(Rng.Value, lookat:=xlWhole) If Not FinRng Is Nothing Then FinRng.Offset(1).Resize(33, 1).Copy Rng.Offset(1).Select ActiveSheet.Paste End If Next Rng Application.CutCopyMode = False Range("E6").Activate End Sub