連載
» 2018年02月28日 05時00分 公開

脱初心者! 1歩先を行くExcel VBA開発者のススメ(5):税率変更にも簡単に対応、無駄を減らすコーディングのコツとは (1/2)

消費税率変更のように、「将来変わる可能性のある数値」がコード内に複数含まれている場合、修正に時間がかかってしまいます。メンテナンスを楽にするコーディングのコツとは何でしょうか。

[高橋宣成,著]

連載目次

ExcelVBAを実務で使い倒す技術

書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍『ExcelVBAを実務で使い倒す技術』からの抜粋です。

ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。


※編集部注:前回記事「エラーは実は『情報の宝庫』、VBAに生かす方法とは」はこちら

同じコードを書いてはいけない

■繰り返しで同じコードを1行にまとめる

 以下は、金額に対して消費税額を算出するコードです。

金額に対して消費税額を算出する処理

 消費税率が、8%から変更の可能性があることが十分想定できるとすると、このコードはどのように書いておくことが望ましいでしょうか?

 今のままでは「0.08」という数値が5箇所に存在しているから、5箇所を変更しなければならなくなるわけです。

 例えば、次のようにFor文を使って繰り返し処理とする方法があるでしょう。

繰り返し構文を使って同様の式をまとめる

 別の方法として、次のように消費税率を変数に置き換えたコードを想定することもあるかもしれません。

変数を使って変更箇所を1 つにまとめる

 繰り返しを使ったコードと変数を使ったコード、どちらが変化に強いと思いますか?

 この場合、繰り返しを使ったコードの方が、変化に強いコードだと言えるのはわかりますか?

 というのも、後者は消費税率の変化には、1箇所の変更で対応できますが、次のような変化には1箇所の変更で対応できませんね。

  • 貼り付け先の列
  • 貼り付け元の列
  • 丸め方
  • 変数名

 一方で、繰り返しを使ったコードであれば、いずれの場合も1行の変更で変化に対応ができます。

 ポイントは、同じことを何度も書かないということです。

.Range("B2").Value = .Range("A2").Value * rateTax
.Range("B3").Value = .Range("A3").Value * rateTax

 この2行は違うところがあるよ、と思うかもしれませんが、異なるのはセルの行数を示す2箇所だけ。他の箇所は全て同じということに注目すべきです。

 ですから、その「同じ部分」をなるべく見つけ出し、なるべく1つにまとめるのです。そうすれば、まとめた箇所に関しての変更は1箇所のみの変更で済むようになります。

 コーディングを進める際に、この思考を働かせるかどうかで、未来の楽さ加減に天と地の差が出てきます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。