• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じ数字を3個~4個使用している重複行の塗り潰し)

同じ数字を3個~4個使用している重複行の塗り潰し

このQ&Aのポイント
  • 質問者は、エクセルの特定の行において同じ数字を3個~4個使用している重複行を黄色で塗りつぶしたいとしています。
  • エクセルの特定の行には、1から31までの数字が第一数字から第五数字まで順に並んでおり、一行ごとに同じ数字の重複が3個~4個ある場合、その行を黄色で塗りつぶす方法について質問しています。
  • 添付図の結果として、A行とG行、B行とH行、C行とI行、D行とJ行、M行とQ行、N行とS行、O行とT行の行が黄色で塗りつぶされることになると述べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

このプログラムでできますが、どの行が重複するか判りません。 (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

sazanami0422
質問者

お礼

回答いただきありがとうございます。 同じ黄色だけだとどれと重複してるかわかりにくくなるため色分け と一致行を出すという案は思いつきませんでした。 カラフル行で区別しやすくなりました。 ありがとうございました。

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

マクロを作ってみました。ループのお化けです。工夫できそう? 結果は添付図と同じになりました。当方、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

sazanami0422
質問者

お礼

早速のご回答いただきありがとうございます。 やってみて、やりたい結果になりました。 ソースにコメントもついて頂き、改造もしやすいです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう