Excel VBA 質問スレッド №2148 (解決済)

アクティブでない他ブックでのvlookup について

投稿者 : 餃子三人前     投稿日時 : 2025/09/23(Tue) 21:14:34     OS : Windows 11     EXCEL : Office 365
下記のアクティブでない同ブック内の2シートにおいて
vlookup を実行したいのですが、エラー表示が出てしまいます(実行時エラー1004 rangeメソッドは失敗しました 'Worksheet'オブジェクト)。

アクティブシートは別の作業でマクロで使用していますのでアクティブシートにはできない状況です。



検索値は ws.Cells(wgyo, 6) で wgyo の変数で2行目からw番目の行を読み込み、

(ws3.Cells(2, 1), ws3.Cells(52, 4))の表で検索値と一致する2番目の列を ws.Cells(wgyo, 7) に転記したいと思います。

ws と ws3 は アクティブでない同ブック内の2シートを定義しています。

-------------------------------------------------------------------------------------------
下記がエラーとなるコードです。

For wgyo = 2 To w

ws.Range(ws.Cells(wgyo, 7)) = WorksheetFunction.VLookup(ws.Range(ws.Cells(wgyo, 6)), ws3.Range(ws3.Cells(2, 1), ws3.Cells(52, 4)), 2, False)

next wgyo

-------------------------------------------------------------------------------------------
ちなみに下記のとおり、表を1行ずつ読み込めばいけるのですが。

For hgyo = 2 To 52

If ws.Cells(wgyo, 6) = ws3.Cells(hgyo, 1) Then

ws.Cells(wgyo, 7) = ws3.Cells(hgyo, 2)

End If

Next hgyo

----------------------------------------------------------------

ご教示をお願い致します。

スポンサーリンク
[返信 1] Re : アクティブでない他ブックでのvlookup について
投稿者 : ヘンリー     投稿日時 : 2025/09/24(Wed) 07:11:00
ws.Range(ws.Cells(wgyo, 7))
がおかしいです。

>表を1行ずつ読み込めばいけるのですが
というコードでは
ws.Cells(wgyo, 7)
となっていますよね。

[返信 2] Re : アクティブでない他ブックでのvlookup について
投稿者 : higeru     投稿日時 : 2025/09/24(Wed) 11:54:41
すでに指摘されていますが、

ws.Range(ws.Cells(wgyo, 7)) = WorksheetFunction.VLookup(ws.Range(ws.Cells(wgyo, 6)), ws3.Range(ws3.Cells(2, 1), ws3.Cells(52, 4)), 2, False)

右辺の VLookup の引数の「検索値」が不正です。

(誤)ws.Range(ws.Cells(wgyo, 6)) →(正)ws.Cells(wgyo, 6)

ちなみにその後の「範囲」は

ws3.Range(ws3.Cells(2, 1), ws3.Cells(52, 4))

でも間違いではありませんが、個人的には

Range(ws3.Cells(2, 1), ws3.Cells(52, 4))

と書きます。さらに言うと行列ともに変数ではないケースでは Cells は使わず

Range(ws3.Range("A2"), ws3.Range("D52"))

と書きます。あくまで個人的な好みというかこだわりですが。

[返信 3] Re : アクティブでない他ブックでのvlookup について
投稿者 : ヘンリー     投稿日時 : 2025/09/24(Wed) 12:02:05
higeru様
追加のご指摘ありがとうございます。
検索地のところもおかしかったですね。

>さらに言うと行列ともに変数ではないケースでは Cells は使わず
>Range(ws3.Range("A2"), ws3.Range("D52"))

私も同じ意見です。

普段は、マジックナンバーをなるべく使わないように配慮しています。
例えば、
Range(ws3.Range("A2").CurrentRegion)
とか…
もちろん時と場合によりけりでしょうが、
質問者様の参考になればと思い、レス付けてみました。

[返信 4] Re : アクティブでない他ブックでのvlookup について
投稿者 : 餃子三人前     投稿日時 : 2025/09/24(Wed) 22:57:09
お疲れ様です。

ヘンリーさん、higeruさん 投稿ありがとうございました。

おかげさまで無事に実行できました。

ありがとうございました。

Range(ws3.Range("A2"), ws3.Range("D52")) とする件については

今後行が増加し

Range(ws3.Cells(2, 1), ws3.Cells(n, 4)) とする予定ですので

その前段階として仮の固定値とさせて頂いた次第です。

ありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-10-11 05:50:10 )
タイトルとURLをコピーしました