即興作成を行なったExcelマクロのお話

いろいろな無茶振りが行われるのが会社という組織というといろいろと語弊があるかもしれませんが、定時30分前の時間に上司から発せられた、「2つのデータ比較を今日中に」のお言葉…。金額精査なんかしてたらえらい時間かかりそうだなぁ…という作業を、マクロでやってどうにか定時+アルファな時間で終わらせた時短話を少しだけします。

まずは、肝要なデータについて、ざっくりと紹介すると、とある売り上げに関するデータが対象でした。…はい。
このデータについては、当初出力されたものに足りないデータがあることが発覚したため、再度足りないデータも含めて再出力されました。
うん、元々のデータに続いて追加される形ならば特別仕事はなかったんですが、「再出力」という形のため、元データの間にバシバシと追加されてしまったわけですね…はい。一応、キーとなる列が用意されていたので、前後のデータで重複しているかを確認すれば、上司が求めているデータ群を作ることが出来ることがわかりました。

どうすれば簡単に比較できるか?

関数で言えば、「IF関数」を利用すれば実装できそうでした…が、この手のデータは、「まずマクロ」という頭があったため、大好きな「For 〜 Next」と「IF分岐」だけを使ってやれば簡単にできる!…という、いつも通りの対応を始めたわけですね。ザックリと段階的に解説しましょう!

データはCSVが2つ!…適当にシートに貼り付ける

「ちゃんとした」マクロを作るのであれば、CSVデータを取り込む仕組みのところから作るところですが、今回の目的は、「データを作る」ということだけだったので、取り込みを行う仕組みについては、まるっと無視することにして、CSVデータを単純に開いて、任意のシートにそれぞれコピペすることで、比較対象データを作成することとしました。
ちゃんとにやるなら、取り込み方法からしっかりと考えましょうね。…データを作るだけなら、そんなしち面倒臭い事はしなくてもいいです。楽しましょ。(定時もありますし)

マクロの構文上はシートすら直接指定!

個人的に、シートを跨ぐマクロを作るときは、シートをなるべく変数に取り込むようにしています。理由は諸々ありますが、結局のところ、シートも変数に取り込むほうが操作も指定も簡単になります。
VBE(マクロ用のエディタ)では、Ctrlキーとスペースバーで文字の補完入力機能がありますが、この機能は宣言を行なった変数も対象となるため、シートを見分ける「先頭文字列」を決めておけば、簡単に呼び出すことができる上に、文字の入力ミスも確実に減らすことができます。シートを跨ぐマクロを作るときは必須のテクニックだと思いっていますので、そういう操作で迷うことがある人は是非。(例えば、「Sheet_」としておけば、定数などと被ることがないので、アンダーバーまで入力すれば、補間で続きを入力できる)
で、今回は、時間の都合もあって、この操作をカット!…もうちょっと時間的余裕とかあれば、確実に変数化していたんですけどね…今回はちょっと慌てていましたw

いつもの構文が長いけど活用!

目で追えば最終行くらいはすぐにわかる2つのデータですが、ひとまずいつもの構文で最終行を取得しました。
(「Sheets(X).Cells(Rows.Count,1).End(xlUp).Row」ってやつです)
シートは2枚存在していたので、最終行取得は2種類存在する感じでしたね。
コレで、Forで繰り返す回数も確定したので、比較する列を指定すれば7割方完成という感じですね。

念のため確認だけする構文を挿入

短時間で作るマクロほど、「有り得ないミス」があるので、比較を行った場合、いきなりシートやセルの内容を書き換えるようなことは行いません。(絶対ひどい目にあいますからね)
Debug.Printを利用して、狙った通りに動作したら、イミディエイトウィンドウに「結果」(セルの内容とか)を表示されるようにして、動作を確認…まぁ、狙った通りに動いたわけですが。

「最初のデータ」に追加されたデータを洗い出し

狙った動作をしたので、「後から来たデータ」へ「最初のデータ」に存在していたデータセルの背景色を変更する形をとりました。
あとで、色フィルターなんかで抜きなしが行えますからね。この辺はExcelの標準機能を活用することとしました。…書き出すマクロを作ることもできますが、仕様を作るよりも、フィルターで抜き出す方が、今回の場合は簡単だと判断しました。…マクロでこの辺まで作ってあれば、何かあった場合でも、簡単な修正だけで対応できることが多々あります。…まぁ、いろいろと端折ったので、もっと丁寧に作れば、応用も効くマクロができることでしょう。

終わったのは定時から少し過ぎた時間・・・

まぁ、マクロを考えて作っているわけですから、やっぱりなんだかんだで時間がかかるものです。
ただ、今回の作業を「目視」で「手作業」で行っていたら…と考えると、結構早く終わらせることができたと信じています。
…というより、この手の作業を手作業で行う方が結構いるんですけど、指針となるデータがある場合は、イニシャルに時間がかかることが多いマクロですが、完成してしまえば、ボタン一つで一瞬で作業完了となります。…この手の作業は手戻りがあることが多いので、そうなった場合、「同じ時間」がかかることになります(多少早くなるかもしれませんが…)。
時短・楽をするための技術として、Excelマクロ…超絶おすすめですよ?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA