12/18/2022

Excel。VBA。面倒な割り振りを何度も行うのは面倒なので、どうにかしたい【distribute】

Excel。VBA。面倒な割り振りを何度も行うのは面倒なので、どうにかしたい

<Excel VBA:Select Case文>

データを読み込んだあとに、毎回、地域名を割り振り入力するのは面倒なので、どうにかしたいと考えたわけです。


店舗名が、東京都内ならば、地域に「都内」

神奈川県にあれば「神奈川」

それ以外は「その他」

と入力するように振り分けたいわけです。


データを読み込むたびに、入力するのは面倒以外の何物でもありません。


IF+OR関数で数式をつくるのも、店舗数が多く煩雑になってしまいます。

そこで、今回はExcel VBAでプログラム文をつくって対応していきます。


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

Sub 地域振り分け()

    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, "a").Value

            Case "秋葉原", "池袋", "品川", "新宿"

                Cells(i, "b").Value = "都内"

            Case "大船", "川崎", "藤沢", "横須賀", "横浜"

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

            Case Else

                Cells(i, "b").Value = "その他"

        End Select

    Next

End Sub


Select Case文をつかってみました。

ただ、「秋葉原」だったら「都内」というような、1条件ごとにCaseをつくっていくと大変です。

そこで、OR条件のSelect Caseにすることで、可読性を改善することができます。


プログラム文を説明します。

Dim i As Long

Dim lastrow As Long

    

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


お馴染みの変数宣言ですね。

「lastrow = Cells(Rows.Count, "a").End(xlUp).Row」は、繰り返し数を算出させるものです。


そして、Select Case文ですが、For文をつかって、データを判定させていきます。

For i = 2 To lastrow

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

        Case "秋葉原", "池袋", "品川", "新宿"

            Cells(i, "b").Value = "都内"

        Case "大船", "川崎", "藤沢", "横須賀", "横浜"

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

        Case Else

            Cells(i, "b").Value = "その他"

    End Select

Next


Case文のOR条件は「,(カンマ)」で区切っていきます。

「Case "秋葉原", "池袋", "品川", "新宿"」

なんとなく、OR関数のように入力しそうになりますね。

あと、それ以外は「Case Else」と設定してあげれば、対応することができます。


簡単だけど、面倒な作業とかは、Excel VBAでマクロをつくれないか考えてみるのもいいかもしれませんね。