• ベストアンサー

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で記述の仕方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

問題の表現がわかりにくいです。 こう言うことですか。 シートを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)
回答No.3

このマクロは、 ○ 別シート(コピー元)の位置は、シート名タブの一番左。 ○コピー先シートが選択された状態。 で使用するようになっています。 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)
回答No.1

「別シート」と項目名が一致している場合は、その下のデータを、 項目の下に貼り付ける ということでいいのですね。 それなら、こんな感じでどうでしょうか。 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

関連するQ&A