トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 新たなる挑戦編: 第12話「フレキシブルなコードとは」2/4 :変更があるかもしれない

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第12話 「フレキシブルなコードとは」

変更があるかもしれない

「いいかい、星。
VBAで開発するときは常に、"変更があるかもしれない"ということを、気にかけて開発を進める必要があるんだ。
フレキシブルなコード(柔軟性のあるコード)とは、そういったあらゆる変更に対して、
まさに柔軟に対応できるコードという意味だ」
「ちょ、ちょっと待った。なんか、具体例を使って説明してくれよ」 「…む。具体例ときたか」 八木くんは、腕組みをして画面のコードを見つめます。

「たとえばこのコード、取り込む先の生産計画表で製品の数が増減したとしても、
コードの修正はいらないよね?
それは、"Cells(Rows.Count, 1).End(xlUp).Row"で、生産計画表の最終行を自動的に取得しているからだ。
同様に、CSVファイルのデータ数が増減しても大丈夫。
"Do Until EOF(1)"で、常にCSVファイルの最終行まで処理を繰り返すようにしているからだ」
星くんは八木くんの説明にフンフンとうなずきます。

「…それに意識して作ったかどうかは別として、
製品番号や日付が見つからなかったときも処理が止まることなく、取り込み処理を継続できるようになっている。
日付や数量を取得するときも、文字数ではなく区切り文字の":(コロン)"の場所を利用して、
日付・数量を取得している。
これらはみな、CSVデータのフォーマットや生産計画表のレイアウトの変更に対して、
コードの修正を最小限に抑える工夫になってるんだ」
「…知らなかった。知らないうちに、そんなすごいコードを俺が作ってたなんて…」 真顔でそういう星くんに、八木くんはプッと吹き出しました。

「…知らないうちに…ではダメだよ。
ちゃんと"知って"作ることが大事なんだ。
いい機会だから、フレキシブルなコードの考え方について説明してやろう。
さっきも言ったけど、マクロで操作する対象…この場合なら、"生産計画表"や"CSVファイル"、
これらはいずれ変わっていくものだということを、念頭に置いて開発する必要があるんだ。
例えば製品番号は今は1列(A列)に、日付は4行にあるけど、これだって将来は変更になるかもしれないだろう?
ならこの値は"決め打ち"せずに、引数で渡すか自動で取得できるようにしたほうがいいよね」
「"決め打ち"ってなんだい?」 「"決め打ち"とは、リテラル…つまり数値や文字列を使って直接、値を指定することをいう。
こうやって決め打ちされた値は、特定の状況でしか正しく動作しない。
つまりこのケースでは、生産計画表のレイアウトが変わったら、もう正しく動作しないということになる」
「…なるほど…確かにそうだね」

一覧にもどる