| 
    
     |  | ▼doka さん: Dictionary(辞書)オブジェクトを使うと、こんな風に処理が
 できます。
 
 Sub Try1()
 Dim r As Range
 Dim dic As Object
 Dim ss As String '1行データパターン
 Dim n As Long
 
 Set dic = CreateObject("Scripting.Dictionary")
 With Range("B1:Z51")
 .Interior.ColorIndex = xlNone
 For Each r In .Rows
 n = n + 1 '処理行
 '一行をTab区切り文字列に変換
 ss = Join(Application.Index(r.Value, 0#), vbTab)
 If dic.Exists(ss) Then
 If dic(ss) > 0 Then
 .Rows(dic(ss)).Interior.ColorIndex = 6
 dic(ss) = -dic(ss) '先頭行に色塗り,完了
 End If
 Else
 dic(ss) = n '初出パターン
 End If
 Next
 End With
 
 Set dic = Nothing
 
 End Sub
 
 >    For Each r In .Rows
 から処理開始です。これは [B1:Z51]の範囲を Row単位で処理を
 くり返す、という命令です。
 
 >      '一行をTab区切り文字列に変換
 >      ss = Join(Application.Index(r.Value, 0#), vbTab)
 ここはコメントにある通り、範囲のうち1行を1つの文字列に連結して
 いるところです。
 範囲1行目が 7 8 6  6 ....  9
 としますと、上の処理により
 ss = "7・8・6・・6・....・・9"  (・はTabコード)
 というある文字列となります。
 2行目データですと
 ss = "2・5・・・・....・6・7"  (・はTabコード)
 です。
 この1行パターンss を辞書に登録していけば(登録するとき、初出行番号
 と組で登録します)、
 たとえば 51行目のパターン
 ss = "2・5・・・・....・6・7"  (・はTabコード)
 が、すでに辞書の中にあるか? は
 ↓のようにして調べることが可能ですから、
 >      If dic.Exists(ss) Then 'ss が存在すればTrueが返る
 51行目のパターンのとき True が返りますので、
 すぐ次の行でこのパターンの初出行番号を調べ、
 その行を黄色に塗りつぶし、
 塗りつぶしが終わったしるしに 格納した行番号をマイナスにしておきます。
 >        If dic(ss) > 0 Then
 >          .Rows(dic(ss)).Interior.ColorIndex = 6
 >          dic(ss) = -dic(ss) '先頭行に色塗り,完了
 
 |  |