Excel2010 住所5分割2
以前の続きです。
教えて頂いたコードを少し変えたものです。
分割の仕方が変わりました。
変更前:「都道府県」「市区町村郡」「通称名」「○丁目」「番地ビル」
変更後:「都道府県」「市区郡」「町域名」「○丁目」「番地ビル」
住所はV列の5行目からですが5行目は入っていません。空白とが入り混じってます。
M列 N列 O列 P列 Q列
都道府県 市区郡 町域名 丁目 番地
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
「東京都」 「豊島区」 「東池袋」 「3丁目」 「1番1号」
「東京都」 「八王子市」 「子安町」 「4丁目」 「10番15号」
「神奈川県」 「川崎市高津区」 「明津」 「12番地メゾン美鈴」
'Option Explicit
Option Compare Text
DefInt A-Z
'
Sub Macro2()
'
Dim SplitData As Variant
Dim SplitFlag As Variant
Dim StringCheck As String
Dim StringMatch As String
Dim SubAddress As String
Dim IY As Long
'
Application.ScreenUpdating = False
SplitData = Array("都,道,府,県", "市,区,郡", "", "丁目", "")
SplitFlag = Array(-1, 1, 0, -1, 0)
Application.ScreenUpdating = False
'
For IY = 8 To Cells(Rows.Count, "V").End(xlUp).Row
StringCheck = Cells(IY, "V")
If StringCheck <> "" Then
StringMatch = Split1(StringCheck, "0,1,2,3,4,5,6,7,8,9", -1)
Parameter = Len(StringMatch)
SubAddress = Mid(StringCheck, Parameter)
StringCheck = Left(StringCheck, Parameter - 1)
'
For ix = 0 To 4
StringMatch = SplitData(ix)
Parameter = SplitFlag(ix)
'
If StringMatch = "" Then
Cells(IY, ix + 12) = StringCheck
StringCheck = SubAddress
Else
StringMatch = Split1(StringCheck, StringMatch, Parameter)
Cells(IY, ix + 12) = StringMatch
Parameter = Len(StringMatch)
StringCheck = Mid(StringCheck, Parameter + 1)
End If
Next ix
End If
Next IY
End Sub
'
Function Split2(StringCheck As String, StringMatch As String, Parameter) As String
' Paemater-:区切り文字のうち、先のものを有効とする。
' +:区切り文字のうち、後のものを有効とする。
Dim SMatch As Variant
Dim W1 As String
'
SMatch = Split(StringMatch, ",")
Max = -32768
'
For i1 = 0 To UBound(SMatch)
W1 = SMatch(i1)
ins = InStr(StringCheck, W1) * Sgn(Parameter)
'
If ins <> 0 Then
Max = WorksheetFunction.Max(Max, ins)
End If
Next i1
'
If Max <> -32768 Then
Max = Abs(Max) - 1 + Len(W1)
Split1 = Left(StringCheck, Max)
End If
Application.ScreenUpdating = True
End Function
実行すると全ての京都府が都道府県名で「京都」で市区郡に「府長岡京市」と分割されてしまいます。
市区郡は全て「府長岡京市」ではなく住所で変わります。「府京都市中京区壬生辻町」など
もう一つは市川市など同じ市区郡が入る住所はうまく分割されません。
「千葉県」「市」 「川市市川」
「三重県」「四日市」「市北浜田町」など
関数だとなんとなくできましたがVBAだとわかりません。
IF(M8="東京都",LEFT(N8,FIND("区",N8)),IF(IFERROR(MATCH(LEFT(N8,1),{"堺"},FALSE),
IFERROR(MATCH(LEFT(N8,2),{"札幌","仙台","千葉","横浜","川崎","新潟","静岡","浜松","京都","大阪","神戸","岡山","広島","福岡","熊本"},FALSE),
IFERROR(MATCH(LEFT(N8,3),{"相模原","名古屋","北九州"},FALSE),
IFERROR(MATCH(LEFT(N8,4),{"さいたま"},FALSE),-1))))>0,LEFT(N8,FIND("区",N8)),
IF(IFERROR(MATCH(LEFT(N8,2),{"郡山","市原","郡上","蒲郡","小郡","市川"},FALSE),-1)>0,LEFT(N8,3),
IF(IFERROR(MATCH(LEFT(N8,3),{"四日市","廿日市"},FALSE),-1)>0,LEFT(N8,4),
IF(IFERROR(MATCH(LEFT(N8,4),{"大和郡山市"},FALSE),-1)>0,LEFT(N8,5),
LEFT(N8,IFERROR(FIND("郡",N8),FIND("市",N8))))))))
お礼
回答ありがとうございました。もう少し自分でも調べてみます。
補足
回答ありがとうございます。 ご指摘の「廃藩置県時、山崎の地名を大阪府・京都府のどちらが継承するかが争われ、大阪側に山崎村、京都側に大山崎村が成立した」は、非常に有意義な情報でありがとうございます。私もその後の検索で発見していて、喜ぶとともに、なぜ「Wikipedia」上にあるものを見逃していたのか恥ずかしい思いをしていました。 しかし、争うということは、廃藩置県時、山崎と大山崎を含む地域を山崎と呼んでいたのだろうか?摂津の国と山城の国の境界はなかったのだろうか?天領だったのだろうか? ちなみに、同ページにある、「1392年(元中9年/明徳3年) 足利義満、大山崎に守護不入の権限を与える」(離宮八幡宮の門柱記載)にあるように、「大山崎」の地名は古くからあった様子。