今の会社に転職してきてから、もっぱらVBAコードを書いて業務効率化を図る毎日を送っているわけですが、もともとはVBAは全くわからないど素人でした。

4年ほど前に勤めていた会社で、業務効率化を行っている際、関数だけじゃやってらんねぇと手を出したVBA。
最初は右も左もわからないままああでもないこうでもないと試行錯誤を繰り返す毎日だったのですが、実務でぶつかった問題に取り組むうちにある程度のコードは書けるように。

当時、他部署の上司にVBAのエキスパート(勝手に師匠と崇めている人)がいらっしゃったのですが、その方にもほめてもらえるくらいにはなりました。

そんなこんなで現在に戻ってきて、自部署内の業務効率化のために、同期入社の同僚にVBAを教えようとなったわけです。
ちょうど毎日やる実務で、各項目に対する個数を数えるというのがあるからそれをVBAで書いてみようとなったわけです。

結局のところ、WorkSheetFunctionからCountIfを使うという、わざわざVBAを使うほどのこともないやんけというコードになってしまったわけなんですが、ぱっと思いつくだけでも3つくらいやりかたがあるなぁと。

①WorkSheetFunctionのCountIfを使う方法

結局これを教えたのは、For構文のループを1個だけ使えば書けるからという点。
VBA初心者にForループの入れ子をいきなりやれって言っても「はて?」ってなりそうだったので。
途中で方針転換したけど、結果的にはうまく実行できたのでよきよき。

②Forループの入れ子で3変数を動かす方法

最初に思いついた方法はこれ。
でも、自分でコード書く時にはこれは使わない。
けどVBAを実務でやっていたら必ずForの入れ子には遭遇するからそのうち教えたい方法。

検索元の最初から最後までのループの中に、検索先のループを入れ子にして、該当するものが見つかったら1を足していく方法。
教えるときはコード上で足して、あとでセルに書き出そうとしたから3変数いるなと思ったけど、セルに足していく方式をとれば別に2変数でもいけたのか。

③Dictionaryを使う方法

普段、自分で使うコードに使うならこれ。
最初は全く理解できなかった連想配列もYouTubeにめちゃくちゃわかりやすい動画があって、それを見てからはほぼこれを使っています。
Keyに項目、Itemに個数を格納する形で使うかなぁ。

ここまで書いた方法の中では一番処理が速いのと、検索元のリストがなくても個数を数えられるというのがポイント。
ただしいきなり連想配列でやれと言われても泡吹き出すと思うからこれはだいぶ先。

そんな覚え書きでした。

マイクロソフトエクセル2019 アイコン by Icons8