アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのVBAで文字の検索をしたいと思います
エクセルは2000です

エクセルのマクロの記録機能を利用して
下記のようなマクロを作成しましたが
これでは、別のシートの文字が検索できません
同一ブックの別のシートも検索できるようにするには
どうしたら良いでしょうか、よろしくお願いします

以下同一シートしか検索しない例
Sub Macro1()
Dim 検索文字 As String
検索文字 = InputBox("検索文字を入力してください")
Cells.Find(What:=検索文字, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
End Sub

A 回答 (2件)

こんにちは。



最初に、#1 さんの回答で試してみてからにしてください。
ここら辺は、Version によって左右されるかもしれませんので、はっきり言明できません。手元の資料(VBA辞典)では、2002までですので、良く分りません。

3シートをグループでSelect(またはActivate)しても、記録マクロレベルでは、どう見ても、ActiveSheetでしか検索するようには思えないです。他にやり方があるのかもしれませんが、Findメソッドを使う限りは、同じようなコンセプトになるのではないかなって思いました。その上で、私の考えたコードです。(LookIn の部分だけ、値検索にしました。)

Sub MacroSample1()
  Dim 検索文字 As String, sh As Worksheet
  Dim c As Range, myFadd As String
  検索文字 = InputBox("検索文字を入力してください")
  For Each sh In Worksheets(Array("Sheet1", "Sheet2", "Sheet3"))
   sh.Select
   myFadd = "$A$1"
   Set c = Cells.Find(What:=検索文字, _
          After:=Range(myFadd), _
          LookIn:=xlValues, _
          LookAt:=xlPart, _
          SearchOrder:=xlByRows, _
          SearchDirection:=xlNext, _
          MatchCase:=False)
   If Not c Is Nothing Then
     myFadd = c.Address
     Do
      c.Select
      If MsgBox("継続しますか?", vbOKCancel) = vbCancel Then
      Exit Sub
      End If
      Set c = Cells.FindNext(c)
     Loop Until c Is Nothing Or c.Address = myFadd
   End If
  myFadd = ""
  Next
End Sub

この回答への補足

Wendy02さんありがとうございました。
回答のコードを実行したところ
動作を確認できました、
利用させていただきたいと思います(感謝)
(補足)
私の環境は自宅がエクセル2000で
職場がもっと新しいバージョンです(2002かも)
エクセル2000では手動で検索してもシートしか
検索できませんが、職場のバージョンだと手動での
検索時に検索対象をブックにすると他のシートも検索
できますので、Findのパラメータを指定することにより
ブック検索が出来るのかなと思っていたのですが
そうではないのでしょうか?
(そうでないから、コードを書いてくれたのですね)

補足日時:2005/09/01 00:25
    • good
    • 0

Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select



として複数シートを選択した状態で検索を書ければ検索できます。

この回答への補足

g_nekoruさんありがとうございます
回答を参考にして
Sub Macro1()
Dim 検索文字 As String
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
検索文字 = InputBox("検索文字を入力してください")
Cells.Find(What:=検索文字, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
End Sub

のようにやってみたのですが、私の持っているエクセルではうまくいきませんでした、
「実行時エラー91
オブジェクト変数または、Withブロック変数が設定されていません」とでてしまいます
明日職場のエクセル(バージョンが新しい)でもためしてみます

補足日時:2005/08/31 23:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!