Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【Excel/VBAのこと26】VBA から CountIf を実行する

   f:id:tuna-kichi:20200223230814p:plain

 

 

CountIf の結果だけ表示

CountIf を使って、データが何個あるか、ID は重複していないか

チェックすることをよくします。

 

行数が少なければシートに関数を記述するだけで完了するのですが、

1000行以上あるシートで CountIf を使用すると、

非常に動きが遅くなったりします。

 

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です。

 

**********************************************************

 

個人用マクロブックについてはこちら

www.tuna-kichi.com

 

リボンに登録についてはこちら

www.tuna-kichi.com

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/