オートフィルタへの憎しみ
オートフィルタって便利ですよね!
条件選んでポチっとすると、合致するやつだけ残ってくれる。
A支店さんの~、B商品の売り上げはいくらかな?
なるほど~!この人がこのくらい、この人がこのくらい売ったんだね!
じゃあこの表をコピーしてA支店さんに送ってあげよう!
コピーして~、シート作って~、ペースト!出来上がり!
それをVBAで実行しようとしたとき、彼は牙を剥くのです。
こんにちは~!「マクロの書ける事務員さん」です。
年末年始休暇取れてますか?取れてる人も取れてない人も雪や寒さに気をつけてくださいね。
私は休みを利用して実家に戻り、薄いインターネットと厚い衣食住のサービスを浴びています。
インターネットさえ濃ければ最強でした。
なんと我が愛しの実家のwifiの速度は2桁Mbpsかつ時々途切れます。助けて~!
相変わらずこの文章は
「事務員さん」達といや~わかるわ~と同調したり、
IT課の方向にごめんなさいの気持ちをお届けしたりしつつ、
なんとなくその辺りの方に笑っていただければいいなあと言うくらいのポエムです。
1はここ → 「マクロの書ける事務員さん」がC#に至る経緯 1
前はここ → 「マクロの書ける事務員さん」がC#に至る経緯 2
次はここ → まだ
事務員さんの現在地が知りたい方はここ→note
セルやWS上の直接操作への憎悪
配列操作でクソデカ成功体験を得てしまった事務員さんは考えます。
つまり直接Excelに触る行為がとにかくよくないのでは!?
ということはとにかくExcelを直接触らないように、最低限度必要なデータの取得や書き込み操作を除いては配列や連想配列を駆使して、メモリ上で全てを完結させればよいはずなのではと。
ところでオートフィルタって厄介じゃないですか?
あんなに便利だったのにVBAになると途端に厄介ですよね。
表示されてる行だけをコピーしたいってだけなのにそれも上手くいかなかったりするし。
まずプロパティやメソッドがやけに多くてとっ散らかっていて、 えーん!これしたいときどれ使うんだっけ!? と泣きながら探す羽目になったりします。
ここで事務員さん仲間のために簡単なカンニング方法を伝授しましょう。
やりたいことをそのままそっくり「マクロの記録」で記録すればいいんです。
出てきたプロシージャをカンニングして書きましょう。
え?そのままコピペして使う?
うーん、私はイヤだけどそれするのも事務員さんはエンジニアではないので自由ですからね……。
オートフィルタを捨てたい
ふと事務員さんは思いました。
結果的にVlookupは直接使うことが諸悪の根源だった。
つまり次に高速化を目指すならばオートフィルタだとは思う。こいつが絡むと途端に処理速度が落ちるから。
まあ元来フィルタを閉じたり開いたりする度に普通に手作業でやっても読み込みが発生して重いですからね。
でも別にオートフィルタでやってるのはデータの条件による検索と抽出処理。
その結果を別のところに貼ったり、そのときの合計値だったりが欲しいだけ。
どういうことかってこれは 「フィルタされている状態」が欲しい訳じゃない。その結果が欲しいだけ。
あれれ?これVlookupで代替しようとすれば全然できなくもないことじゃないか?
それならば連想配列にそれが出来ない道理はない。
じゃあオートフィルタを使わず、こいつがやってることをメモリ上で再現すればいいのでは?
……まあ、出来るんですよね!
オートフィルタのやってることを自分でやる
一度フィルタ条件をScripting.Dictionaryに入れて、Existsで判定すればフィルタ条件に合致するかが分かりますよね。
フィルタしたい列数分、それを用意しましょう。
そうしたら配列に対象範囲を取得して、Ifで愚直に条件を判定していく……
まあ信じられないくらい泥臭く長いコードでしたが、処理は確実に爆速になりました。
インデントはハチャメチャに深くなり、Gotoなんかが複雑に絡み合うとんでもないコードでしたが動いてしまえば爆速でした。
なんてことでしょう!楽だし速くなった!
めちゃめちゃ快感ですね。
ただその快感こそがグチャグチャの泥臭いコードをどうにかしなくてはならないなんて気持ちを思い起こさせる隙を与えません。
それが……所謂IT課やDX課の皆様方を苦しめる「事務員の闇マクロ」を産むんでしょうね……
いや、すまんとは思っているんですよ。すまんとは。
でも楽で速いんですよ。快感!やったー!
ここまで来た事務さんはもうコーヒーなんて思い出すこともありません。ボタンを押したら結果がすぐ返ってくるんですから。
インターネット回線が時代を越えてどんどん早くなり、人間はあのちょっとずつ上から読み込まれていくホームページ上のjpgの姿と、それを固唾を飲んで見守り、ブラウザが途中で諦めて忌まわしき破けたアイコンが出てくることなんてないよう応援する時間を思い出すことはなくなっていくでしょう。
それと同じです。
事務員さんあるある~!
「それはIT課に頼んでくださいって言うと『じゃあいいわ』って言われる」
いや本当にそれはウチでどうにか出来る問題じゃないんですって!
だって権限とか要る本当にエンジニアのお仕事だから!!
それにそれ今の内に直しとかないと爆発しますよ!
え~!?まだ動いてるからいい!?
本当に壊れるんですって!!ねえ~!!!
次回予告
うーん、だいぶ速くて色々出来るマクロが作れるようになってきたし!
このまま俺プログラマーも目指せるんじゃないの~!?
次回 「なんで急に動物の鳴き声の話してんの?」
おたのしみに~!