- ベストアンサー
同じ数字を3個~4個使用している重複行の塗り潰し
- 質問者は、エクセルの特定の行において同じ数字を3個~4個使用している重複行を黄色で塗りつぶしたいとしています。
- エクセルの特定の行には、1から31までの数字が第一数字から第五数字まで順に並んでおり、一行ごとに同じ数字の重複が3個~4個ある場合、その行を黄色で塗りつぶす方法について質問しています。
- 添付図の結果として、A行とG行、B行とH行、C行とI行、D行とJ行、M行とQ行、N行とS行、O行とT行の行が黄色で塗りつぶされることになると述べています。
- みんなの回答 (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
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
マクロを作ってみました。ループのお化けです。工夫できそう? 結果は添付図と同じになりました。当方、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
お礼
早速のご回答いただきありがとうございます。 やってみて、やりたい結果になりました。 ソースにコメントもついて頂き、改造もしやすいです。 ありがとうございました。
お礼
回答いただきありがとうございます。 同じ黄色だけだとどれと重複してるかわかりにくくなるため色分け と一致行を出すという案は思いつきませんでした。 カラフル行で区別しやすくなりました。 ありがとうございました。