- ベストアンサー
Excel文字列検索方法についての質問
- Excelでセルに任意の文字列をペーストし、リンク先のセルの文字列を検索する方法について質問です。
- FIND関数やVBAのCell.Findを使用して文字列を検索しようとしましたが、参照する文字列が相対的に変化するため、特定のセルの中に入力された文字列を参照してブック内を検索する方法がわかりません。
- 現在のコードでは、検索対象がRangeオブジェクトになっているため、Activesheet上でしか検索がかかりません。すべてのシートに検索をかけるためには、どのような設定をすればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
全てのワークシートを検索するのなら、 Sub test() Dim ws As Worksheet Dim moji As String Dim c As Range moji = "B1" For Each ws In Worksheets With ws Set c = .Range("A:A").Find(What:=moji, After:=.Range("A" & Rows.Count), _ LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then .Activate c.Select Exit Sub End If End With Next MsgBox "なかったよ" End Sub 順番に見ていくしかないのでは。
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
moji = Sheet1("B1") ここも変なのですが。 If Not c Is Nothing Then c.Select ElseIf Not b Is Nothing Then b.Select ElseIf Not d Is Nothing Then d.Select End If 1行目の If Not c Is Nothing Then c.Select でIF文は終了しています。なので以降のELSEIFに対してのIFが見つからないのです。 (1行で終わるのであれば書き方は問題ないですが、以降にELSEがあるので問題になります。) If Not c Is Nothing Then c.Select ElseIf Not b Is Nothing Then b.Select ElseIf Not d Is Nothing Then d.Select End If と言うように改行すれば解決かと。
お礼
たびたびありがとうございます。 >moji = Sheet1("B1") ここも変なのですが。 確かにトンちきなことを書いてますね。 この時間までいろいろ試してエラー400と戦いながら(笑) Sub test() ' 'test macro ' Dim moji As String Dim c As Range Dim b As Range Dim d As Range moji = Sheet1.Range("B1") Set c = Sheet1.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) Set b = Sheet2.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) Set d = Sheet3.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then Sheet1.Select c.Select ElseIf Not b Is Nothing Then Sheet2.Select b.Select ElseIf Not d Is Nothing Then Sheet3.Select d.Select End If End Sub となりました。これだと指定したシート範囲内にsheet1のB1に入力した文字列を検索できます。朝から四苦八苦していましたが今日中に目処が立ったのもご指導のおかげです。今後は改行の効果についても頭に入れて勉強します。ありがとうございました!
補足
ありがとうございます。順番に見ていくしかないという一言が一番利きました(笑い)。午後の間、格闘してみましたが Sub test() moji = Sheet1("B1") Set c = Sheet1.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) Set b = Sheet2.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) Set d = Sheet3.Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then c.Select ElseIf Not b Is Nothing Then b.Select ElseIf Not d Is Nothing Then d.Select End If End Sub というようにSheet1のB1を検索文字欄に固定して検索項目を分け、それぞれを条件つきで表示してはどうかと思いました。が、Elseに対応する Ifがないとエラーが出ます。なぜなんでしょうか?