VBAでSelect Caseを書いていると、「1行で簡潔に書けないのだろうか」と思ったことはありませんか。
VBAではコロン(:)を利用することで、Caseの処理を1行で記述できます。コード量を減らせるため、一見すると便利な書き方に見えますが、実務では必ずしも1行で書くことが最適とは限りません。
特に、処理が増えたり仕様変更が発生したりする業務システムでは、「短く書くこと」よりも「読みやすく保守しやすいこと」が重要になります。
この記事では、Select Caseを1行で記述する方法を紹介するとともに、通常の書き方との違いや、実務ではどのように使い分けるべきかについて詳しく解説します。
✅ Select Caseを1行で書く方法
Select Caseは通常、Caseごとに改行して処理を書きます。
しかし、処理が非常にシンプルな場合は、コロン(:)を利用することで1行にまとめて記述することも可能です。
ただし、コードを短く書けることと、保守しやすいことは別の話です。まずは基本的な書き方を理解した上で、適切に使い分けることが大切です。
・通常のSelect Caseとの違い
通常のSelect Caseは、次のように処理を改行して記述します。
Select Case departmentName
Case "営業"
MsgBox "営業部です。"
Case Else
MsgBox "対象外です。"
End Select
これに対して、処理を1行で書くこともできます。
条件分岐の書き方にはSelect CaseだけでなくIf文もあります。文字列を完全一致で判定する基本的な考え方については、「【VBA】文字列の完全一致の処理(IF文)|実務で壊れない条件分岐の基本設計」も参考になります。
・1行で記述するサンプル
処理が1文だけの場合は、Caseの後ろへコロン(:)を書き、そのまま処理を続けて記述できます。
この書き方は、メッセージを表示するだけ、変数へ値を代入するだけなど、処理内容が非常にシンプルな場合に利用されます。
一方で、後から処理が追加される可能性がある場合は、通常の改行形式で記述した方が保守しやすいケースも少なくありません。まずは1行記述の基本的な書き方を理解し、どのようなコードになるのかを確認してみましょう。
次のサンプルでは、部署名を判定してメッセージを表示するシンプルな処理を1行で記述する方法を紹介します。
・シンプルな処理向けのコード例
Sub ShowDepartment()
' 判定対象となる部署名
Dim departmentName As String
departmentName = Range("A2").Value
Select Case departmentName
Case "営業": MsgBox "営業部です。"
Case "経理": MsgBox "経理部です。"
Case Else: MsgBox "対象外です。"
End Select
End Sub
・なぜこの書き方ができるのか
VBAでは、コロン(:)は複数の命令を区切る記号として利用できます。
そのため、
Case "営業":
の後ろへ処理を続けて書くことで、
Case "営業":
MsgBox "営業部です。"
と同じ意味になります。
構文としては問題なく動作するため、簡単な処理ではコードを短くまとめられます。
✅ 1行で書くメリット
「通常の書き方でも問題ないのに、なぜ1行で書く方法があるのだろう」と思う方もいるでしょう。
1行記述には、コードを簡潔に書けるというメリットがあります。
ただし、利用する場面を選ぶことが重要です。
・コード量を減らせる
処理が1文だけなら、
Case "営業": MsgBox "営業部です。"
のように書けるため、コード行数を減らせます。
サンプルコードや学習用コードでは、一覧性が良くなる場合もあります。
・簡単な分岐なら見やすい
例えば、
- メッセージ表示
- フラグ設定
- 変数へ値を代入
程度であれば、1行記述でも十分読みやすくなります。
短い処理だけを並べる場合には、コード全体をコンパクトにまとめられるというメリットがあります。
VBAではコードを短く書ける構文はいくつかありますが、実務では「短く書けること」と「保守しやすいこと」を分けて考えることが重要です。条件によって何も処理しない設計については、「【VBA】IF文で何もしない処理を実現する方法|continueの代替設計と実務判断」も参考にしてください。
✅ 実務では1行記述を多用しない理由
一方で、実務では1行記述を積極的に採用するケースはあまり多くありません。
その理由は、「短く書けること」よりも、「読みやすく修正しやすいこと」の方が重要だからです。
ここでは、実務で通常の書き方が選ばれる理由を紹介します。
・処理が増えるとすぐに書き換えが必要になる
例えば、
Case "営業": MsgBox "営業部です。"
と書いていても、
後から、
- ログを出力する
- シートへ書き込む
- 別プロシージャを呼び出す
などの処理が追加されることがあります。
すると結局、
Case "営業"
MsgBox "営業部です。"
Call OutputLog
End Select
のように通常の書き方へ戻すことになります。
・レビュー時に読みづらくなる
複数人で開発する現場では、コードレビューを行うことも珍しくありません。
1行へ複数の命令を書くと、
- 処理の区切りが分かりにくい
- 修正箇所を見落としやすい
- コメントを書きにくい
といった問題が発生します。
そのため、実務では保守性を優先し、通常の改行スタイルを採用するケースが多くあります。
条件分岐では、コードを短く書くことよりも、後から修正しやすい構成にすることが重要です。ElseIfを使った保守性の高い条件分岐については、「【VBA】IF文のElseIfを用いた複数条件|ネストを防ぎ実務で壊れない条件分岐を書く方法」で詳しく解説しています。
✅ コロン(:)を使って複数命令を書く方法
VBAのコロン(:)は、1行の中で複数の命令を区切るためにも利用できます。
そのため、Select Caseだけでなく、通常のVBAコードでも1行へ複数の処理をまとめて記述することが可能です。
ただし、命令を詰め込みすぎると可読性が低下するため、利用する場面は慎重に判断する必要があります。
・複数命令を1行へ記述するサンプル
コロン(:)はCaseの処理を1行で記述するだけでなく、1行の中で複数の命令を連続して実行したい場合にも利用できます。
例えば、判定結果をメッセージで表示した後に変数へ値を代入するなど、短い処理を続けて実行するケースでは、1行にまとめて記述することが可能です。ただし、命令が増えるほどコードの見通しは悪くなるため、実務では可読性とのバランスを考えて利用することが重要です。
次のサンプルでは、メッセージ表示と変数への値の代入を1行で記述する方法を紹介します。
・シンプルな処理向けコード
Sub SampleOneLine()
Dim departmentName As String
departmentName = "営業"
Select Case departmentName
Case "営業": MsgBox "営業部です。": departmentName = "営業部"
Case Else: MsgBox "対象外です。"
End Select
End Sub
・この書き方を採用するメリットと注意点
コロンを利用すると、短い処理をコンパクトにまとめられます。
しかし、
- メッセージ表示
- 変数代入
- ファイル操作
- シート操作
など複数の処理が並ぶと、どこで何をしているのか分かりにくくなります。
そのため、「1行で書ける」ことよりも「後から読める」ことを優先するのが実務では基本です。
✅ 1行記述と通常記述はどう使い分ける?
「結局、どちらで書けばよいのか」と迷う方もいるでしょう。
実務では、処理内容によって使い分けることが大切です。
・1行記述が向いているケース
次のような処理であれば、1行記述でも比較的読みやすくなります。
- メッセージ表示だけ
- 変数へ値を代入するだけ
- 単純なフラグ変更
- サンプルコード
- 学習用コード
このような「1命令だけ」の場合は、コードを簡潔にまとめられます。
・通常記述が向いているケース
一方で、次のような処理は改行して記述する方が適しています。
- 複数の命令を実行する
- 条件ごとに処理が異なる
- コメントを付けたい
- 後から仕様変更が発生する可能性がある
- 他の人が保守するコード
実務ではこちらのケースが圧倒的に多いため、通常記述が標準となっています。
可読性を重視した条件分岐を書くためには、条件式の整理方法も重要です。複数条件を分かりやすく記述する方法については、「【VBA】IF文の括弧を用いた複数条件|可読性と誤判定を防ぐ設計手法」もぜひご覧ください。
✅ 実務では保守性を優先した設計がおすすめ
VBAでは、「短く書くこと」が目的になってしまうケースがあります。
しかし、業務システムでは数か月後、数年後に別の担当者がコードを修正することも珍しくありません。
そのため、保守性を考えた設計を意識することが重要です。
・コメントを書きやすい構成にする
例えば、
Case "営業"
' 営業部向けの処理
Call ProcessSales
のように改行しておけば、
処理の目的をコメントとして残しやすくなります。
1行記述ではコメントを書く場所が限られるため、コードの意図が伝わりにくくなることがあります。
条件分岐では、処理を書く部分だけでなく、「何もしない」という設計を分かりやすく記述することも重要です。空分岐を安全に設計する方法については、「【VBA】IF文でElseIfを用いて何も処理しない方法|空分岐の正しい設計と実務判断」も参考にしてください。
・処理が増えることを前提に設計する
実務では、
最初は
MsgBox
だけだった処理が、
後から
- ログ出力
- データ更新
- メール送信
- CSV保存
などへ発展することは珍しくありません。
最初から通常記述で書いておけば、大きな修正をせずに処理を追加できます。
・命令を詰め込みすぎない
例えば、
Case "営業": Call ProcessSales: Call OutputLog: Call SendMail
このようなコードは動作しますが、
処理内容を把握しにくく、レビューや保守でも負担になります。
実務では、
Case "営業"
Call ProcessSales
Call OutputLog
Call SendMail
のように記述した方が、読みやすく保守もしやすくなります。
条件分岐は単体で使うだけでなく、繰り返し処理と組み合わせて利用する場面も多くあります。実務でよく使われる組み合わせについては、「【VBA】for nextで複数条件の処理方法(For Next×If)」で詳しく解説しています。
✅ Select Caseを1行で書くときの注意点
最後に、1行記述を利用する際に意識したいポイントをまとめます。
- 処理が1命令だけなら利用しやすい
- 複数命令を書く場合は可読性を確認する
- コメントが必要なら通常記述を選ぶ
- 将来の仕様変更を考慮する
- チーム開発では通常記述を基本にする
「書けるから使う」のではなく、「保守しやすいかどうか」で判断することが重要です。
Select Caseだけでなく、比較演算子を利用した条件分岐も理解しておくと、状況に応じて最適な構文を選択できるようになります。「【VBA】比較演算子を用いた複数条件の使用方法|実務で迷わない条件分岐の設計」もあわせてご覧ください。
✅ まとめ:Select Caseの1行記述は場面を選んで使おう
この記事では、VBAでSelect Caseを1行で記述する方法について解説しました。
- Select Caseはコロン(
:)を利用すると1行で記述できる - 処理が1命令だけならコードを簡潔にまとめられる
- コロンを使えば複数命令を1行へ記述することも可能
- 実務では可読性や保守性を考えると通常記述が推奨される
- コメントや処理追加を考えるなら改行した方が管理しやすい
- 「短く書くこと」よりも「読みやすく修正しやすいこと」を優先することが重要
Select Caseの1行記述は、学習用コードや簡単なサンプルでは便利な書き方です。しかし、実務では仕様変更や機能追加が前提となるため、将来の保守まで見据えて通常記述と使い分けることが、読みやすく壊れにくいVBAコードを書くためのポイントになります。