[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAで特定のセルに複数の特定の文字が一つでも入っていたらエラー表示を出す』(shirosuke)
よろしくおねがいします。
情報システム部で使用物品のデータ管理しているエクセルファイルを現場でダウンロードしそれを元に現場で作成したカウント用のエクセルファイルにコピー&ペーストし、物品個数をカウントしています。
しかし使用できない物品が情報システム部では入力され現場では使用できない物品のためカウントができない様になっています。カウントにずれが生じてしまい、どこに使用できない物品が入力されているのかVBAでエラーチェックしメッセージが表示できないか教えていただけたらと思います。
特定のセルは飛び飛びとなっています。特定セル A1 B1 C1 A3 B3 C3 A5 B5 C5と複数です。特定セル以外は使用できない物品#1or#3or#5は使用可能なためエラー表示は出さなくてもいい。
使用できない物品 ♯1or♯3or♯5
A B C 1 ♯2 ♯2 #2 2 ♯1 #1 #1 3 #3 #2 #2 4 #1 #1 #1 5 #5 #1 # 6 #3 #3 #3 7 #5 #5 #5
A3に使用できない#3が入っていて、B5,C5に使用できない#1が入っているため"A3、B5、C5に使用できない物品が入っています。確認してください"とメッセージが出るようにしたいです。よろしくおねがいします。
< 使用 Excel:Office365、使用 OS:Windows10 >
(もちろん、エラーメッセージにすることもできますが……)
(DS) 2022/01/08(土) 16:35
こんな風に色をつかったほうが分かりやすいかも。
Sub test() Dim badWords As Variant Dim badW As Variant Dim rng As Range Dim e As Range Dim p As Long Dim flag As Boolean
badWords = Split("#1,#3,#5", ",") '例 Set rng = Range("A1:C1,A3:C3,A5:C5") '例 rng.Font.ColorIndex = xlAutomatic 'テキストの色を標準に戻す
For Each e In rng If Len(e) > 0 Then For Each badW In badWords p = InStr(e.Value, badW) If p > 0 Then e.Characters(Start:=p, Length:=Len(badW)).Font.Color = vbRed flag = True End If Next End If Next If flag Then MsgBox "赤の個所の単語は禁止されています" End Sub
#1 が#100 などにマッチしてしまうといった話は、別途あります。 単なる例示でしょうから、とりあえず無視しておきます。 (γ) 2022/01/08(土) 19:31
その後印刷作業でのVBAを作成したいと考えています。
塗りつぶしに気づかず印刷を行おうとした場合に、どこのセルに塗りつぶしがあります。確認してください。とメッセージが出て「はい」選択すると印刷はキャンセル、「いいえ」を選択すると「印刷しますか」のメッセージが出て「はい」、「いいえ」を選択し実行できるVBAを作成したいのですが教えていただけたらと思います。塗りつぶしがあったとしても印刷する場合があります。よろしくお願い致します。
対象範囲はB3からS32です。
塗りつぶしの色は赤 パターン種類 6.25% 灰色としています。
(shirosuke) 2022/01/10(月) 17:08
一例として。 細かい改良はご自身でお願いします。
Sub test() Dim r As Range Dim str() As String Dim cnt As Long, buf As Long Dim flg As Boolean For Each r In Range("B3:S32") With r.DisplayFormat.Interior If .Color = vbRed And .Pattern = xlGray8 Then ReDim Preserve str(cnt) str(cnt) = r.Address(False, False) cnt = cnt + 1 flg = True End If End With Next r If flg Then buf = MsgBox(Join(str, ",") & " に塗りつぶし有り。要確認。" & vbCrLf & "このまま印刷しますか?", vbYesNo) Else buf = MsgBox("印刷しますか", vbYesNo) End If If buf = vbYes Then ActiveSheet.PrintPreview 'プレビューが不要なら PrintOut End If End Sub (参考) 2022/01/10(月) 18:54
当方の環境では想定通り動作しているので、お答えしようもありませんが、 可能性としては、 ・塗りつぶしたのが対象範囲「B3:S32」外だった。 ・条件付き書式の設定が「赤色且つパターンの種類が6.25%灰色」では無い。 とかでしょうか。
それでもダメなら、新規ワークシートで以下のコードを実行してもらえますか。
Sub test() Dim r As Range Dim str() As String Dim cnt As Long, buf As Long Dim flg As Boolean '------------------------------ With Range("B3").Interior .Color = vbRed .Pattern = xlGray8 End With '------------------------------- For Each r In Range("B3:S32") With r.DisplayFormat.Interior If .Color = vbRed And .Pattern = xlGray8 Then ReDim Preserve str(cnt) str(cnt) = r.Address(False, False) cnt = cnt + 1 flg = True End If End With Next r If flg Then buf = MsgBox(Join(str, ",") & " に塗りつぶし有り。要確認。" & vbCrLf & "このまま印刷しますか?", vbYesNo + vbExclamation) Else buf = MsgBox("印刷しますか?", vbYesNo + vbQuestion) End If If buf = vbYes Then ActiveSheet.PrintPreview 'プレビューが不要なら PrintOut End If End Sub (参考) 2022/01/15(土) 16:57
条件付き書式が有効になっているセルの上で下記のコードを実行して、 イミディエイトに表示された値に書き換えればよろしいかと。
Sub macro() With Selection.DisplayFormat.Interior Debug.Print "Color:" & .Color Debug.Print "Pattern:" & .Pattern End With End Sub (参考) 2022/01/15(土) 21:10 ※不要部削除しました。
下記コードを実行して
Sub macro() With Selection.DisplayFormat.Interior Debug.Print "PatternColorIndex:" & .PatternColorIndex End With End Sub
以下に書き換え
If .Pattern = xlGray8 And .PatternColorIndex = 上のコードで表示された数値 Then (参考) 2022/01/15(土) 21:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.