Excelマクロ、VBAから学ぶ大事なこと

自己紹介はこちらをお読みください。

Excel入門や、マクロ、VBA入門的な記事や、書籍は山ほどあります。

なので、今更感が強いため基本的には別視点の事と書きたいと思います。

今回は自分が最近体験した実例をもとに書きます。

1.大事なことはそこじゃない

正直、ExcelVBAはFor文とIf文が書けるだけでもかなり、出来る事が増えます。

Excelだけでは関数を組み合わせて、複雑な関数が必要になる場面なども、

数行のFor文とIf文で簡単に同じ事が出来る場合が多々あります。

でも大事なことはVBAが書ける事じゃないんです。

VBAを覚えると、複雑な関数よりコードを書く方が楽に感じ始めます。

すると自然とデータのインプットとアウトプットを考えるようになるのです。

データのインプットとアウトプット??と思いますので、実例でご説明します。

2.複雑な関数と綺麗に装飾されたデータ

先日、他部署からExcelで在庫管理しているけど、毎月フォーマットの

更新だけで非常に時間がかかって辛いので簡略化出来ないかと相談を受けました。

そのデータを見てみると、10個くらいシートがあり、それぞれが綺麗に装飾され、シート間を跨いで複雑な関数があらゆるところに埋め込まれていました。

毎月新しい月分の列を追加したり、数式を修正したりする場所が多すぎて

ミスが増え、時間もかかるそうです。

しかも、数式が複雑すぎて列を挿入する順番を守らないと数式が壊れるとかなんとか・・・(パニック)

僕の感想は「でしょうね・・・(苦笑)」でした。

とりあえず、仕事は請け負いました。

3.まず最初にしたこと

VBAでゴリゴリコードを書き始めました。

なわけありません・・・。

「これ全部壊して作り変えていいですか?」

と依頼した人に了承を求めました。

なぜ壊す必要があったのか、よっぽどマニアックな内容じゃない限り

VBAで出来ないことはないと思っていますが、苦手なことだってあります。

苦手というより、コードを書く人間がつらい事といった方がいいですかね。

決められた複雑な作りかつ、動的に変化していくフォーマットに合わせてコードを書くのは、コード自体が非常に複雑になります。

なので、一度壊す必要がありました。

4.インプットとアウトプットを考える

改めて、依頼してきた人に目標と要件定義を再確認して作業に移ります。

まず、データのインプットを考えます。

基本的にはインプットは装飾という概念を捨て、いかに簡略化したデータとして保持するかに尽きます。

列が増えず、必要な項目をひたすら時系列に縦に増やしていくのみのデータが理想です。

参照元となるデータが単純であればあるほど、それを基にアウトプットやレポートへの汎用性が高まるのです。

関数にしろVBAにしろ、簡単にもなります。

極論VBAすら不要でピボットを使用したら目的の値が見て取れたりします。

こんな感じの思考で、今後は在庫管理に必要な項目を1シートにまとめて縦に増やすだけで良い環境を整えました。(複雑なフォーマット更新不要!!)

インプットを整えたら、次にアウトプットを作成します。

極力依頼者(エンドユーザー)が使い慣れた、使いやすいと感じるフォーマットに近い形で作ります。

それでも出来るだけ複雑にせず、装飾して見た目を綺麗に整える程度です。

案外その位のほうが、人は直感でデータを把握できて理解しやすかったりします。

アウトプットに合わせて関数であったり、VBAであったり転記するプロセスを作ります。

慣れてくるとコードを書きやすく、見た目の良いアウトプットを同時に考えることが出来るようになります(これが理想)。

5.まとめ

大事なことはVBAが書けたり、複雑な関数を使えるようになることじゃないんです。

元となるデータのインプットを意識してデータを保持・管理する環境を作れるか。

参照元のデータの汎用性が高ければ高いほど、アウトプット出来るデータや、レポートも増えます。

VBAを書けるようになり、その楽さを覚えると、VBAを書きやすいデータを求めるようになります。

自然とインプットとアウトプットを切り分けて考える思考が身につくのです。

これが一番大事なことです。

VBAとはインプットデータとアウトプットデータの架け渡しのプロセスの

道具にすぎません。

こちらの僕が作った300倍速いVLOOKUP関数ツール記事もどうぞ。

最後まで読んで頂きありがとうございます。


この記事が気に入ったらサポートをしてみませんか?