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
----------------------------------------------------------------
ご教示をお願い致します。
下記のアクティブでない同ブック内の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)
となっていますよね。
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"))
と書きます。あくまで個人的な好みというかこだわりですが。
すでに指摘されていますが、
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)
とか…
もちろん時と場合によりけりでしょうが、
質問者様の参考になればと思い、レス付けてみました。
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)) とする予定ですので
その前段階として仮の固定値とさせて頂いた次第です。
ありがとうございました。
お疲れ様です。
ヘンリーさん、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 )