プロが教える店舗&オフィスのセキュリティ対策術

いつも皆様には助けて頂き大変感謝しています。
いろいろ試したり調べたりしましたがうまく行かないので、また教えてください。

ダブりの行を比較して、どこが違うか一目でわかるように色をつけたいです。
可能であれば条件付き書式で。難しければVBAで可能でしょうか?

B列にダブりがないか、A列でCOUNTIFで数えています。

例えば「馬」の行が2件ダブっていた場合、どこの項目が違うのかを黄色で網掛したいです。

windows 10 使用

「ダブりの行を比較して、違うところに色をつ」の質問画像

質問者からの補足コメント

  • 必ずしも、上下に並んでいるとは限りませんし、よくよく考えたらダブりが2より多い時がもしかしたらあるかもしれません。言葉足らずで申し訳ありませんでした。

      補足日時:2020/01/17 15:36

A 回答 (4件)

こんにちは



ダブりが多い場合(例えば10行とか)の場合にどのように判断すれば良いのでしょうか?

ご提示のサンプルを見ると、「違うところ」と言っても、上の行には色がついていないので、
『最初に出現した行を正として比較し、次行以降でこれと異なる値のセルに色を付ける』
というような考え方にしてみました。(これなら多数行重複していても、単純比較で済みますので)

サンプルの図では行数がはっきりしませんが、1行目がタイトル行で2行目から値があるものと判断しました。
図のC2セル(=「12」の値があるセル)以降を選択して(C2セルがアクティブな状態で)条件付き書式を設定します。
「数式を使用して~~」の数式欄に
 =C2<>INDEX(C:C,MATCH($B2,$B:$B,0))
の条件式を設定し、書式を設定するのではどうでしょうか?
    • good
    • 0
この回答へのお礼

早々にご返答頂き助かりました。
ご丁寧に設定方法までありがとうございます。
ベストアンサーにさせて頂きました。お礼が遅くなり申し訳ありませんでした。

お礼日時:2020/01/29 10:02

最初に出現した行が必ずしも正しい訳けではないですよね?


であれば、その行にも色を付けちゃった方が見やすくないですか?
条件式は、こんな感じで。
=COUNTIFS($B:$B,$B2,C:C,"<>" & C2)>0
    • good
    • 0
この回答へのお礼

両方色付けの条件式ありがとうございます!!
大変勉強になりました。
お礼が遅くなり申し訳ありませんでした。

お礼日時:2020/01/29 10:03

こんばんは!



>上下に並んでいるとは限りませんし、よくよく考えたらダブりが2より多い時がもしかしたらあるかも

2回目以降の出現に関しては最初に出現したC列以降のデータを基準としています。
すなわち「ダブり」が3個以上あっても、
最初に出現したデータのC列以降にない場合のみ色付けがされます。

せっかくA列データがあるので、それを利用しています。
尚、1行目は項目行でデータは2行目以降にあるという前提です。

VBAになりますが一例です。

Sub Sample1()
 Dim myDic As Object
 Dim i As Long, j As Long, k As Long
 Dim lastRow As Long, lastCol As Long
 Dim buf As String, myStr As String, myKey As String
 Dim myFlg As Boolean
 Dim myAry, myVal

  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "B").End(xlUp).Row
   lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    Range(Cells(2, "C"), Cells(lastRow, lastCol)).Interior.ColorIndex = xlNone
    For i = 2 To lastRow
     If Cells(i, "A") > 1 Then
      myKey = Cells(i, "B")
       If Not myDic.exists(myKey) Then
        For j = 3 To lastCol
         buf = buf & Cells(i, j) & "_"
        Next j
         myStr = Left(buf, Len(buf) - 1)
          myDic.Add myKey, myStr
          buf = ""
       Else
        myAry = Split(myDic(myKey), "_")
         For j = 3 To lastCol
          For k = 0 To UBound(myAry)
           If IsNumeric(myAry(k)) Then
            myVal = Val(myAry(k))
           Else
            myVal = myAry(k)
           End If
            If Cells(i, j) = myVal Then
             myFlg = True
             Exit For
            End If
          Next k
           If myFlg = False Then
            Cells(i, j).Interior.ColorIndex = 6
           End If
          myFlg = False
         Next j
       End If
     End If
    Next i
     Set myDic = Nothing
End Sub

※ 条件付き書式が設定してあると、そちらが優先され色が付きませんので
条件付き書式はクリアしておいてください。m(_ _)m
    • good
    • 0
この回答へのお礼

VBAバージョンありがとうございます。
VBAは初心者ですので、コードの内容勉強させて頂きます。
貴重なコードありがとうございます。お礼が遅くなり申し訳ありませんでした。

お礼日時:2020/01/29 10:05

ダブりの行は必ず上下並んでいるのですか?

    • good
    • 0
この回答へのお礼

ごもっともなご指摘ありがとうございます。もう少し詳しく書けばよかったです。
お礼が遅くなり申し訳ありませんでした。

お礼日時:2020/01/29 10:05

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