県別の名簿
30日間1日1本マクロ生活、4日目です。
マクロを書く準備は、0日目に記事を書きました。
マクロを書く準備早速マクロを書こうと思ったんですが、マクロって何?食えんの?って人もいると思うんで、丁寧に行こうかな、と。マクロってのは、通常は人間の手でやるような作業を、プログラムを書くことで機械に自動的にやらせるってことです。Excelの場合はVBA(Visual Basic for Application)という言語を使ってマクロを書きます。まずはその準備を。Excelを起動すると、ワークシートが現れます。ここでキーボードの「ALT+」を押してください。はキーボードの上方にあるファンクションキーの11番です。すると、このウィンドウが開... 0日目 マクロを書く準備をしよう【30日間1日1本マクロ生活】 - わたしの日常に価値はありますか? |
今日のネタは、データの分別です。
こんなデータを準備してみました。
氏名 性別 住所
布施清次郎 男 長崎県
竹原勇次 男 宮崎県
川本和佳 女 佐賀県
北村新太郎 男 熊本県
島袋蓮 女 佐賀県
田端茉央 女 沖縄県
香坂悠里 女 鹿児島県
江藤百香 女 福岡県
日比野汎平 男 大分県
山田唯衣 女 熊本県
高橋有沙 女 熊本県
坂本宏美 女 福岡県
林晴 女 宮崎県
西岡三男 男 大分県
相馬直也 男 大分県
大淵昭夫 男 長崎県
丸山俊哉 男 熊本県
岡部花穂 女 熊本県
河合敏男 男 長崎県
白井清助 男 福岡県
白石咲来 女 宮崎県
芦田昭 男 熊本県
板垣陽一郎 男 沖縄県
小畑誠二 男 福岡県
土肥武史 男 大分県
永山菜々実 女 鹿児島県
紺野忠志 男 大分県
露木義哉 男 長崎県
秋元萌花 女 長崎県
横尾楓花 女 福岡県
福岡悦夫 男 鹿児島県
倉田美奈江 女 佐賀県
寺本毅雄 男 宮崎県
柳原常雄 男 熊本県
山崎奈央 女 大分県
辻本光義 男 福岡県
大原花帆 女 鹿児島県
赤坂貞子 女 長崎県
柳田佳織 女 鹿児島県
小山英俊 男 佐賀県
氏名、性別、住所のデータ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日間、頑張ります。