プロが教えるわが家の防犯対策術!

エクセルVBAのコードについて

ループで、シートと行を検索して、該当が無ければ最後にメッセージを出す

いつも、お世話になっております
コマンドボタン6を押すと、11番目のシートから最後のシートまで該当の文字列を検索、
該当があればそこのセルに色を付けるというコードなのですが、
ブック上に該当の文字列が存在しないときに、”存在しません”
というメッセージを出したいのですが、

-----------------ここからコード-----------
Private Sub CommandButton6_Click()
Dim i As Integer
Dim s As Integer
Dim t2 As String

Application.ScreenUpdating = False
t2 = TextBox2.Text
For i = 11 To Sheets.Count
Sheets(Sheets(i).Name).Select
For s = 27 To 56
Cells(s, 11).Select
If InStr(ActiveCell.Value, t2) > 0 Then
ActiveCell.Interior.ColorIndex = 6
     Else: MsgBox "存在しません"
End If
Next s

Next i

End Sub
------------------ここまで-----------------
上記のように書くと、
1行探す度にいちいちメッセージがでます
最後に一回だけメッセージを出したいのですができますでしょうか
よろしくお願いいたします

A 回答 (2件)

こんばんは。


こんなものでどうでしょうか。

Private Sub CommandButton6_Click()
 Dim i As Integer
 Dim s As Integer
 Dim t2 As String
 Dim cnt As Long

 Application.ScreenUpdating = False
 t2 = TextBox2.Text
 If t2 = "" Then Exit Sub
 For i = 11 To Worksheets.Count
  With Worksheets(i)
  cnt = 0
  For s = 27 To 56
   If InStr(.Cells(s, 11).Value, t2) > 0 Then
    .Cells(s, 11).Interior.ColorIndex = 6
    cnt = cnt + 1
   End If
  Next s
  End With
 Next i
 If cnt = 0 Then MsgBox "存在しません。"
End Sub

(一応、cnt で数を数えているので、必要に応じて、いくつ色をつけたかも分かります。
Sheets(i) と、Worksheets(i)とは厳密には違います。一応、グラフシートなどが混じっていないことを前提にしています。こちらも、不具合があれば訂正願います。)
    • good
    • 0
この回答へのお礼

ありがとうございました
tom04さまとお礼を間違えてかいてしまいましたが、直しかたがわからないので、このままtom04様のお礼をこちらに書きます すみません
やってみたら上手く行きました
やたらsheet等を指定してしまいます
省けるところは省くよう努力します
ありがとうございました

お礼日時:2018/11/20 12:40

こんばんは!



すでに的確な回答が出ていますが、別案として・・・
Boolean型(TRUEかFALSE)の変数を追加してみてはどうでしょうか?
その結果によってメッセージボックスを表示させる。

お示しのコードをそのまま使ってみました。

Private Sub CommandButton6_Click()
 Dim i As Integer
 Dim s As Integer
 Dim t2 As String
 Dim myFlg As Boolean '//★//

 Application.ScreenUpdating = False
  t2 = TextBox2.Text
   For i = 11 To Sheets.Count
    Worksheets(Sheets(i).Name).Select '//★//
     For s = 27 To 56
      Cells(s, 11).Select
       If InStr(ActiveCell.Value, t2) > 0 Then
        myFlg = True '//★"//
        ActiveCell.Interior.ColorIndex = 6
       End If
     Next s
   Next i
   If myFlg = False Then '//★//
    MsgBox "存在しません"
   End If '//★//
End Sub

こんな感じではどうでしょうか?


※ 最初に Application.ScreenUpdating = False
としていますので、最後は
>Application.ScreenUpdating = TRUE
を追加した方が良いですね。

※ コードを拝見するとSheetやCellを選択していますが、
わざわざ選択する必要はないと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました ご教示の通りにするとできました
グラフシートはworksheetデはないと言う事ですかね
勉強になります
ありがとうございました

お礼日時:2018/11/20 12:35

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