前提・実現したいこと
B4~D8にA~Cが入力された表があるとします。
表内の1行に2個以上同じ文字が入力されたら赤いセルになるよう、条件書式を入れています。
表に赤いセルが出現したタイミングで「名前が重複しています」というメッセージBOXを表示させたいです。
発生している問題・エラーメッセージ
VBA初心者で、添付写真のように見よう見まねで書いてみたのですが、上手くいきません。 ご教授いただければ幸いです。
該当のソースコード
Sub 重複確認() If Range("B4:D8").Interior.Color = RGB(255, 0, 0) Then AnswerNo = MsgBox("名前が重複しています", vbCritical) End If End Sub
試したこと
ネットで調べてみてもIF文で値をみて条件を出している記事は見るのですが、
色で条件をだしている記事を見かけなくて困っています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
こんな感じで、
DisplayFormat プロパティ
を使います。
Excel
1Sub test() 2 Dim c As Range 3 4 For Each c In Range("B4:D8") 5 If c.DisplayFormat.Interior.Color = vbRed Then 6 MsgBox "重複があります。: " & c.Address(False, False) 7 Exit Sub 8 End If 9 Next 10End Sub
参考>>
条件付き書式で変更された書式を取得する
追記>>
セルに入力した時にチェックするなら、色がどうのとか関係ないですよね?
ExcelVBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim rngEventArea As Range: Set rngEventArea = Me.Range("B4:D8") 3 4 If Target.CountLarge > 1 Then Exit Sub 5 Set Target = Intersect(Target, rngEventArea) 6 If Target Is Nothing Then Exit Sub 7 Set rngEventArea = Intersect(Target.EntireRow, rngEventArea) 8 9 If WorksheetFunction.CountIf(rngEventArea.Cells, Target.Value) > 1 Then 10 MsgBox "既に同じ値を入力済みです。", vbExclamation 11 Application.Undo 12 End If 13End Sub
あぁ、やってみてないけど、同じことがマクロなしでも、入力規則の機能でできるのでは?と思います。
マクロなしで出来るならマクロなしの方が、「元に戻す」がクリアされないので、
そちらの方がより良いかと思います。
投稿2019/06/02 08:27
編集2019/06/03 06:54総合スコア2167
0
ベストアンサー
既に、回答がついていて、重複する部分もありますが、
表に赤いセルが出現したタイミングで「名前が重複しています」というメッセージBOXを表示させたいです。
「表に赤いセルが出現したタイミング」となると、Worksheet_Change を使うことになりますね。
vba
1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim rng As Range 3 Set rng = Intersect(Target, Range("B4:D8")) 4 If rng Is Nothing Then Exit Sub 5 6 Dim c As Range 7 For Each c In rng.Cells 8 If c.DisplayFormat.Interior.Color = vbRed Then 9 MsgBox "名前が重複しています", vbCritical 10 Exit For 11 End If 12 Next 13End Sub
投稿2019/06/02 08:41
総合スコア34347
0
事前に条件書式を入れなくても確認できる方法です。
試してみてください
VBA
1Sub JufukuKakunin() 2 Dim i As Long, j As Long 3 For i = 4 To 8 4 For j = 2 To 4 5 If Application.WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 4)), Cells(i, j)) > 1 Then 6 Cells(i, j).Select 7 Cells(i, j).Interior.ColorIndex = 3 8 MsgBox "重複があります。" 9 Exit Sub 10 Else 11 Cells(i, j).Interior.ColorIndex = 0 12 End If 13 Next j 14 Next i 15End Sub
<別解を追記>
行単位の重複を調査したい範囲で一度に確認する場合の記載は以下となります。
VBA
1Sub JufukuKakunin2() 2 Dim i As Long, j As Long 3 Dim bF As Boolean 4 For i = 4 To 8 5 For j = 2 To 4 6 If Application.WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 4)), Cells(i, j)) > 1 Then 7 Cells(i, j).Interior.ColorIndex = 3 8 bF = True 9 Else 10 Cells(i, j).Interior.ColorIndex = 0 11 End If 12 Next j 13 Next i 14 If bF Then 15 MsgBox "名前が重複している箇所を赤字にしました。" 16 End If 17End Sub
投稿2019/06/02 08:19
編集2019/06/02 12:10総合スコア1065
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
色で判定しなくても、条件付き書式の条件(色を付けている条件)で判定するで良いのではないでしょうか?
投稿2019/06/02 07:51
総合スコア298
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/03 01:26

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/02 11:45
2019/06/02 12:26
2019/06/02 12:44
2019/06/03 01:22