VBAについてです。
前提・実現したいこと
VBAで2つのブックを比較して、データの転記がしたいです。
Book1(sheet1) 転記するシート
Book2(sheet1) 転記元のシート
このbook1とbook2のある列のデータを比較して、数値が同じならbook2のある列のデータをbook1の対応する列に転記するといった動作をやりたいです。
具体的には、
book1のD列の2行目のデータをbook2のD列から検索して、合致しているデータがあれば、
book2の合致した行にあるY列のデータをbook1の2行目のO列に転記する。
この動作をbook1のD列の3行目、4行目...最終行まで繰り返し処理をしたいです。
それぞれのbookのイメージとして、book1は売上伝票をまとめたようなもので、book2はユーザーのマスタのようなものです。
動きのイメージとしては関数のvlookupに近いと思います。
発生している問題・エラーメッセージ
book1のD2のデータをbook2のD列から検索して、検索が終わったら次のbook1のD3のデータを検索する、という動きがifやforなどを使えばできそうなのはなんとなくわかるのですが、具体的にどうすればいいのかわかりません。涙
該当のソースコード
VBA
1 Public Sub ブック間転送() 2'ループ用の変数 3 Dim m As Long 4 Dim n As Long 5 Dim row1 As Long 'Book1 O列へ書き込む行番号 6 Dim s1 As Worksheet 7 Dim s2 As Worksheet 8 9 Set s1 = Workbooks("book1.xlsx").Worksheets(1) 10 Set s2 = Workbooks("book2.xlsx").Worksheets(1) 11 row1 = 2 12 'それぞれのシートの比較行を最終行までループ 13 For m = 2 To s1.Cells(Rows.Count, 4).End(xlUp).Row 14 For n = 2 To s2.Cells(Rows.Count, 4).End(xlUp).Row 15 16 'book1とbook2のD列の比較 これだと列ごとに比較してしまうので 17 'book1の(m,4)をbook2のD列の全てのデータと比較して、転記が終わってから次の処理に移りたいです。 18 If s1.Cells(m, 4).Value = s2.Cells(n, 4).Value Then 19 s1.Cells(row1, "O").Value = s2.Cells(n, "Y").Value 20 row1 = row1 + 1 21 End If 22 Next 23 Next 24End Sub
試したこと
補足情報(FW/ツールのバージョンなど)
左がbook1で右がbook2です。
book1のD列のd2をbook2のD列から検索して、Y列の1001という値をbook1のO列に転記したいです。
d1なら対応するO列に1000が入ります。これを1行ずつ繰り返すような処理です。
どうぞよろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー