• ベストアンサー

Excel VBE 検索結果がない時の対処方法

いつもお世話になっております。 Excelで簡単な文字当てゲーム的なものを作っています 文字列(100個程度)の中から、ある文字列を探し出して、そのセルの文字色を塗り替えるというマクロを組んでいます。 検索部分は下記のように記述してあります。 検索文字列がある時にはうまく動作しますが 検索文字列がない時にはエラーになります。 検索文字列がない時の対処方法を教えて下さい。 よろしくお願いします。 kaitou = Range("g2").Value Range("G2").Select Selection.Copy Columns("B:B").Select Selection.Find(What:=kaitou, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>検索文字列がない時にはエラーになります。 エラー処理をしましょう。 エラーを無視するだけで良いなら、On Error Resume Next とします。 http://www.geocities.co.jp/Technopolis/2082/Soft/Excel_b.htm#errorroutine http://www.k1simplify.com/vba/tipsleaf/leaf242.html Sub test() kaitou = Range("g2").Value On Error GoTo errJob Columns("B:B").Select Selection.Find(What:=kaitou, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate errJob: If Err.Number <> 0 Then If Err.Number = 91 Then MsgBox "検索値" & "[" & kaitou & "]が見つかりません。" Else MsgBox "エラーが発生しました。" End If Else MsgBox "[" & kaitou & "] が見つかりました。" End If End Sub

hasmiya
質問者

お礼

早速の回答ありがとうございました。うまく動作しました

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 こんな感じかしら? >検索文字列がない時の対処方法を教えて下さい。 一旦、Range型の変数で受けて、変数が空かどうかを調べます。 ただし、入力が数字の場合は、LookAt:=xlPart は、不向きです。 以下は、イベント・ドリブン型にしましたので、G2 を入れるとマクロが動きます。少し、気になる点も残っていますが、B列に同じものがなければ、問題はないと思っています。 'シートモジュールに入れてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Target.Address <> "$G$2" Then Exit Sub  '除外条件 If IsEmpty(Target.Value) = True Then Exit Sub '除外条件 Columns("B:B").Interior.ColorIndex = xlNone Application.EnableEvents = False Set r = Columns("B:B").Find(What:=Target.Value, _             LookIn:=xlValues, _             LookAt:=xlPart, _             SearchOrder:=xlByRows, _             SearchDirection:=xlNext, _             MatchCase:=False, _             MatchByte:=False, _             SearchFormat:=False)   If r Is Nothing Then     MsgBox "見つかりません", vbInformation   Else     r.Interior.ColorIndex = 34 '薄い水色   End If Application.EnableEvents = True End Sub

関連するQ&A

  • EXCEL VBAでの 文字列検索

    セル内の文字列を部分一致で検索したいのですが、 下記の構文だと、検索対象シートを選択しなくてはならないため、 PGの動きが堅くなってしまいます。何かいい方法をご存知の方、 教えてください。 Selection.Find(What:=key, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate Cells.FindNext(After:=ActiveCell).Activate

  • EXCEL マクロでの検索をお教えください

     下記のようなマクロを使いたいのですがこの場合×があるときは良いのですが、  無いときエラーが出ます。どの様にすれば良いのかお教えください。  無いときエラーは オブジェクト変数または With ブロック変数が設定されていません。  となります。 Sub 検索()    Range("K12:K70").Select    Cells.Find(What:="×", After:=ActiveCell, LookIn:= _    xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _    xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • マクロエラ-

    初心者です。win2000,エクセルでマクロが途中で止まってしまいます。時々に、最後までいくことがありますが、8割がたは、同じところでストップします。 マクロ言語は理解できていません。 うまく完了のケ-スは、デ-タの中身次第かなと思います。 記憶では、”0”があれば、何かをするようにしたと思います。 想定外のデ-タで、とまるのなら、回避方法を教えてください。 黄色反転して、ストップする部分は、以下です。 mcr3 Range("A1").Select ActiveCell.SpecialCells(xlLastCell).Select Columns("C:C").Select Selection.Find(What:="0", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate いつもここで止まります。 ActiveCell.Replace What:="0", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False Selection.Find(What:="0", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate -----------→つずく。

  • VBA★findを使って見つけたセルの値を取得

    AA="タナカ" Selection.Find(What:=AA, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate 自動マクロでコレをつくりました。 タナカを見つけてその隣の変数を取得するというものを作りたいと思っています。 関数で言うとVlookupでやるものをマクロ化しようとしています。 検索して見つかったセルの右隣のセルの値を取得するにはどうしたらいいですか?

  • エクセルで検索と貼り付けのマクロを組みたい

    エクセルで次のようなマクロを組みたいのですがうまくいきません。 ・C5からBB6の範囲において、Aという文字が入っているセルを検索し、その4行下1列右にコピーしておいたものを値だけ貼り付ける。 検索範囲を指定したいのは同じシート内に他にもAという文字が入っているセルがあるからです。このマクロを実行すると何故かC5からBB6の範囲以外のセルを選択し、貼り付けてしまいます。どこがいけないのでしょうか。ぜひ、教えてください。お願いします。 Range("C5:BB6").Select Cells.Find(What:="A", After:=ActiveCell, LookIn:=xlValues,LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _False, MatchByte:=False, SearchFormat:=False).select Selection.Offset(4, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False

  • 文字検索マクロで質問です。

    文字検索マクロで質問です。 下記のマクロを作成したのですが、A1に検索する文字を入力してA列(A5:11700)のみを検索して該当が有ったらそのセルを色を付けし、又,該当が無ければMSG BOXで”該当なし”と表示するマクロを御教授頂けますか。 Cells.Find(What:=Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas,   LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub 以上、宜しくお願い致します。

  • エクセルのマクロについていくつか質問があります

    エクセルのマクロについていくつか質問があります 1 例えばA1セルが赤く塗りつぶされている場合隣のB1セルに赤と表示させたいのですが出来ますか 実際には色は何色かあります 2 セルの検索で検索であったセルを選択状態にするにはどうすればいいですか いちおう検索構文まではできてます Selection.Find(What:="6", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate 以上ですよろしくお願いします

  • VBAのFINDのエラーを回避したいです。

    以下のようなものを作成しましたが、1シートでは、問題なく回るものの2シート目のmをFINDしているところでエラーが発生します。原因は、該当するmが存在しないためだと思うのですが、そのような場合にエラーを回避し、次のシートへ飛びエラーが発生したシート番号を最後に表示してほしいです。 そのようなことは可能でしょうか? 読みにくいプログラムかもしれませんが、よろしくお願いします。 Dim top, m, under, bottom, cnt, she Application.ScreenUpdating = False '画面固定 cnt = Sheets.Count 'シートの数 For she = 1 To cnt Sheets(she).Activate Columns("F:F").Select Selection.Find(What:="0", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate top = ActiveCell.Row - 1 Rows("1:" & Format(top)).Select Selection.Delete Shift:=xlUp Range("A1").Select m = Range("E1") + 10 If m >= 60 Then m = m - 60 Else m = m End If Columns("E:E").Select Selection.Find(What:=Format(m), After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate under = ActiveCell.Row bottom = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row - 1 Rows(Format(under) & ":" & Format(bottom)).Select Selection.Delete Shift:=xlUp Range("A1").Select Next she End Sub

  • 検索した後の見つかった件数を取得したい

    画像のように手作業で検索した場合、下に検索結果の個数が表示されますが これをVBA内で取得することは可能でしょうか? マクロの記録だと Sub Macro() Cells.Find(What:="a", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub となるのですが、最後に全部の個数を取得したいです。

  • エクセルマクロで行挿入

    「マクロの記録」でマクロを作っていて限界を見たので質問します。 A列に5桁コード、B列から付随するデータを使い、 この5桁コードの頭文字が「1」から「2」に変わる所に一行挿入させたいです。 挿入の指定場所に検索を入れ込むのかなぁとやってみたところ、エラーになりました。 ↓これがそれ。 Columns("A:A").Select range(Selection.find(What:="2????", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate) As range Selection.EntireRow.Insert てんで見当違いかもしれませんが参考に貼り付けてみました。 どうすれば良いか教えてください。 (WinNT・Excel2000)

専門家に質問してみよう