7/22/2021

Excel。VBA。新宿と品川だったらなどOR条件の時は、SELECT CASE文がオススメです【SELECT】

Excel。VBA。新宿と品川だったらなどOR条件の時は、SELECT CASE文がオススメです

<Excel VBA>

データから、条件に合わせて処理をしたい時には、データを読み込んだ後に数式を作ったり、自分で入力したりするわけですが、できることならば、データを読み込んだ後に、合わせて処理をするほうが、作業的には楽で、効率的に次の作業をすることができます。

例えば、次の表。


C列の地域フィールドにデータがないので、店舗名が「新宿」「品川」だったら、東京。「横浜」「川崎」だったら、神奈川と入力させる処理をしたいとします。


いろいろな方法で入力する作業をするならば、データを読み込んだ時に、地域名が入力されていれば、作業効率がいいわけですね。

目視で自力で入力するのは、時間がかかってしまいますし、数式をつくるのも、意外と面倒です。


今回のように、いわゆる「OR条件」の場合、SELECT CASE文をつかって対応するといいように思えます。


このようにプログラム文をつくってみました。

Sub or条件()

    Dim i As Long

    Dim lastrow As Long

    

    lastrow = Cells(Rows.Count, "a").End(xlUp).Row


    For i = 2 To lastrow

        Select Case Cells(i, "D").Value

            Case "新宿", "品川"

                Cells(i, "C").Value = "東京"

            Case "横浜", "川崎"

                Cells(i, "C").Value = "神奈川"

            Case Else

                Cells(i, "C").Value = ""

        End Select

    Next

End Sub


説明は後回しにするとして、実行してみましょう。


C列の地域フィールドに、東京や神奈川といった地域名が入力されているのが確認できました。


では、プログラム文を確認しておきましょう。

最初は、変数の宣言文です。

Dim i As Long

Dim lastrow As Long

    

変数iは、For to Next文で使用します。


lastrowは、データの最終行の行番号を取得するための変数です。

lastrow = Cells(Rows.Count, "a").End(xlUp).Row

の行で、データの最終行を取得することができます。


この最終行の行数を取得することで、何度繰り返し処理をすればいいのか設定することができます。


For i = 2 To lastrow ~ Next

For To Next文で繰り返し処理を行います。


Select Case Cells(i, "D").Value

    Case "新宿", "品川"

        Cells(i, "C").Value = "東京"

    Case "横浜", "川崎"

        Cells(i, "C").Value = "神奈川"

    Case Else

        Cells(i, "C").Value = ""

End Select

処理の本体である、Select Case文です。


Case "新宿", "品川"

    Cells(i, "C").Value = "東京"

「新宿」と「品川」だったら、C列に「東京」という文字を入力するという意味ですね。

これを必要なパーツ数つくります。


最後に、該当しない場合も作っておく必要がありますので、

Case Else

    Cells(i, "C").Value = ""

とすることで、Select Case文が完了します。


とてもわかりやすく、比較的簡単なプログラム文でつくることができますので、Select Case文も知っておくといいかもしれませんね。


ただ、ちょっと注意点もあって、OR条件というイメージを強く持ちすぎて、Case文を次のようにすると、エラーが表示されてしまい実行できません。


Case "新宿" Or "品川"

このように、「,(カンマ)」で区切るところを「Or」にすると、ダメなんですね。

Excelそのものと、Excel VBAで、少々異なることがありますので、気を付ける必要がありますね。