2017-05-10 6 views
0

列の値に応じて異なる行のセットで独立したループを実行する必要があります。 1列目からn列目まで、そしてn + 1列目から18列目までの「火曜日」に繰り返される列値「月曜日」のループ。これらのループは連続して連続して実行する必要があります。例:Excelの連続した行のセットで別々のループを実行する方法

Example as below

+1

実行したコードのような追加情報を入力してください。間違いで失敗したのか、それとも期待が満たされなかったのか? –

+0

選択されたケースは、 '大文字小文字の区別(範囲(" ")、3)を選択するのに役立つかもしれません。 –

+0

なぜこれに連続ループを使用する必要がありますか?また、認識されていないExcel形式で日付を保持することによって、自分自身に恩恵を与えているわけではありません。 – Tom

答えて

0

あなたが特定の日のために重複した時間を持っているかどうかを確認するために辞書を使用することができます。合計で、3つのネストされたループがあります。ワークシートのすべての行を最初に反復し、次に、指定した日のすべての行を反復処理し、最後の列を反復処理します。

各セルの最初の文字列(「Res01」、「Res02」など)には興味がないようですが、特定の日に同じ時刻があるかどうかを知りたい場合と、その複製の細胞。

また、指定した日に重複が必要なだけなので、その日に処理が開始されると辞書はクリアされます。辞書のキーは時間文字列であり、値はセルのアドレスです。各セルについて、マクロはその時間がすでに辞書に入っているかどうかをチェックします。それが複製であれば、元のセルと現在のセルの背景色の両方が変更されます。そうでない場合は、キーと値のペアが保存され、処理が続行されます。

重複を示す背景色(緑色/青色)を連続した日に変更して、違いをより簡単に表示することにしました。

Option Explicit 

Sub HighliteDiffs() 
    Dim sht As Worksheet 
    Set sht = Worksheets("Staff Schedule") 

    Dim r As Integer, c As Integer, clr As Integer: clr = 4 
    Dim curDay As String, val As String, addr As String 

    Dim dict As Object 
    Set dict = CreateObject("Scripting.Dictionary") 

    Dim rng As Range 

    With sht 
    Dim lastRow As Integer, lastCol As Integer 
    lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

    r = 2 
    Do While r <= lastRow 
     If clr = 4 Then 
     clr = 5 
     Else 
     clr = 4 
     End If 
     dict.RemoveAll 
     curDay = Left(Cells(r, "A").Value, 11) 
     Do While curDay = Left(Cells(r, "A").Value, 11) 
     lastCol = .Cells(r, .Columns.Count).End(xlToLeft).Column 
     For c = 3 To lastCol 
      val = Right(.Cells(r, c).Value, 5) 
      If dict.Exists(val) Then 
      addr = dict(val) 
      Set rng = .Cells(Range(addr).Row, Range(addr).Column) 
      rng.Interior.ColorIndex = clr 
      .Cells(r, c).Interior.ColorIndex = clr 
      Else 
      dict(val) = .Cells(r, c).Address 
      End If 
     Next 
     r = r + 1 
     Loop 
    Loop 
    End With 

End Sub 
+0

これは素晴らしいコードです!唯一の問題は、以前に投稿したように私のExcelが正確に見えないことです。最初のセルの日付は常にE4でA1ではなく、時刻G4ではC1ではありません。コードでは、列をAからEに変更し、3ではなく7から列ループを開始しました。プロセスでいくつかの重複が見付かりません。 – Sam

+0

あなたが投稿した内容に基づいて、私が使用したデータセット用に動作します。時間だけがキーとして保存されます。つまり、 "08:45"が辞書にある場合、この時間の他のエントリは重複して表示されます。後ろにスペースがある場合や、タイムストリングが互いに異なる場合があります。重複が見逃されている理由を調べるには、デバッグする必要があります。コードにステップインしてF8キーを押すと、各行を1行ずつ実行して何が起こっているのかを見ることができます。 – Amorpheuses

+0

現在作業中です。次に、C列のテキストに応じていくつかの行をスキップする必要があります。うまくいけば、コードを挿入できるはずです。ありがとうございました – Sam

関連する問題