こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA VLOOKUP 別のファイルを参照

VBA VLOOKUP 別のファイルを参照

いつもこちらでお世話になっている者です。
VBAの勉強をしております。

別のファイルからVLOOKUPで値を参照したいのですが、
範囲を指定してみましたが、
「worksheetFunctionクラスのVlookupプロパティを参照できません」
とのメッセージが出てしまいます。

なお、値は空白になる行もありますので、
if関数で回避してみましたがうまくいきません。

いろいろ試しましたが、何度やってもうまくいかないので
こちらに質問させていただきました。
お詳しい方、ご伝授いただければ助かります。
よろしくお願い致します。
環境はExcel2007です。

Sub sample()

Dim 範囲 As Range
Dim wb As Workbook, wb2 As Workbook
Dim r As Integer,intRow As Integer

Workbooks.Open Filename:="***.xlsm"
Set wb = ThisWorkbook
Set wb2 = ActiveWorkbook
Set 範囲 = wb2.Sheets("PvtSht2").Range("Database3")

r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).ColumnintRow = 3
With wb.Sheets("sheet1")
Do Until .Cells(intRow, 1).Value = ""
.Cells(intRow, (r + 1)) = Application.WorksheetFunction.If((Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) = 0, "", Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False))
intRow = intRow + 1
Loop
End With

End sub

投稿日時 - 2010-06-07 16:10:49

QNo.5951470

すぐに回答ほしいです

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

2つ問題があると思います。

1.Application.WorksheetFunction.If
WorksheetFunctionには「If」はありません。
 単純にVBAのIFを使えば良いと思いますが、結果が「空白」か「0」かまたは
 マッチしない時等対応を変えないとだめだと思います。

2.「worksheetFunctionクラスのVlookupプロパティを参照できません」
 式は合っているとは思いますが、Range("Database3")が気になります。
 試しにRange("A1:B9")等2列以上は問題がありませんが、Range("A1:A9")の1列の場合
 上記エラーメッセージが表示されます。
 「"Database3"」の範囲を確認した方が良いかと思います。

投稿日時 - 2010-06-07 22:53:28

補足

お返事ありがとうございます。
さっそく試してみました。

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

投稿日時 - 2010-06-08 12:25:49

お礼

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

投稿日時 - 2010-06-08 16:20:12

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

 
ちょっと見で気づいた点。


>VLookup(●Cells(intRow, 1), 範囲, 2, False)

 ●の部分には .(ドット)が必要だと思いますが。。。
 

以上です。

投稿日時 - 2010-06-08 14:06:39

お礼

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

投稿日時 - 2010-06-08 16:16:47

あなたにオススメの質問