may the VBA be with you

Excel VBAとか業務自動化とか

都道府県コード取得マクロ ができるまで

はじめに

下のようなシートがあったとします。*1
※住所は架空のものです。

【住所】シート
f:id:vba-belle-equipe:20160307110957p:plain

で、各都道府県に下のようなコードがついているとして(実際あるんですが)

都道府県】シート
f:id:vba-belle-equipe:20160307103855p:plain

住所シートの「都道府県コード」列を都道府県シートから持って来よう、というのが今回のテーマです。

クリアすべきポイント

  1. 住所から都道府県名を取得する
  2. 都道府県名から都道府県コードを取得する
  3. 繰り返す

こんなところでしょうか。

やってみよう

住所から都道府県名を取得する

各住所データを見てみると、都道府県名から始まっていることがわかります。

つまり、はじめの3文字か4文字かでどこの都道府県かわかるというわけです。

ちなみに4文字なのは神奈川県、和歌山県鹿児島県の3つだけです。
*2

  Dim 都道府県名 As String
  都道府県名 = Left("[都道府県列の値]", 4)
  Select Case 都道府県名
    Case "神奈川県", "和歌山県", "鹿児島県"
      
    Case Else
      都道府県名 = Left(都道府県名, 3)
  End Select
  Debug.Print 都道府県名

真面目にやろうとすると、こんな感じでしょうか。

例外が3つ程度で、それで全てだとわかっているからこれでいいと思いますが、そうでない場合は違う方法が必要かもしれません。

繰り返す

1件だけ取得しても3文字と4文字どちらも大丈夫が確認できないので、今回はこの段階で繰り返しをやってみます。

Sub test()
  Dim 都道府県名 As String
  Dim i As Long
  Dim maxRow As Long
  maxRow = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To maxRow
    都道府県名 = Left(Cells(i, 2), 4)
    Select Case 都道府県名
      Case "神奈川県", "和歌山県", "鹿児島県"
        
      Case Else
        都道府県名 = Left(都道府県名, 3)
    End Select
    Debug.Print 都道府県名
  Next
End Sub

最終行を取得し、for文で回しています。

群馬県
鳥取県
北海道
東京都
広島県
富山県
神奈川県
福岡県
山梨県
岐阜県
兵庫県
和歌山県
東京都
愛知県
  :
  :

とりあえずイミディエイトウインドウで確認できたところで、今日は終了。

*1:http://yamagata.int21h.jp/ こちらのテストデータジェネレータを使わせていただきました

*2:都道府県名って全部3文字だっけ? 琵琶湖県になったら大変だなあ、などとさっきまで寝ぼけたことを考えていたのは秘密