質問: Excel VBAでvlookup関数を使った処理を作りたいです。VBAをどのように作成すればよいか、ご教示をお願いします。 <やりたいこと> ・添付画像をご参照ください。 1まずSheet1のF列(項目6)の2行目~最下行までを選択し、Sheet3のA列(品名)へ貼り付ける。 2Sheet1のF列(項目6)とSheet2のA列(項目1)と照合し、マッチした場合には、C列(項目C)の情報をSheet2のB列(納期)へ転記、マッチしない場合には、ブランクをSheet2のB列(納期)へ転記 <具体的なアウトプットイメージ> ・添付画像をご参照ください 上記のことを実施したいです。よろしくお願いいたします。
回答: VBAでワークシート関数を使う方法は2種類あります。 この場合 WorksheetFunctionを使うのと使わないのとですが、意外と便利なのが使わない方法で、戻り値も違います。WorksheetFunctionは検索値が見つからないとVBAエラーが発生しますが、 Application.Vlookup(・・・とすると数式と同じ#N/A値を返すのでVBAが止まらずに済みます。つまりOn Error ~の構文がいらないわけです。このエラー値を利用して条件分岐もできるので便利ということです。 Sub test() Dim D, i As Long, n As Long, v As Variant With Sheets("Sheet1") n = .Cells(Rows.Count, 6).End(xlUp).Row - 1 ReDim D(1 To n, 1 To 2) For i = 2 To n + 1 D(i - 1, 1) = .Cells(i, 6).Value v = Application.VLookup(D(i - 1, 1), Sheets("Sheet2").Range("A:C"), 3, 0) If Not IsError(v) Then D(i - 1, 2) = v Next End With Sheets("Sheet3").Select Intersect(Range("A:B"), Rows("14:1000")).ClearContents Range("A14").Resize(UBound(D), 2) = D Range("B14").Resize(UBound(D)).NumberFormat = "yyyy/m/d" End Sub