Select Case文 VBAテクニック集 VBA一覧 文法・構文

【VBA】Select Caseを1行で書く方法|コロン(:)を使った簡潔な記述と実務判断

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コードを書くためのポイントになります。

    -Select Case文, VBAテクニック集, VBA一覧, 文法・構文