VBA初心者です。
集計.exl
野菜.exl
果物.exlとファイルがあり、野菜と果物にはシートが3枚づつあります。
集計ファイルのセルを野菜と果物ファイルから検索したいのです。
本等を見て調べたのですが、異なるBookからの検索方法が見つかりません。
Private Sub kensaku()
Dim i As Integer
Dim myFLd As Range, myRng As Range
'
i = Cells("3,2").Select
Workbooks.Open ("C:\果物.xls")
Worksheets.Select
Set myRng = myFLd.Find(what:=i, lookat:=xlWhole)
If myRng Is Nothing Then
Workbooks.Open ("野菜.xls")
Worksheets.Select
Set myRng = myFLd.Find(what:=i, lookat:=xlWhole)
Exit Sub
End If
If myRng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
MsgBox "対象" & myRng.Address
End Sub
としたのですが、
Set myRng = myFLd.Find(what:=i, lookat:=xlWhole)
部分のエラー(whitがありません)とでて、直りません。
あと、このやり方であっているのでしょうか?
アドバイスお願いします。
> Selectにしたのはvalueでは指定のセルに行かないんです。
行くとか行かないとかでは無く、Selectではダメです。
これでは i は必ず True(-1) です。
また、変数や構文もおかしいです。
what:=Range(i).Value や .Activate や myRng Is Nothing や myRng.Address
以下はマクロがあるブックのアクティブシートのセル M6 にある値と部分一致するものを 果物.xls の全シートから検索して、最初に見つかったセルを表示します。
Sub Test()
Dim wb1 As Workbook, ws As Worksheet, i, c
i = ThisWorkbook.ActiveSheet.Cells(6, "M").Value
Set wb1 = Workbooks.Open("C:\果物.xls ", UpdateLinks:=0)
For Each ws In wb1.Worksheets
Set c = ws.Cells.Find(what:=i, lookat:=xlPart)
If Not c Is Nothing Then Exit For
Next ws
If Not c Is Nothing Then
MsgBox "「" & i & "」 は " & wb1.Name & " " & ws.Name & "!" & _
c.Address & "にあります。" & _
vbCrLf & "内容は 「" & c.Value & "」", vbInformation
Else
MsgBox wb1.Name & " に対象は見つかりません。", vbCritical
End If
wb1.Close SaveChanges:=False
End Sub
Excelのバージョンが不明ですが、正直かなりおかしいです。
i = Cells("3,2").Select はたぶん i = Cells(3,2).value
myFLd も何もセットされてないのでまともに動かないでしょう。
Exit Sub を多用してますが、Subを抜けろって事なのでそこを通った時点で処理が終わってしまいます。
集計.xls の??シートのB3の値は、果物.xls や 野菜.xls の各シートの何処か1ヶ所にしか無いのでしょうか?
質問者
補足
回答ありがとうございます。
Selectにしたのはvalueでは指定のセルに行かないんです。
(""は気づき取りました)
papayukaさんご指摘の通りmyFLd も何もセットされてないので空で検索しているみたいです。
下記のように書き直したので、もう一度見てもらえますか?
i = Cells(6, "M").Select
Set wb1 = Workbooks.Open("C:\果物.xls ", UpdateLinks:=0)
Sheets("A商店").Select
Set C = Cells.Find(what:=Range(i).Value, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
If myRng Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
MsgBox "対象" & myRng.Address
End Sub
お礼
ありがとうございました。 勉強になりました。 これからも頑張って勉強します。