4日目 県別に整列しよう【30日間1日1本マクロ生活】

県別の名簿

30日間1日1本マクロ生活、4日目です。

マクロを書く準備は、0日目に記事を書きました。

今日のネタは、データの分別です。

こんなデータを準備してみました。

氏名 性別 住所
布施清次郎 男 長崎県
竹原勇次 男 宮崎県
川本和佳 女 佐賀県
北村新太郎 男 熊本県
島袋蓮 女 佐賀県
田端茉央 女 沖縄県
香坂悠里 女 鹿児島県
江藤百香 女 福岡県
日比野汎平 男 大分県
山田唯衣 女 熊本県
高橋有沙 女 熊本県
坂本宏美 女 福岡県
林晴 女 宮崎県
西岡三男 男 大分県
相馬直也 男 大分県
大淵昭夫 男 長崎県
丸山俊哉 男 熊本県
岡部花穂 女 熊本県
河合敏男 男 長崎県
白井清助 男 福岡県
白石咲来 女 宮崎県
芦田昭 男 熊本県
板垣陽一郎 男 沖縄県
小畑誠二 男 福岡県
土肥武史 男 大分県
永山菜々実 女 鹿児島県
紺野忠志 男 大分県
露木義哉 男 長崎県
秋元萌花 女 長崎県
横尾楓花 女 福岡県
福岡悦夫 男 鹿児島県
倉田美奈江 女 佐賀県
寺本毅雄 男 宮崎県
柳原常雄 男 熊本県
山崎奈央 女 大分県
辻本光義 男 福岡県
大原花帆 女 鹿児島県
赤坂貞子 女 長崎県
柳田佳織 女 鹿児島県
小山英俊 男 佐賀県

氏名、性別、住所のデータ40人分です。

ちなみに、氏名はダミーの名前です。住所は九州・沖縄の8県限定です。

疑似個人情報データ生成サービス

こんなサイトがあるんですよ。すごくないですか?

ダミーの個人情報をランダムに作ってくれるサイトです。

マクロの勉強するときなんか、めっちゃ便利ですね。

この個人情報から、県別の名簿を作りたい時ってありますよね。今日はこれをやります。

C列に入っている住所に応じて、A列の名前を右側の各県の欄に整列させます。

さっそくコードを


Sub 県別に整列()
    Dim ky(8)
    For i = 0 To 8
        ky(i) = 2
    Next i
    y = 2
    Do While Cells(y, 1) <> ""
        Select Case Cells(y, 3)
            Case "福岡県"
                x = 5
            Case "佐賀県"
                x = 6
            Case "長崎県"
                x = 7
            Case "大分県"
                x = 8
            Case "熊本県"
                x = 9
            Case "宮崎県"
                x = 10
            Case "鹿児島県"
                x = 11
            Case "沖縄県"
                x = 12
            Case Else
                x = 13
        End Select
        
        Cells(ky(x - 5), x) = Cells(y, 1)
        ky(x - 5) = ky(x - 5) + 1
        y = y + 1
    Loop
End Sub

では、解説します。

Dim

2行目の「Dim」です。

配列変数と言います。

通常の変数は「a=2」とか「x=5」とか、文字の中に値を格納します。

言ってみれば、「aという箱に2のカードを入れる」とか、「xという箱に5のカードを入れる」というイメージです。

配列変数は、その箱の中が仕切られているイメージです。

こんな感じで、箱全体の名前が「ky」で、その中が1番、2番、3番というように仕切られています。

この番号の所に値を入れていくイメージです。

ちなみに、配列変数の番号は0番から始まります。

2行目の「Dim(8)」は、「『ky』っていう、0番から8番までの9つに仕切られた箱を準備してくれよ!」っていう命令です。

この準備をしないと、配列変数は使えません。

各県に入る人のy座標

上から順に一人ずつ整列させていきますので、各県に入っている人数が違います。

福岡は3人入ったけど、佐賀には4人入ってる。次の人が福岡だったら5段目に入れるけど、佐賀だったら6段目に入れなきゃならない。

こんな感じで、県ごとに次の人が入るy座標が違います。

そこで、ky(0)は福岡の次の人のy座標、ky(1)は佐賀の次の人のy座標・・・というように、次の人のy座標をkyの箱に入れておくと便利なんです。

初期化

Dimの次の行からは、配列の初期化です。

最初はどの県も2段目に入れなきゃですから、全て2にします。

VBAの場合、配列の初期化を一気にやっちゃう方法は無いようなので、ループで全てに2を代入します。

Select Case

8行目の「Select Case」は、いわゆる「場合分け」です。

「Select Case ~」で「~について場合分けします」と読みます。

次の行からの「Case ○○」は、「~が○○の場合」と読み、条件を満たすものについて、その下の行から次の「Case」までが実行されます。

場合分けが被ってはいけないのですが、被っているときは上に書いてあるものが優先されます。

ここでは、「Cells(y,3)」に入っている値が「福岡県」であるときは、「x=5」が代入されます。

他の値のときも同様です。

実際に振り分け

福岡県のメンバーを並べる場所は、x座標が5の列です。

だからx=5を代入しますが、kyの箱の福岡県の番号は0です。

他の県も同様に、並べるx座標から5を引いたものが箱の番号になっているので、y座標はky(x-5)です。


Cells(ky(x - 5), x) = Cells(y, 1)
ky(x - 5) = ky(x - 5) + 1

対象のセルに名前を格納し、その県のy座標を1増やします。

実行結果

マクロを記述するウィンドウの「Sub」と「End Sub」の間にカーソルを置いて、画面上方の再生ボタン的なアイコン(右向きの三角形)をクリックするか、[F5]キーを押します。

はい、このように各県のメンバーがそれぞれのプラカードの下に整列しました。

Excelは便利

悔しいですが、Excelは便利です。

Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。

マクロを書くようになると、Excelからは離れられないですね。

30日間、頑張ります。

雑感

Posted by Hirota