• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA VLOOKUP 別のファイルを参照)

VBA VLOOKUP 別のファイルを参照

このQ&Aのポイント
  • VBA VLOOKUPを使用して別のファイルから値を参照する方法について質問です。
  • 範囲を指定してVLOOKUPを実行したところエラーメッセージが表示されます。
  • 空白の行も含まれるため、if関数を使用してもうまく動作しません。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

2つ問題があると思います。 1.Application.WorksheetFunction.If WorksheetFunctionには「If」はありません。  単純にVBAのIFを使えば良いと思いますが、結果が「空白」か「0」かまたは  マッチしない時等対応を変えないとだめだと思います。 2.「worksheetFunctionクラスのVlookupプロパティを参照できません」  式は合っているとは思いますが、Range("Database3")が気になります。  試しにRange("A1:B9")等2列以上は問題がありませんが、Range("A1:A9")の1列の場合  上記エラーメッセージが表示されます。  「"Database3"」の範囲を確認した方が良いかと思います。

curo_chan
質問者

お礼

こちらの件、あれから試行錯誤して動くようになりました。 おそらく、wbやwb2をきちんとactivateしてなかったのが、原因と思われます。 助言いただきましてありがとうございました。

curo_chan
質問者

補足

お返事ありがとうございます。 さっそく試してみました。 1.そうだったのですね、if文は外しました。 On Error Resume Next~On Error GoTo 0で挟んでみたのですが問題ないでしょうか? 2.Set 範囲 = wb2.Worksheets("PvtSht2").Range("Database3")を MsgBox 範囲.Addressで試してみましたが、参照してほしい場所がきちんと選ばれていました。 範囲は2列です。 下記のように書き直してみたところ、 vlookupが1行ずつずれてしまうのです・・・ もしお分かりでしたら、ご指南いただけますか、よろしくお願い致します。 Sub test2() Dim wb As Workbook, wb2 As Workbook Dim r As Integer, intRow As Integer Dim 範囲 As Range Dim Database3 As Range Workbooks.Open Filename:="***.xlsm" Set wb = ThisWorkbook Set wb2 = ActiveWorkbook 'wb.Sheets("sheet1").Activate r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).Column With wb2.Sheets("PvtSht2") .Range("A4:B" & .Range("A" & _ .Rows.Count).End(xlUp).Row).Name = "Database3" End With Set 範囲 = wb2.Worksheets("PvtSht2").Range("Database3") MsgBox 範囲.Address intRow = 3 With wb.Sheets("sheet1") Do Until .Cells(intRow, 1).Value = "" On Error Resume Next .Cells(intRow, (r + 1)) = Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False) intRow = intRow + 1 On Error GoTo 0 Loop End With wb.Activate End Sub

その他の回答 (1)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

  ちょっと見で気づいた点。 >VLookup(●Cells(intRow, 1), 範囲, 2, False)  ●の部分には .(ドット)が必要だと思いますが。。。   以上です。

curo_chan
質問者

お礼

ありがとうございます。 こちらの件、直してみました。 ありがとうございました。

関連するQ&A