• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL マクロでの検索をお教えください)

EXCELマクロでの検索方法を教えてください

このQ&Aのポイント
  • EXCELマクロにおいて、指定した範囲内で特定の値を検索する方法を教えてください。
  • 具体的には、×が存在する場合は良いのですが、存在しない場合にエラーが発生します。この場合、どのように対応すれば良いでしょうか?
  • エラーメッセージ「オブジェクト変数またはWithブロック変数が設定されていません」と表示されます。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! すでに的確な回答は出ていますが・・・ 仮に最初に見つかったセルをアクティブにする場合は Sub Sample1() Dim c As Range Set c = Range("K12:K70").Find(what:="×", LookIn:=xlValues, lookat:=xlPart) If c Is Nothing Then MsgBox "該当データなし" Else c.Select End If End Sub 該当セルが複数あり、すべてを選択する場合は Sub Sample2() Dim c As Range, myRange As Range Set myRange = Range("K12:K70").Find(what:="×", LookIn:=xlValues, lookat:=xlPart) If Not myRange Is Nothing Then For Each c In Range("K12:K70") If InStr(c, "×") > 0 Then Set myRange = Union(myRange, c) End If Next c myRange.Select Else MsgBox "該当データなし" End If End Sub こんな感じではどうでしょうか?m(_ _)m

yama0192
質問者

お礼

  tom04 様  早速の回答ありがとうございす  大変勉強になりました。   Sample1 を使わせていただきたいと思っています  テストさせていただいたところ希望どうりの作業ができるように  なりました大変助かりました。  もちろん他のかたのもきちんと動作しましたが今回tom04 様  を使わせていただくこととしました。   ありがとうございました。

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。 On Error Resume Next を使って、見つからなければメッセージを表示するようにします。 3種類挙げておきます。 Findメソッドについては、VBAのヘルプで(使用例を含めて)確認しておいてください。 ' ' /// Sub Re8506777a()  '  ご提示のコードと同じ挙動+notfoundメッセージ   Dim rtn ' ' K12:K70 を選択   Range("K12:K70").Select   On Error Resume Next ' ' K12:K70 の中で 【K12よりも下で最初に見つかる】"×"値のセルをアクティブにする。 ' '   「K12が"×"値」の場合でも、「K12の次」に見つかる"×"値のセル、、 ' '   "×"値がK12にしか無ければ、K12、をアクティブにします。   rtn = Selection.Find(What:="×", After:=ActiveCell, LookIn:=xlValues, _     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _     MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate   On Error GoTo 0   If rtn <> True Then MsgBox "Find(""×""):notfound" End Sub ' ' /// Sub Re8506777b()   '  先頭から探す版   Dim rtn   With Range("K12:K70") ' ' K12:K70 を選択     .Select     On Error Resume Next ' ' K12:K70 の中で 【先頭から探して最初に見つかる】"×"値のセルをアクティブにする。     rtn = .Find(What:="×", After:=.Cells(.Cells.Count), LookIn:=xlValues, _       LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _       MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate     On Error GoTo 0   End With   If rtn <> True Then MsgBox "Find(""×""):notfound" End Sub ' ' /// Sub Re8506777c()   '  先頭から探す+Range型オブジェクト変数版   Dim myRange As Range   With Range("K12:K70") ' ' K12:K70 を選択     .Select     On Error Resume Next ' ' K12:K70 の中で 【先頭から探して最初に見つかる】"×"値のセルをmyRangeに格納する。     Set myRange = .Find(What:="×", After:=.Cells(.Cells.Count), LookIn:=xlValues, _       LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _       MatchCase:=False, MatchByte:=False, SearchFormat:=False)     On Error GoTo 0   End With   If myRange Is Nothing Then     MsgBox "Find(""×""):notfound"   Else ' ' 見つかったセルをアクティブにする。     myRange.Activate   End If End Sub ' ' ///

yama0192
質問者

お礼

  cj_mover 様  早速の回答ありがとうございす  大変勉強になりました。

noname#203218
noname#203218
回答No.1

一例です。ご参考まで。 Sub test() Dim Obj As Object Dim S_word As String S_word = "×" Set Obj = Range("K12:K70").Find(S_word, , LookAt:=xlPart) If Obj Is Nothing Then MsgBox S_word & "は見つかりませんでした。" Else Obj.Activate End If End Sub 見つからなっか場合は、メッセージを出すようにしました。又検索文字列をS-wordで検索するように記載しましたが、不用であれば削除下さい。

yama0192
質問者

お礼

pidum 様  早速の回答ありがとうございす  大変勉強になりました。

関連するQ&A