マクロに限らずデータを扱っていると「こんなときはこうしたい」「あんなときはああしたい」など様々な場面で条件分岐させたいことがでてくる思います。
「この場合の時さだけ処理したいんだよな、、でも”この時の場合だけ”ってどう書けばいいの?」
「複数条件をしたい場合ってどう書くの?」
いろいろな疑問や、つまづきがあると思います。
ここでは条件分岐(if構文)の
- 基本的な書き方
- 複数条件の書き方
- そもそもエラーがある場合の書き方
- 書き方のコツ
〜if文の書き方〜
■ 基本的な書き方 ■
if構文は下記が基本となります。
[ 条件一致の場合の処理をここに書く ]
else
[ 条件不一致の場合の処理をここに書く ]
endif
赤文字の部分が構文となっております。
[ ]の部分に各条件文や、処理内容を書いていきます。
いちおう基本ルールとしては「 if で始まり、 endif で終わる 」
※ 書き方によってはendif がない場合もありますが、ここでは省略します
例えば、
「もしセルA1とセルB1の値が一致している場合は、
メッセージボックス”一致だよ”を表示
、
不一致の場合はメッセージボックス”不一致だよ”を表示
。」
の処理をしたい場合は下記のように記述となります。
msgbox ”一致だよ”
else
msgbox ”不一致だよ”
endif
(ちょっと脱線)ところで、気づきましたでしょうか?
書いていることは日本語文と同じであるということを(。はちょっと反則かもしれませんが笑)。
マクロに限らず、私はエクセル関数でも都合よく「,(カンマ)」「.(コンマ/ドット)」に意味をもたせて覚えています。
もし セルA1とセルB1が一致 の場合は
msgbox ”一致だよ”
メッセージボックスで ”一致だよ”を表示
else
そうじゃない場合は
msgbox ”不一致だよ”
メッセージボックスで ”不一致だよ”を表示して
endif
条件終わり
〜複数条件を指定する場合〜
マクロでよくやってしまう初歩的なミス、よく起こるエラーの一つが複数条件の指定ではないでしょうか。
私もつまづきました。
例えば
「セルA1がセルB1とセルC1と一致していた場合は◯◯の処理を実行したい」
という場合。
日本文の通りに書くと
ここに◯◯の処理内容を書く
endif
と書いてしまいがちです。
これは、元の日本文が一部省略されていることにより起こる間違いとなります。
正しい日本文としては「セルA1がセルB1と一致、 かつ、セルA1がセルC1と一致していた場合 は◯◯の処理を実行」となります。
これをマクロで記述すると
ここに◯◯の処理内容を書く
endif
気をつけましょう。
〜セルの値がエラーだった場合の条件〜
もしRange(“A1”)がエラーだった場合など、そもそもセルの値がエラーの場合の書き方も悩むポイントかと思います。
その場合はセルの値がエラーかどうかを判定して書くことにしましょう。
エラーかどうかの判定にはエクセル関数にもありますが、ISERRORを使用しましょう。
[ エラーの場合の処理 ]
endif
となります。
if文に限らずですが、「こう書くと直観的にわかりやすい」というものをお伝えします。
具体的にはセルの値の比較です。
◯ : if range(“A1”) < range(“B1”) then
ほとんどの日本の方はAはBより左にあるということが潜在意識に入っている(ハズな)ので、セルの位置関係を意識した、◯の書き方が理想ですし、日本語の順番「セルA1が10より小さい場合など」を意識すると他人にとっても自分にとっても読みやすく、書きやすくなると思います。
是非参考にしてみてください。