Sub test5()
t = Timer
Dim A
'辞書を作成
Set A = CreateObject("Scripting.Dictionary")
Dim B, C, D, E, TeikiID
B = Range("O2:O121546") 'カウント元の値を取得
D = Range("C2:C121547") 'カウント元の値を取得(日付) ※日付は重複を確認するために次行も選択してい
E = Range("J2:J121547") 'カウント元の値を取得(処理CD)
TeikiID = Range("A1:A121547") 'カウント元の値を取得(処理CD)
'途中からカウントしたい場合はこのあたりいじってください 96267部分が行数です
'B = Range("O96267:O121546") 'カウント元の値を取得
'D = Range("C96267:C121547") 'カウント元の値を取得(日付) ※日付は重複を確認するために次行も選択してい
'E = Range("J96267:J121547") 'カウント元の値を取得(処理CD)
'TeikiID = Range("A96266:A121547") 'カウント元の値を取得(処理CD)
Dim Totyuint As Variant
'途中からカウントしたい場合はこのあたりいじってください
Totyuint = 0
'N列に中止、復活の重複を探すための値を入力
'カウント元をループ
For i = 1 To UBound(B, 1)
Cells(i + Totyuint + 1, 15).Value = Str(Cells(i + Totyuint + 1, 2).Value) & ":" & Str(Cells(i + Totyuint + 1, 10).Value) & ":" & Str(Cells(i + Totyuint + 1, 12).Value)
Next
C = Range("O2:O121547") 'カウント先の値を取得
'カウント元をループ
For i = 1 To UBound(C, 1)
If A.Exists(C(i, 1)) = False Then
A.Add C(i, 1), 0 'カウント元を辞書に登録
A.Add C(i, 1) + "day", D(i, 1) 'カウント元を辞書に登録
Else
'存在した場合、日付が新しい方を有効にする
If D(i, 1) > A(C(i, 1) + "day") Then
A(C(i, 1) + "day") = D(i, 1)
End If
End If
Next
'カウント先をループ
For i = 1 To UBound(C, 1)
'辞書に登録されている場合
'Debug.Print C(i, 1)
If A.Exists(C(i, 1)) Then
A(C(i, 1)) = A(C(i, 1)) + 1 'カウントアップ
End If
'Debug.Print i
'Debug.Print A(C(i, 1) + "day")
'Debug.Print A(C(i, 1))
Next
'ここまでやってそれぞれの値の件数がわかった
'件数がわかった辞書の結果をセルに入力させる
For i = 1 To UBound(C, 1)
'値が存在する場合にカウント数を入力する
If A.Exists(C(i, 1)) Then
'Debug.Print A.Item(C(i, 1))
Cells(i + Totyuint + 1, 16).Value = A.Item(C(i, 1))
'Debug.Print D(i, 1)
'Debug.Print A.Item(C(i, 1) + "day")
'新しい日付と一致する場合は、列に1を入力する,ただleftjoinで抽出してる都合上、次行に日付重複がありえるのでこちらもチェック対象にする
'最新日と一致していてかつ次のカラムと同一の処理内容CDが一緒でない場合は書き込み対象
If A.Item(C(i, 1) + "day") = D(i, 1) Then
'重複code一致している該当重複codeの最終行を探す
Dim saisyugyou As Variant
saisyugyou = Saisyu(C(i, 1), t)
'Debug.Print saisyugyou
'Debug.Print i
'If saisyugyou = 200 Then
' Debug.Print "チェック"
'End If
If saisyugyou = i + Totyuint + 1 Then
//比較
If E(i, 1) = 1 Then
Cells(i + Totyuint + 1, 18).Value = 1
Else
Cells(i + Totyuint + 1, 17).Value = 1
End If
End If
End If
'Debug.Print C(i, 1)
End If
Next
Debug.Print Timer - t & " 秒"
End Sub
Function Saisyu(FindStr, Timer)
Dim i As Long
If Len(FindStr) = 0 Then Exit Function
'FindStr = "*" & FindStr & "*" '部分一致検索
FindStr = FindStr '完全一致
For i = Cells(Rows.Count, 15).End(xlUp).Row To 1 Step -1
'Debug.Print i
With Cells(i, 15)
If .Value Like FindStr Then
'.Activate
'Debug.Print i
If (i Mod 10) = 0 Then
Debug.Print "現在" & i
DoEvents
End If
Saisyu = i
Exit For
End If
End With
Next i
End Function