『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】住所録の東西南北(Adress Editor)

 今回も忙しいからちょっと手抜き … あ、いえ、KOBATO’s BOOK に組込まれている Adress Editor というソフトの部品マクロを紹介します! たとえば、次のような住所録がテーブル形式で入っているとします(下の住所はソフトで作成された架空のものです)。

住所一覧
大阪府堺市P区小阪合町 6-47-2
大阪府大阪市旭区中の島町 6-23-6
大阪府高石市深井沢町 3-11
大阪府岸和田市渚P町 1-7-5
大阪府大阪市都島区P野Q 4-58
大阪府大阪市P区畑 32
大阪府大阪市P住吉区打上元町 6-26-8
大阪府大阪市阿倍野区春木旭町 5-3
大阪府大阪市港区上之宮町 60
大阪府堺市P区桜ケ丘Q町R 7-40-9

 所々に P, Q, R というアルファベットが組込まれていますね。ここに 東西南北 から無作為に1つずつ選んで当てはめていくのが、NEWS() マクロです。Adress Editor で最後の仕上げをしてくれるマクロなのです。

【VBA】住所録用 NEWS マクロ

 このマクロを試す場合は、上の一覧をコピーして貼りつけて、[ホーム] ⇒ [テーブルとして書式設定] でデータをテーブルに変換し、[テーブルツール] でテーブル名を「住所」としてください。

Option Base 1

Sub NEWS()

  Dim i As Integer, j As Integer
  Dim ct As Integer, rd As Integer
  Dim x As String
  Dim mydata(4) As String
  Dim myrange As Range

  Randomize

  'リストの行数を数えてctに格納
  ct = ActiveSheet.ListObjects("住所").ListRows.Count

  '見出し以外の部分をmyrangeに格納
  Set myrange = ActiveSheet.ListObjects("住所").DataBodyRange

  '配列に東西南北を格納
  mydata(1) = "東"
  mydata(2) = "西"
  mydata(3) = "南"
  mydata(4) = "北"

  'リストの全ての行について処理
  For j = 1 To ct

    '配列をシャッフル
    For i = 1 To 4
      rd = Int(4 * RND + 1)
      x = mydata(i)
      mydata(i) = mydata(rd)
      mydata(rd) = x
    Next i

    'アルファベットを東西南北に置き換えます
    myrange.Cells(j, 1).Replace what:="P", replacement:=mydata(1)
    myrange.Cells(j, 1).Replace what:="Q", replacement:=mydata(2)
    myrange.Cells(j, 1).Replace what:="R", replacement:=mydata(3)
    myrange.Cells(j, 1).Replace what:="S", replacement:=mydata(4)

  Next j

End Sub

 NEWS() マクロを実行すると、アルファベットに方角が書き込まれて、たとえば最初の行にある

大阪府堺市P区小阪合町 6-47-2

というデータが

大阪府堺市西区小阪合町 6-47-2

というように変わるはずです。えーとね、今ちょっと、周囲で「ごたごた」があって、なかなかこのサイトを更新できないですけど、全部解決したら、もう毎日のようにがんがん新しい記事を載せる予定です。

コメント

  1. あとりえこばと より:

    【AIコーティング】架空住所生成マクロ

     以下に、VBAを使用して架空の住所を生成するマクロの例を示します。このマクロは、ランダムな番地、市名、都道府県名を生成します。なお、このマクロは完全にランダムな文字列を生成するため、実在する住所を生成することはありません。

    Sub GenerateFakeAddress()
    
        ' 都道府県名のリスト
        Dim Prefectures As Variant
        Prefectures = Array("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県")
    
        ' 市名のリスト
        Dim CityNames As Variant
        CityNames = Array("一色市", "二宮町", "三島市", "四日市市", "五所川原市", "六本松市", "七尾市", "八王子市", "九段下市", "十和田市")
    
        ' ランダムな番地を生成
        Dim RandomStreet As String
        RandomStreet = Int((1 + 100) * Rnd) & "-" & Int((1 + 100) * Rnd)
    
        ' ランダムな都道府県名を選択
        Dim RandomPrefecture As String
        RandomPrefecture = Prefectures(Int((0 + UBound(Prefectures)) * Rnd))
    
        ' ランダムな市名を選択
        Dim RandomCity As String
        RandomCity = CityNames(Int((0 + UBound(CityNames)) * Rnd))
    
        ' 住所を生成
        Dim FakeAddress As String
        FakeAddress = RandomPrefecture & RandomCity & RandomStreet
    
        ' 住所を出力
        MsgBox FakeAddress
    
    End Sub

    このマクロを実行すると、例えば「福岡県五所川原市46-23」のような架空の住所が生成され、メッセージボックスで表示されます。都道府県名と市名のリストは必要に応じて編集・追加してください。なお、VBAのRnd関数は0以上1未満の乱数を生成します。この値に配列の長さを掛けることで、ランダムなインデックスを得ることができます。また、Int関数を使用して、この乱数を整数に変換しています。