VBAを学習中とはいえ、今までVBAでIfの構文は数え切れないほど書いてきましたが、恥ずかしいことに今まで次のような構文形式でしか書いたことがありませんでした。
If 条件 Then <内容> End If
もしくは
If 条件 Then <内容A> Else <内容B> End If
もしくは
If 条件 Then <内容A> ElseIf 条件2 Then <内容B> Else <内容最終的に残ったもの> End If
実際に使われているVBAのソースを見ると様々な書き方があることが分かったのでそれを一度整理してみたいと思います。
Ifの基本の書き方
基本構文の書式は次のとおりで条件に当てはまったら内容を実行するというものです。
If 条件 Then <内容> End If
この書き方では条件に当てはまった時だけ何かの向きをしてそうじゃない時は全く動かないということになります。
Ifの条件に当てはまらなかった時も含めた書き方
基本構文の書式は次のとおりで条件に当てはまったら内容を実行するというものです。
If 条件 Then <条件にあっているときの内容> Else <条件にあっていないときの内容> End If
この書き方では条件がどうでも何らかの動きをするということです。
条件をふるいにかけるような書き方
基本構文の書式は次のとおりで条件に当てはまったら内容を実行するというものです。
If 条件1 Then <条件1にあっているときの内容> ElseIf 条件2 Then <ここまでのステップでどの条件にも当てはまらなかった時の内容> ElseIf 条件3 Then <ここまでのステップでどの条件にも当てはまらなかった時の内容> Else <最終的に条件に当てはまらなかった時の内容> End If
上からの条件に当てはまったところの内容をだけが実行されます。条件1に当てはまった時の内容と条件2に当てはまった時の内容、条件3に当てはまった時の内容、どの条件にも当てはまらなかった内容のどれか一つしか実行しません。必ずどれか一つだけが実行されます。
条件をふるいにかけるような書き方2
基本構文の書式は次のとおりで条件に当てはまったら内容を実行するというものです。
If 条件1 Then <条件1にあっているときの内容> ElseIf 条件2 Then <ここまでのステップでどの条件にも当てはまらなかった時の内容> ElseIf 条件3 Then <ここまでのステップでどの条件にも当てはまらなかった時の内容> End If
最後にElseを書かないふるいにかける書き方ですが、最後まで条件に当てはまらなければ何も動作しないというのがポイントです。
1行で書くIf文
今回、ブックに関連付いているテーブルの名前で「商品」なら「Tbl商品」にし、「売上」なら「Tbl売上」にして、というのが10種類あって、他の名前ならそのままにするということをしようと思ったのですがそこで初めの段階でループの中に書いたのは
If テーブル名="商品" Then テーブル名="Tbl商品" End If If テーブル名="売上" Then テーブル名="Tbl売上" End If
というのを10個書いたのですが、かなり見づらくなって元のテーブルメイト変更したいテーブル名の対比もよく分からなくなってしまったので、今までも思っていたのですが条件とその実行内容が一行にまとまっているといいなあと思っていました。
最近、VBAのzoom会やVBA100本ノックのおかげで、VBAがワンライナー出かけることを知り、であれば「:」で1行にまとめたらいいのではないかと思って次のような文を作ってみました。
If テーブル名="商品" Then: テーブル名="Tbl商品": End If
End Ifに対するIfがないエラーとなり、もしかしたらワンライナーならEnd Ifは要らないのではないかと思い、End Ifを試しに削除してみたら動いたので、昔のBASICのIF構文を思い出して、試しに「:」を入れないで次のように書いてみました。
If テーブル名="商品" Then テーブル名="Tbl商品"
無事間違いなくこれでも動くことがわかりました。
ということは、昔のBASIC構文の考え方がまだ生きているのではないかと思って、次の組織も試してみたらちゃんと動きました。
If テーブル名="商品" Then テーブル名="Tbl商品" Else テーブル名="Tbl商品B"
これが正しいやり方なのかどうかちょっと自信がなかったので、Web検索すると、ワンライナーという言葉使って検索してみたら、1行でIf文がまとめられると言う情報がVBAの魔神様たちも紹介されていたので、正当なやり方なのだろうなぁと安心していたところです。
魔神様たちの情報
https://note.com/waenavi/n/n5ba188846f9e
https://www.excel-chunchun.com/entry/2019/02/10/190143
ほか多数
結果、次のように書くことができたのですっきりしました。
If テーブル名="商品" Then テーブル名="Tbl商品" If テーブル名="売上" Then テーブル名="Tbl売上" If テーブル名="取引" Then テーブル名="Tbl取引" If テーブル名="出荷" Then テーブル名="Tbl出荷"
Select文でというのも手でしょうけど、このくらいの条件設定だったらIfの方が私は好みです。
まとめ
VBAでのIf文は1行にまとまるので、1行にしたほうが分かりやすくなるのであればその方が良いのではないかと思います。
If 条件 Then 動作内容
もしくは
If 条件 Then 動作内容 Else 条件に当てはまらなかったときの動作内容
コメント