前提
VBAで任意の日付に異動した社員リストを出力するマクロを作っています。
使用するブックは1つで、シートは以下の2枚です。
- 社員マスタ
- 異動者リスト
『異動者リスト』A列に、ある日に異動した社員の『社員番号』を記入しています。
※『社員マスタ』『異動者リスト』の表はA列~EN列まであり、2行目の項目名は全て同じで、各セルは同じ列幅、同じフォントの大きさに調整しています。
実現したいこと
『社員マスタ』と『異動者リスト』A列を比較して社員番号が一致した場合のみ、『社員マスタ』のA列~EN列をコピーして『異動者リスト』に貼り付けて、最終行までこれを繰り返すコードにしたいです。
『社員番号を検索し出力するマクロ』はすでに作成しているので、ここではA列より右の値をコピー&ペーストするだけのマクロを作成します。
試したこと
下記2つのURLから、サンプルコードを組み合わせて作成しました。
該当のソースコード
VBA
1Sub 別のシートからVLookup() 2 Dim tbl As Range 3 Set tbl = Sheets("社員マスタ").Range("A3:B2191") 4 Dim key As Long 5 key = Range("A3").Value 6 7 On Error Resume Next 8 Dim ret As String 9 ret = WorksheetFunction.VLookup(key, tbl, 2, False) 10 11 '最終行を取得する 12 Dim LastRow As Long 13 LastRow = Worksheets("異動者リスト").Cells(Rows.Count, "A").End(xlUp).Row 14 15 'ループする 16 For i = 3 To LastRow 17 With Cells(i, "B") 18 19 'VLookup関数を計算する 20 .Offset(0, 1) = ret 21 End With 22 Next 23 24End Sub
発生している問題・エラーメッセージ
異動者リストのB列に氏名を入れたいのですが、上述のコードを実行すると、下の画像のように『異動者リスト』のC列にA3の社員番号に対応する社員の氏名が最終行まで連続して出力されてしまいました。
オフセットの数字の設定に問題があるとは思いますが、その解釈で合っているでしょうか。
また、この場合1列分しか出力できていないので、検索する右の範囲をEN列まで広げて、全てのセル値を貼り付けたいです。
VLOOKUP関数にこだわらず範囲指定でコピー&ペーストする方法があれば、ご教示いただければ幸いです。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PC:Windows11
ソフト:Microsoft365 Excel
参考URL:
回答1件
あなたの回答
tips
プレビュー