これをできる限り単純かつ非特定に保つようにします。a、b、cの3つの列があります。列 C には、セル C1 ~ C100 に 100 個の乱数があります。列 A には、セル C1:C5 に 5 つの乱数があります。
セル B1:B5 ごとに、列 a の数値が列 c に何回表示されるかを入力します。数式をセル B1 に直接書き込む場合は、次のようになります。
=COUNTIF($C:$C, $A1)
次に、下にドラッグしてセル B2:B5 を埋めます。
VBA の Application.WorksheetFunction.CountIf 関数を使用してこれを実行したいと考えています (実際のプロジェクトはこれよりもはるかに複雑で、セルに自動的に入力する必要があります)。
Dim colb As Range
Set colb = Range("$B1:$B5")
Dim colc As Range
Set colc = Range("$C:$C")
Dim cola As Range
Set cola = Range("$A:$A")
For Each bcell In colb
bcell.Formula = Application.WorksheetFunction.CountIf(colc, bcell.Offset(0, -1))
Next bcell
これは正しく動作します。しかし、For-Each ループを使用せずに、B のセルの数を指定せずに実行できるかどうか疑問に思っています (A が最後の値に達したことを認識し、それに応じて B の入力を停止します。
Dim colb As Range
Set colb = Range("$B:$B")
私の考えでは、重要な行は次のようになります。
colb.Formula = Application.WorksheetFunction.CountIf(colc, cola)
しかし、これはうまくいきません。私が求めていることは可能ですか?Excel に範囲全体を一度に入力させると、ループするよりも高速になると思います。