- ベストアンサー
住所のセル分割について VBA
マクロについてお尋ねします。 A1のセル ●●市山田町1-1山田ハウス111号 のように町名と番地(全角数字)とアパート・マンション名が続けて入っているセルがいくつもあります。 これを B1→ ●●市山田町 C1→ 1-1山田ハウス111号 ※住所を前から見ていき、全角数字(1~9)が出たらC1に分割 のように2つのセルに分割したいのです。 A1のセルで全角数字(1~9)のいずれかの数字が出たら その数字からC1に分割したいのですがどのようにすればいいのでしょうか。 町名と番地(1-1)の間にはなにもありません。 また番地までの住所の長さはまちまちです。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
条件に合うように修正しました。次のマクロでどうでしょう。 Sub Macro1() Dim AdrCell As Range Dim Adr As String Dim AdrLen As Integer Dim i As Integer Dim ChrCode As Integer For Each AdrCell In Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)) Adr = AdrCell.Value AdrLen = Len(Adr) For i = 1 To AdrLen ChrCode = Asc(Mid(Adr, i)) If &H824F < ChrCode And ChrCode < &H8259 Then AdrCell.Offset(0, 1).Value = Left(Adr, i - 1) AdrCell.Offset(0, 2).NumberFormatLocal = "@" AdrCell.Offset(0, 2).Value = Right(Adr, AdrLen - i + 1) Exit For End If Next i Next End Sub
その他の回答 (1)
- hananoppo
- ベストアンサー率46% (109/235)
分割したい住所を複数選択した状態で次のマクロを実行してみてください。 Sub Macro1() Dim AdrCell As Range Dim Adr As String Dim AdrLen As Integer Dim i As Integer Dim ChrCode As Integer For Each AdrCell In Selection Adr = AdrCell.Value AdrLen = Len(Adr) For i = 1 To AdrLen ChrCode = Asc(Mid(Adr, i)) If &H824F < ChrCode And ChrCode < &H8259 Then AdrCell.Offset(0, 1).Value = Left(Adr, i - 1) AdrCell.Offset(0, 2).Value = Right(Adr, AdrLen - i + 1) Exit For End If Next i Next End Sub
お礼
早速のご回答ありがとうございました! A列に住所データを入れ、対象の住所データを選択した状態でマクロを実行したところ きれいに全角数字で分割することができました。 ただ、住所が「●●市■■町2-15-7」でアパート名が無い場合は分割した際, B列に「●●市■■町」C列に「2007/2/15」というように日付形式になってしまいます。 もちろんアパート名が無い場合、C列全て日付形式になるのではなく 「●●市■■町4-95-5」の場合はきれいに B列に「●●市■■町」C列に「4-95-5」というように入ります。 また、もう1点お尋ねしたいのですが、 A列(分割したい住所データ)を選択しない状態でマクロを実行させることはできますでしょうか。 重ね重ね、申し訳ございません。 ご教示頂ければ幸いです。 どうぞ宜しくお願い致します。
お礼
ありがとうございました!! 理想通りの動きです! 手持ちの住所データ145件、きれいに分割することが出来ました。 早いご回答に感謝いたします。 ありがとうございました。