私は大きなテーブルをピボットテーブルに入れましたが、ユニークなカウントを取得したいので、1の側にヘルパーカラムを設定しようとしています/ユニークカウント、ピボット、それは私が持っている式はバック1に要約して:(B2:B460489、B2、I2:I460489、I2)VBA Counties over 500k Rows
1/COUNTIFS
これは動作するはずですが、以来私は計算するために年齢を取っているほぼ500kの行を持っています。私はVBAで計算をやろうとしていましたが、速くなることを期待していましたが、終了する前に10分以上かかりました。
この計算を管理しやすくするにはどうすればよいですか?
配列を使用するという考えに基づいて、テーブル内の各行について、ストア/製品がテーブル全体で何回発生したかを知る必要があるため、以下のコードをダブルループを使用して作成しました。まだまだ遅いですが、それをより効率的にすることは可能でしょうか?
arr = Sheets("Data").Range("A2:AH" & lr)
ReDim Arr2(UBound(arr) - 1, 0)
For i = LBound(arr) To UBound(arr)
Ans = 0
For j = LBound(arr) To UBound(arr)
If arr(j, 2) = arr(i, 2) And arr(j, 9) = arr(i, 9) Then 'And arr(j, 33) = 1 Then
Ans = Ans + 1
End If
Next j
If Ans > 0 Then
arr(i, 34) = 1/Ans
Arr2(i - 1, 0) = arr(i, 34)
End If
Next i
Sheets("Data").Range("AH2:AH" & lr) = Arr2
*何*のユニークな数ですか?あなたがVBAの解決に向かう場合は、ヘルパー列を捨てて問題をより直接的に記述してください。 –
私は1週間に店頭に在庫があるシートを持っています。 B列は店舗、I列は商品です。ピボットテーブルの残りの計算で、その数式の合計が1に戻るように、ヘルパー列が必要です。 数式が1/Countifs(店舗、特定の店舗、製品、特定の製品)であることによって 製品が私のテーブルの13週間のデータすべての店舗にある場合、数式は1/13になり、ピボットではすべて1に戻って合計する必要があります。 –
VBAで行います。計算するすべての行を配列に貼り付け、配列を計算して答えを投稿します。シートから読み込むのではなく、メモリで処理することで、プロセスが大幅に高速化されます。 – Tom