|
あるキャンペーンで顧客に紹介する店の住所を、システムに登録しています。
その際下記マクロで住所を住所1〜4にわけています。
例1:千葉県一川市妙典1-2まち田マンション203 ⇒「千葉県」「一川市」「妙典」「1-2まち田マンション203」(正しい)
ところがうまくいかないことがあります。
例2:千葉県市川市妙典1-2町田マンション203 ⇒「千葉県」「市」「川市」「妙典1-2町田マンション203」(ダメ)
例3:千葉県一川市妙典1-2町田マンション203 ⇒「千葉県」「一川市」「妙典1-2町」「田マンション203」(ダメ)
例2の場合は住所2が市川市に、例3の場合は住所3が「妙典」になるようにするにはどこをどう改善すればよいでしょうか。
'カウンタ
Dim i As Long
Dim iCnt As Long
Dim iCnt1 As Long
Dim iCnt2 As Long
Dim iCnt3 As Long
Dim iCnt4 As Long
Dim Saisyuu_gyou As Long ' 1項目の住所のデータ件数
Dim Gyou As Long ' 1項目の住所の行番号
Dim Retu As String ' 1項目の住所の列番号
Dim Retub As Long ' 1項目住所の列番号(数値)
Dim c
Dim Kennsaku_moji As String ' 検索する文字(都道府県)
Dim Kennsaku_moji1 As String ' 検索する文字(市区郡)
Dim Kennsaku_moji2 As String ' 検索する文字(区町村)
Dim Kennsaku_moji3 As String ' 検索する文字(地名・字名)
Dim Kennsaku_moji4 As String ' 検索する文字(番地)
Dim v As Long ' 文字位置(番地)
Dim w As Long ' 文字位置(番地)最小値
Dim x As Long ' 文字位置(都道府県)
Dim y As Long ' 文字位置(市区郡)
Dim z As Long ' 文字位置(市区郡2)
'*************************************************
' 住所データから4項目住所データに分割する。
'*************************************************
Sub 分割start()
Module1.Juusyo_bunnkatu
MsgBox "住所分割、処理終了しました。"
End Sub
'*************************************
' 都道府県の確定
'*************************************
Sub Juusyo_bunnkatu()
Sheets("住所入力シート").Activate
'----1セル(行)の処理 ------------------------------
Gyou = 2
Retu = "a" ' 1項目住所の列番号(文字)
Retub = 1 ' 1項目住所の列番号(数値) ------- retuとretubとは、連動させること。
Saisyuu_gyou = Range(Retu & Gyou).CurrentRegion.Rows.Count
For i = Gyou To Saisyuu_gyou + Gyou
x = 0
y = 0
z = 0
w = 0
v = 0
For iCnt = 1 To 5
If iCnt = 1 Then Kennsaku_moji = "県"
If iCnt = 2 Then Kennsaku_moji = "府" '京都府の場合、都を左記に検索処理すると京都で区切るので、
If iCnt = 3 Then Kennsaku_moji = "都" '先に府で検索処理させる。
If iCnt = 4 Then Kennsaku_moji = "道"
If iCnt = 5 Then
x = 0
Module1.Juusyo_set1 '市区郡へ
Else
x = InStr(Range(Retu & Gyou), Kennsaku_moji)
If x > 0 Then
Module1.Juusyo_set1 '市区郡へ
Exit For
End If
End If
Next
Module1.Sheet_Set 'シートに反映
Gyou = Gyou + 1
Next
Module1.Kana_Set
End Sub
'*************************************
' 市区郡の確定
'*************************************
Sub Juusyo_set1()
' ---- 第2検索文字での検索・処理 ----------------
For iCnt1 = 1 To 6
If iCnt1 = 1 Then Kennsaku_moji1 = "市"
If iCnt1 = 2 Then Kennsaku_moji1 = "区"
If iCnt1 = 3 Then Kennsaku_moji1 = "郡"
If iCnt1 = 4 Then Kennsaku_moji1 = "町"
If iCnt1 = 5 Then Kennsaku_moji1 = "村"
If iCnt1 = 6 Then
Exit For
Else
y = InStr(x + 1, Range(Retu & Gyou), Kennsaku_moji1)
If y > 0 Then
Module1.Juusyo_set2 '区町村へ
Exit For
End If
End If
Next
End Sub
'*************************************
' 区町村の確定
'*************************************
Sub Juusyo_set2()
' ---- 第3検索文字での検索・処理 ----------------
For iCnt2 = 1 To 6
If iCnt2 = 1 Then Kennsaku_moji2 = "市"
If iCnt2 = 2 Then Kennsaku_moji2 = "区"
If iCnt2 = 3 Then Kennsaku_moji2 = "町"
If iCnt2 = 4 Then Kennsaku_moji2 = "村"
'If iCnt2 = 5 Then Kennsaku_moji2 = "郡"
If iCnt2 = 5 Then
z = y
If z > 0 Then
Module1.Juusyo_set3
Exit For
End If
Else
z = InStr(y + 1, Range(Retu & Gyou), Kennsaku_moji2)
If z > 0 Then
Module1.Juusyo_set3
Exit For
End If
End If
Next
End Sub
'*************************************
' 地名・字名の確定
'*************************************
Sub Juusyo_set3()
For iCnt3 = 1 To 9
'半角数字
Kennsaku_moji3 = Trim(Str(iCnt3))
v = InStr(z + 1, Range(Retu & Gyou), Kennsaku_moji3)
If v = 0 Then
'全角数字
Kennsaku_moji3 = Trim(StrConv(Str(iCnt3), vbWide))
v = InStr(z + 1, Range(Retu & Gyou), Kennsaku_moji3)
End If
If v <> 0 Then
If w = 0 Or w > v Then
w = v
End If
End If
Next
End Sub
'*************************************
' 分割した住所をシートに反映
'*************************************
Sub Sheet_Set()
If x > 0 Then
Cells(Gyou, Retub + 1) = Mid(Range(Retu & Gyou), 1, x)
End If
If y > 0 Then
Cells(Gyou, Retub + 2) = Mid(Range(Retu & Gyou), x + 1, y - x)
End If
If z > 0 Then
If y = z And w > 0 Then
Cells(Gyou, Retub + 4) = Mid(Range(Retu & Gyou), y + 1, (w - 1) - y)
Cells(Gyou, Retub + 6) = Mid(Range(Retu & Gyou), w, Len(Range(Retu & Gyou)) - (w - 1))
Else
Cells(Gyou, Retub + 4) = Mid(Range(Retu & Gyou), y + 1, z - y)
Cells(Gyou, Retub + 6) = Mid(Range(Retu & Gyou), z + 1, Len(Range(Retu & Gyou)) - z)
End If
End If
End Sub
'*************************************
' カナの設定
'*************************************
Sub Kana_Set()
'最終行
Selection.SpecialCells(xlCellTypeLastCell).Select
endr = ActiveCell.Row
'-------------------
'セル列のカナ設定
'-------------------
'市区郡
Range(Cells(1, 3), Cells(endr, 3)).SetPhonetic
Range(Cells(1, 3), Cells(endr, 3)).Select
Selection.Phonetics.CharacterType = xlKatakana
'区町村
Range(Cells(1, 5), Cells(endr, 5)).SetPhonetic
Range(Cells(1, 5), Cells(endr, 5)).Select
Selection.Phonetics.CharacterType = xlKatakana
'地名・字名・番地
Range(Cells(1, 7), Cells(endr, 7)).SetPhonetic
Range(Cells(1, 7), Cells(endr, 7)).Select
Selection.Phonetics.CharacterType = xlKatakana
'-------------------
'フリカナの入力
'-------------------
'市区郡
Range(Cells(1, 4), Cells(endr, 4)).Formula = "=PHONETIC(c1)"
Range("c1").Select
'区町村
Range(Cells(1, 6), Cells(endr, 6)).Formula = "=PHONETIC(e1)"
Range("e1").Select
'地名・字名・番地
Range(Cells(1, 8), Cells(endr, 8)).Formula = "=PHONETIC(g1)"
Range("g1").Select
End Sub
|
|