このプログラムでできますが、どの行が重複するか判りません。
(1)をコメントにして(2)のコメントを外してみて下さい。面白いですよ。
(3)のコメントを外すと、G列に一致する列が出力されます。
'
Option Explicit
'
Sub Macro1()
'
Dim Row1 As Long
Dim Row2 As Long
Dim Count As Integer
Dim Same1(2 To 6) As Boolean
Dim Same2(2 To 6) As Boolean
Dim Col As Integer
Dim What As Integer
Dim Find As Range
'
Cells.Interior.Pattern = xlNone
'
For Row1 = 2 To [B1].End(xlDown).Row
'
For Row2 = Row1 + 1 To [B1].End(xlDown).Row
Count = 0
Erase Same1
Erase Same2
'
For Col = 2 To 6
What = Cells(Row1, Col)
Set Find = Range("B" & Row2, "F" & Row2). _
Find(What, LookIn:=xlValues, LookAt:=xlWhole)
'
If Not Find Is Nothing Then
Count = Count + 1
Same1(Col) = True
Same2(Find.Column) = True
End If
Next Col
'
If Count = 3 Or Count = 4 Then
'
For Col = 2 To 6
'
If Same1(Col) Then
Cells(Row1, Col).Interior.Color = vbYellow '(1)
' Cells(Row1, Col).Interior.ColorIndex = Row1 + 1'(2)
End If
'
If Same2(Col) Then
Cells(Row2, Col).Interior.Color = vbYellow '(1)
' Cells(Row2, Col).Interior.ColorIndex = Row1 + 1’(2)
End If
Next Col
' Cells(Row1, "G") = Row2 '(3)
' Cells(Row2, "G") = Row1 '(3)
End If
Next Row2
Next Row1
End Sub
マクロを作ってみました。ループのお化けです。工夫できそう?
結果は添付図と同じになりました。当方、win10、Excel2010です。
Sub paintCell()
Dim num(20, 31) As Integer '// 数値
Dim r As Integer, r2 As Integer '// 行カウンタ
Dim c As Integer, c2 As Integer, c3 As Integer '// 列カウンタ
Dim n As Integer '// 数字
Dim Flg As Integer '// 一致フラグ(カウンタ)
With Range("A1")
'// 値を取り込む
For r = 1 To 20
For c = 1 To 5
n = .Offset(r, c)
num(r, n) = 1
Next
Next
For r = 1 To 19
'// 一致のカウント
For r2 = r + 1 To 20
Flg = 0
For c = 1 To 31
If num(r, c) = 1 And num(r2, c) = 1 Then
Flg = Flg + 1
End If
Next
'// セルを塗る
If Flg = 3 Or Flg = 4 Then
For c2 = 1 To 5
For c3 = 1 To 5
If .Offset(r, c2) = .Offset(r2, c3) Then
.Offset(r, c2).Interior.ColorIndex = 6
.Offset(r2, c3).Interior.ColorIndex = 6
End If
Next
Next
End If
Next
Next
End With
End Sub
お礼
回答いただきありがとうございます。 同じ黄色だけだとどれと重複してるかわかりにくくなるため色分け と一致行を出すという案は思いつきませんでした。 カラフル行で区別しやすくなりました。 ありがとうございました。