Mutable_Yunの業務改善ブログ

VBA勉強中の非エンジニア会社員向けのブログです。業務改善についても触れています。

VBA Select Case Trueの使い方を端的に解説する

Excel VBAでSelect Caseステートメントの評価対象にTrueを使う方法を解説します。単刀直入にサンプルコードを示した上で、簡単に解説します。

スマホの方はお持ちのスマホを横にして頂くと、サンプルコードが、PCと同様に見れると思います。たぶん。

目次

Select Case Trueの使い方

今回の事例では、下記の様なシートを想定します。

A列に文字列や数値が記入されている
今回の例
いきなりサンプルコード示します。

サンプルコード

うまく行くサンプルと失敗するサンプルを示して、違いを見比べます。

うまくいくサンプルコード
Sub Select_Case_Trueを使う()

    Select Case True
        Case IsNumeric(Cells(1, 1))
            Cells(1, 2) = "Number"
    End Select

End Sub

何をやっているかというと、A1セルが数値だったらB1セルに「Number」と書き込んでいます。

理解を深めるための失敗するサンプルコード
Sub Select_Case_Trueを使わずに失敗する()

    Select Case Cells(1, 1)
        Case IsNumeric(Cells(1, 1).Value)
            Cells(1, 2) = "Number"
    End Select

End Sub

エラーは出ませんがCase IsNumeric(Cells(1, 1).Value)の中身が実行されません。うまくいかない理由はCells(1,1)が IsNumeric(Cells(1, 1).Value)の値と一致しないから

Cells(1,1)の値は「123」。IsNumeric(Cells(1, 1).Value)の値は「True」。もちろん一致していませんね。この調子でいけばどのセルの値も「True」ではないので一回もCaseの中身が実行されません。セルの中に「True」と書かれていれば、今度は文字列なので当然IsNumericがFalseなので結局一回も実行されません。

使い方をど忘れしてしまった人の為の解説は以上ですが、自由自在に使えるために簡潔に解説を加えておきます。

自由自在に使いこなせるようになる為のSelect Case Trueの解説

Select Case Trueにすると、Caseの判定が必ず行われます。ということは、細かい判定をしたい場合はとりあえず、Select Case Trueとしておいて、Caseの中で細かく条件分岐すれば良いと言うことです。

今回の図を再掲します。

数値と文字列が混在している
再掲。今回のシートの中身

Sub Select_Case_Trueを使いこなすサンプル()

    Dim i As Long

    For i = 1 To 5
        Select Case True
            Case IsNumeric(Cells(i, 1))
                Cells(i, 2) = "数値"
            Case IsNumeric(Cells(i, 1)) = False
                Cells(i, 2) = "これは数値ではありません"
        End Select
    Next i
End Sub

実行結果は下記の通り。

Trueを指定することで全ての条件が判定された
実行結果。Select Case Trueを使いこなす第一歩だ

上のサンプルコードの「 Case IsNumeric(Cells(i, 1)) = False」の部分は「Case Not IsNumeric(Cells(i, 1))」の方が筋のいい書き方かと思いますが、あえてわかりやすさ重視で「= False」としました。

Select Case TrueのTrueは全てのCaseについて条件が判定されると言う意味です。Case IsNumericのTrueとは関係ありません

最後の使いこなすサンプルをよく見れば、とりあえずTrueで全てのCaseについて判定をしてCaseの中で細かい条件分岐をできる感覚が分かるのではないでしょうか。