エクセル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
お礼
回答が遅くなって申し訳ありません。 やりたい事を1個にしてそれを記述して、 それが正常に動いたら 次にやりたい事を1個だけ記述して それが正常に動いたら また.... で繰り返して たくさんできたプロシージャーを合体させて 重複部分は纏めるというので行いました。 重複部分の纏めはできませんでした。 あとインプットBOXに入力した値とSheet2のA列を検索して照合させるのが どうしてもできませんでした。 Sheet2のA列には =B2&C2&D2 と式が入れてあり =B3&C3&D3 =B4&C4&D4 . . . とデータのある行まで式が入っています。 この状態だとインプットボックス1~3に入力した値を連結させた値と をぶつけてもヒットしませんでした。 Sheet2のA列をコピーして 「形式を指定して貼付」で「値」を選択して A列に値を貼付して式を削除したらヒットするようになりました。 (よくわかりません。) 補足に完成したコードを記載します。 どうもありがとうございました。
補足
一応思ったとおりに動いているコード1/2 Sub 表示板作成() ThisWorkbook.Activate Sheets("Sheet1").Select Dim 検索値1 Dim 検索値2 Dim 検索値3 Dim 検索値4 Dim 判定値 Dim 判断 Dim 確認 Dim 再確認 Dim 範囲 As Range Dim Obj As Object Dim nRow As Long Set 範囲 = ThisWorkbook.Worksheets("Sheet2").Range("A2:G10000") MsgBox "●してください", vbExclamation, "初期設定" Do 検索値1 = Application.InputBox("型番を【半角で英数は大文字】で【ハイフンを抜いて】10桁か13桁か14桁で入力してください ") '「キャンセル」押下の場合 If 検索値1 = "False" Then MsgBox "終了します", vbExclamation, "注意" Call 定位置 Exit Sub End If '指定文字数の時はループを抜ける If Len(検索値1) = 10 Or Len(検索値1) = 13 Or Len(検索値1) = 14 Then Exit Do End If MsgBox "指定文字数以外です。再入力してください", vbCritical, "エラー!!" Loop Do 検索値2 = Application.InputBox("●を半角英数で4桁で入力してください") If 検索値2 = "False" Then MsgBox "終了します", vbExclamation, "注意" Call 定位置 Exit Sub End If If Len(検索値2) = 4 Then Exit Do End If MsgBox "4桁ではありません。再入力してください", vbCritical, "エラー!!" Loop Do 検索値3 = Application.InputBox("●を半角英数で4桁で入力してください") If 検索値3 = "False" Then MsgBox "終了します", vbExclamation, "注意" Call 定位置 Exit Sub End If If Len(検索値3) = 4 Then Exit Do End If MsgBox "4桁ではありません。再入力してください", vbCritical, "エラー!!" Loop 検索値4 = 検索値1 & 検索値2 & 検索値3 '検索値4のVlookupエラー回避の為検索地4の有無確認 Set Obj = Worksheets("Sheet2").Range("A2:A1000").Find(検索値4, LookAt:=xlWhole) If Obj Is Nothing Then MsgBox "該当データがありません。", vbCritical, "エラー!!" MsgBox "型番を全角で入力しませんでしたか?", vbCritical, "エラー!!" MsgBox ("入力間違いではない場合はマスタに未登録です。管理者に問い合わせてください。 ") MsgBox "終了します。", vbExclamation, "注意" Call 定位置 Exit Sub Else nRow = Obj.Row '該当行 End If 判定値 = Application.WorksheetFunction.VLookup(検索値4, 範囲, 7, 0) If 判定値 = "済" Then 判断 = MsgBox("発行済みです。再度データ取得しますか?", vbYesNo + vbQuestion) If 判断 = vbNo Then MsgBox "終了します。", vbExclamation, "注意" Call 定位置 Exit Sub End If End If Sheets("Sheet1").Select ↓回答A-NO.2の補足に続く