エクセル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行探す度にいちいちメッセージがでます
最後に一回だけメッセージを出したいのですができますでしょうか
よろしくお願いいたします
No.1ベストアンサー
- 回答日時:
こんばんは。
こんなものでどうでしょうか。
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)とは厳密には違います。一応、グラフシートなどが混じっていないことを前提にしています。こちらも、不具合があれば訂正願います。)
ありがとうございました
tom04さまとお礼を間違えてかいてしまいましたが、直しかたがわからないので、このままtom04様のお礼をこちらに書きます すみません
やってみたら上手く行きました
やたらsheet等を指定してしまいます
省けるところは省くよう努力します
ありがとうございました
No.2
- 回答日時:
こんばんは!
すでに的確な回答が出ていますが、別案として・・・
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
ありがとうございました ご教示の通りにするとできました
グラフシートはworksheetデはないと言う事ですかね
勉強になります
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】PDF出力に任意のファイ...
-
エクセルで設定していないのに...
-
エクセルでページごとにヘッダ...
-
この記号、手短(テミジカ)に日本語...
-
Excelマクロ パスワードを入力...
-
[EXCEL] あるフィールドをキー...
-
Excel 一覧表から特定の数値を...
-
エクセルのシートごとに連番を...
-
VBA エクセル RANDBETWEEN関数...
-
PowerPointの表内のカンマ
-
エクセルでエンターを押すと隣...
-
EXCEL 連動したドロップダウン...
-
エクセルの計算式でコンマを付...
-
EXCELでタイトル行と一番下の行...
-
エクセルでleft関数の結果が表...
-
Wordの差し込み印刷で空白行が...
-
エクセルでオートサムを使った...
-
エクセル 数式の無効化
-
INDEXとMATCH関数で#N/Aが出る...
-
エクセル 印刷範囲外を非表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】PDF出力に任意のファイ...
-
エクセルのシートごとに連番を...
-
エクセルでページごとにヘッダ...
-
excel串刺し計算で合計値が表示...
-
エクセルで設定していないのに...
-
エクセルで、ハイパーリンクの...
-
複数のEXCELシートの印刷順の指定
-
Excelマクロ パスワードを入力...
-
Access2010 Excelのエクスポー...
-
既存ワークシートにピボットテ...
-
EXCELでシート名を一括変更したい
-
[EXCEL] あるフィールドをキー...
-
【VBA】#N/Aを無視して串刺し...
-
エクセル VBAでシートのコピー...
-
excelのシート番号を取得したい...
-
Excel 一覧表から特定の数値を...
-
エクセルで シート保護のパス...
-
VBA エクセル RANDBETWEEN関数...
-
この記号、手短(テミジカ)に日本語...
-
エクセルで個人成績グラフをつ...
おすすめ情報