CountIf の結果だけ表示
CountIf を使って、データが何個あるか、ID は重複していないか
チェックすることをよくします。
行数が少なければシートに関数を記述するだけで完了するのですが、
1000行以上あるシートで CountIf を使用すると、
非常に動きが遅くなったりします。
CountIf 関数は、シートが更新されるたびに再計算します。
文字を入力したり、削除するたびにシートが更新されます。
そして、CountIf も再計算されます。
データ量が多いと、その計算に少々時間がかかり、
場合によってはフリーズしてしまいます。
そこで、マクロから実行して、結果だけ表示させるようにしてみました。
列J に CountIf の計算結果だけ入力します。
マクロ
Sub かうんといふ()
Dim r As Long '行番号を格納
Dim c As Long '列番号を格納
Dim LastR As Long '最終行を格納
r = Selection.Row '行番号を取得
c = Selection.Column '列番号を取得
LastR = Cells(Rows.Count, c-2).End(xlUp).Row '最終行を取得
'※c-2 は結果記入列(J)から左に2つずれた列(H)を指定しています
'5など直接数字を記述してもOK
With WorksheetFunction
For r = r To LastR
Cells(r, c) = .CountIf(Range(Cells(r, c - 2), Cells(LastR, c - 2)), Cells(r, c - 2))
Next r
End With
End Sub
これで、結果だけ表示されるので、Excel に負担がかからなくなります。
先にも書きましたが、データ量が少ないシートであれば、
シートに直接関数を記述して、そのまま別の作業をしていても、問題ないと思います。
数百行、数千行のシートの場合には効果があります。
さて、ここまで出来たら、こんな風に画面を並べて、
F8 を押してステップ実行したり、F5 か、みどり三角のマクロ実行ボタンを押して、
マクロを実行させます。
結果を入力する先頭のセルを選択しておくことを忘れずに。
リボンに登録してもOKです。
**********************************************************
個人用マクロブックについてはこちら
リボンに登録についてはこちら
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/