2017-07-03 13 views
1

私は、実行範囲の合計を取得するために、拡大範囲とオートフィルを持つcountif関数を使用していますが、それについてもっと良い方法があるのだろうかと思っていました。Excel VBA:実行中の合計を高速に実行する方法はありますか?

COUNTIF($ A $ 2:A2、A2)+オートフィルダウン

あり千わずか数行があるかどう問題はないようだが、それはそれはかなり遅く10K +行になったとき。

私はいくつかの手がかりをオンラインで検索しましたが、すべての「高速な」方法は、実行カウントではなくTOTALカウントと関係していました。

ありがとうございました!

+0

おそらくピボットテーブル? –

+0

こんにちはNathan、私はピボットテーブル上にいくつかのものを見ましたが、彼らは全体のカウントではなく、実行中の合計のためであった。私は最初のインスタンス、2番目のインスタンスなどの情報が必要です。 ピボットテーブルでこれを行う方法はありますか?追加の詳細を提供できますか? –

答えて

0

効率的な検索アルゴリズム(バイナリ検索)を使用しているため、大量のデータの方が速いDictionaryを使用できます。大規模なデータセットでは、これは顕著な違いをもたらすはずです。

Sub RunningCounts() 
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary") 
    Dim r As Range: Set r = Sheet1.Range("A2", Sheet1.Cells(Sheet1.Rows.count, "A").End(xlUp)) 
    Dim values: values = r.Value2 
    Dim i As Long 
    For i = LBound(values, 1) To UBound(values, 1) 
    dict(values(i, 1)) = dict(values(i, 1)) + 1 
    values(i, 1) = dict(values(i, 1)) 
    Next 
    r.Offset(, 1).value = values ' <-- writes results on next column. change as needed 
End Sub 
+0

@EricJangあなたはこれを試しましたか、それともより良いもので終わりましたか? –

関連する問題