12/09/2017

Excel。マクロ018。条件分岐 「select case~end select」

Excel。マクロ018。条件分岐 「select case~end select」

<VBA>

事務職でも、少しExcel VBAを知っていると、
確かに作業効率は改善されるようですが、難しいと感じている人も多いようです。
とはいえ、少しずつでいいので、慣れていくといいですね。

今回は、条件分岐処理の「select case~end select
をご紹介していきます。

If Then ElseIf Then Else End Ifの条件分岐構造を使うと、
ABCというように多分岐処理を可能にしてくれるのですが、
多分岐の種類が増えていくたびに、煩雑になっていくという特徴があります。

イメージとしては、ExcelのIF関数のネストがその代表例になります。

IF+IF+IF+IF…というように数式を作っていくと、
確かに数式そのものは完成するのですが、
その後のメンテナンスやアレンジしたいときなどに、
数式が煩雑になっていてわかりにくいのが難点ですね。

そこで、多分岐処理をマクロVBAで行うには、
「select case~end select」を使うことで
比較的安易に多分岐処理をすることが出来ます。

「select case~end select」は、二分岐処理などの少数分岐で使用するよりも、
多分岐処理の時に使うと、より効果的な条件分岐構造ですね。

ステートメントから確認していきましょう。
Slect Case 条件の比較対象
Case 条件式A
処理内容A
Case 条件式B
処理内容B
Case 条件式C
処理内容C
Case Else
処理内容D
End Select

という構造になっています。例えば、条件が増えた場合でも、
Case 条件式
処理内容
を追加していけば対応が可能になっています。

では、次の表を使って実際にマクロVBAを作っていきます。

C列に支店名です。
この支店名は、東京・横浜・名古屋・京都・大阪の5種類で構成されています。

この店舗名ごとに、セルに色を塗りつぶして、
色分けをするマクロVBAを作っていきます。

完成は、このような感じです。

マクロVBAの構文はというと、
Sub 条件分岐05()
    Dim i As Long
    For i = 2 To 18
        Select Case Cells(i, "c").Value
            Case Is = "東京"
                Cells(i, "c").Interior.ColorIndex = 48
            Case Is = "横浜"
                Cells(i, "c").Interior.ColorIndex = 34
            Case Is = "名古屋"
                Cells(i, "c").Interior.ColorIndex = 26
            Case Is = "京都"
                Cells(i, "c").Interior.ColorIndex = 53
            Case Is = "大阪"
                Cells(i, "c").Interior.ColorIndex = 19
            Case Else
                Cells(i, "c").interio.ColorIndex = xlNone
        End Select
    Next
End Sub

基本構造は
Case Else
  Cells(i, "c").interio.ColorIndex = ○○
を繰り返しています。
比較的わかりやすい構造ですね。

各文を確認してみましょう
Dim i As Long
変数宣言ですね。今回は、行数カウントでiを用意しました

For i = 2 To 18~Next
「繰り返し構造」のFor 初期値 to 終了値
ですね。今回は、2行目から18行目までが対象範囲なので2 To 18ですね。

Select Case Cells(i, "c").Value
C列の値がという意味ですね。

Case Is = "東京"
  Cells(i, "c").Interior.ColorIndex = 48
東京だったら、そのセルをColorIndex が48番の色でセルを塗りつぶす
という意味になります。

色に番号が振られているので、ColorIndexを使うと、
番号でその色を使うことができます。

このようにSelect Case構文を使うと、
多分岐処理を作るのは比較的容易になるかと思います。

これをExcelで行う場合は、
「条件付き書式」を使うことになりますが、
設定を店舗数分繰り返さなければなりませんし、
データ量が増えた場合には、「条件付き書式」だけでは、対応することができません。

このようなことからも、
マクロVBAを少し知るだけでも作業効率を改善することが出来そうですね。