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

解決済みの質問

エクセルVBAで別ブックの条件検索

VBA初心者です。エクセルは2007です。
『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。
検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。

データのあるブックは同じ形式でシートには表があります。
数 a b c d
1 A B C D
2 ○ × △ ■
3 Z Y X W
    ・
    ・
検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、
出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。

本やインターネットで調べましたがわかりませんでした。
解決方法を教えていただきたいです。お願いします。

Sub 検索()
Dim a, b, c, d As Range

Dim 番号, ブック, シート As Integer
With Workbooks("検索.xlsm").Sheets("検索条件")
数 = .Range("N22").Value
ブック = .Range("L22").Value
シート = .Range("P22").Value
End With

Dim wb As Workbook
Dim sh As Worksheet
Dim set範囲 As Variant

With Workbooks("検索条件.xlsm").Sheets("出力先")
Set a = .Range("D1")
Set b = .Range("J6")
Set c = .Range("L23")
Set d = .Range("J69")
End With


Select Case ブック
Case 1
Set wb = Workbooks("Book1.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = Worksheets(1)
Case 2
Set sh = Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case 2
Set wb = Workbooks("Book2.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = Worksheets(1)
Case 2
Set sh = Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case 3
Set wb = Workbooks("Book3.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = Worksheets(1)
Case 2
Set sh = Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case Else
MsgBox "nothing", vbExclamation, "nothing"
End Select

※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438

a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False)
b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False)
c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False)
d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False)

End Sub

投稿日時 - 2011-08-30 14:09:10

QNo.6977647

困ってます

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

「Select Case ブック」からエラーヵ所までは以下の様に修正するとよろしいかと思います。



Select Case ブック
Case 1
Set wb = Workbooks("Book1.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = wb.Worksheets(1)
Case 2
Set sh = wb.Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case 2
Set wb = Workbooks("Book2.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = wb.Worksheets(1)
Case 2
Set sh = wb.Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case 3
Set wb = Workbooks("Book3.xlsm")
wb.Activate
Select Case シート
Case 1
Set sh = wb.Worksheets(1)
Case 2
Set sh = wb.Worksheets(2)
Case Else
MsgBox "・・・・・", vbExclamation, "nothing"
End Select
Case Else
MsgBox "nothing", vbExclamation, "nothing"
End Select
Set set範囲 = sh.Range("A4:E42") '  ←エラー438

投稿日時 - 2011-08-30 14:24:14

お礼

迅速な回答ありがとうございます。
回答の通り実行しました。デバッグはなくなりましたが、データのあるシートがActiveになり、
データはシートに抽出することができませんでした。

投稿日時 - 2011-08-30 19:21:53

ANo.1

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

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

回答(2)

ANo.2

wb.Activate
でご自身でアクティブにしているからでは?

投稿日時 - 2011-08-30 19:33:50

お礼

すみません。わたしがアクティブにしていました。

やはりデータの抽出は上手くいきませんでした。
VlookupでなくFindを用いた方がよろしいのでしょうか?
お手数お掛けして申し訳ございません。

投稿日時 - 2011-08-30 20:33:31

あなたにオススメの質問