日付順にソートして上から見ていくのが普通の手法ですが
できるだけ早い処理方法で、ということなので、少し捻ってみました。
・データ数 : 6万行
・日付 : 2009/1/1 ~ 2009/12/31 の間でランダム
の場合、私の環境だと0.2秒ほどで結果が出ます。
'=====↓ ココカラ ↓================================================
Sub Sample()
Dim orgAry As Variant
Dim sumAry() As Long
Dim dayCnt As Long
Dim rtnAry() As Long
Dim i As Long
Dim j As Long
'とりあえず1982年から2036年まで対応
ReDim sumAry(30000 To 50000, 0 To 2)
'アクティブシートの、A:B列のデータを読み込む
With ActiveSheet
orgAry = Intersect(.UsedRange, .Range("A:B")).Value
End With
For i = 1 To UBound(orgAry, 1)
If sumAry(orgAry(i, 2), 0) = 0 Then
sumAry(orgAry(i, 2), 0) = 1
dayCnt = dayCnt + 1
End If
Select Case orgAry(i, 1)
Case "OK": sumAry(orgAry(i, 2), 1) = sumAry(orgAry(i, 2), 1) + 1
Case "NG": sumAry(orgAry(i, 2), 2) = sumAry(orgAry(i, 2), 2) + 1
End Select
Next i
ReDim rtnAry(1 To dayCnt, 1 To 3)
j = 1
For i = LBound(sumAry, 1) To UBound(sumAry, 1)
If sumAry(i, 0) = 1 Then
rtnAry(j, 1) = i
rtnAry(j, 2) = sumAry(i, 1)
rtnAry(j, 3) = sumAry(i, 2)
j = j + 1
End If
Next i
'アクティブシートのC1セル以下に結果を書き出す
With ActiveSheet
.Range("C1").Resize(dayCnt, 3).Value = rtnAry
.Range("C1").Resize(dayCnt, 1).NumberFormatLocal = "yyyy/mm/dd"
End With
End Sub
'=====↑ ココマデ ↑================================================
以上ご参考まで。
補足
_Kyle様 お礼が遅くなり申し訳ございません。 教えていただいたマクロで試したところ、とても早くてびっくりです。 本当にありがとうございます。 OK,NG以外(AA,BB,CC)に複数の判定をする場合は、そうしたらよいのでしょうか?いろいろ試してみましたがうまく動きませんでした。