![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.5ベストアンサー
- 回答日時:
[イミディエイト]
? CS("北海道旭川市山川町大字松田鎧町114番地", "道", 1, True )
北海道
? CS("北海道旭川市山川町大字松田鎧町114番地", "町", 2,,True)
大字松田鎧町114番地
"道"、"町"で区切られた文字の1番目と2番目を求めています。
従来のCutStr関数と違うのは、区切り子を含めて返すか否かを4番目の引数で指定できること。
従来のCutStr関数と違うのは、2番目以降の全てを連結して返すか否かの引数も5番目に指定できること。
これで、都道府県の抜き出しやOO市OO市OO市、OO町OO町パターンの住所に対応できます。
[イミディエイト]
? CutStr("北海道旭川市山川町大字松田鎧町114番地", "都,道,府,県", 1, True )
北海道
? CutStr("北海道旭川市山川町大字松田鎧町114番地", "都,道,府,県", 2, True )
旭川市山川町大字松田鎧町114番地道
そういうことで、上述のCS関数を内部的にコールする CutStr関数(先の CutString())も引数を増やしています。
これで、事前変換と事後変換の拙さを克服すれば、自在に住所を分割抽出できる筈です。
試しに、CutStr関数を用いて SplitAddress関数を作成してみます。
[イミディエイト]
? SplitAddress("北海道旭川市山川町大字松田鎧町114番地", 都道府県)
北海道
? SplitAddress("北海道旭川市山川町大字松田鎧町114番地", 市区郡)
旭川市
? SplitAddress("北海道旭川市山川町大字松田鎧町114番地", 町村)
山川町
? SplitAddress("北海道旭川市山川町大字松田鎧町114番地", 番地)
大字松田鎧町114番地
<エクセルシートの場合>
北海道旭川市山川町大字松田鎧町114番地___北海道<-------------------=SplitAddress(A1, 1)
北海道旭川市山川町大字松田鎧町114番地___旭川市<-------------------=SplitAddress(A2, 2)
北海道旭川市山川町大字松田鎧町114番地___山川町<-------------------=SplitAddress(A3, 3)
北海道旭川市山川町大字松田鎧町114番地___大字松田鎧町114番地<------=SplitAddress(A4, 4)
SplitAddress関数は、非常にシンプルなものです。
ですから、上述のテストと併せてそのコードを見れば新CutSTr関数の使い方は判ると思います。
※少々、長くなりましたので、新CutStr関数とSplitAddress関数は別回答とします。
No.4
- 回答日時:
問題点1、都道府県を抜き出せない。
(北海道=>北海)問題点2、OO市OO市OO市、OO町OO町への対応が困難。
問題点3、事前変換、事後変換の要領が拙い。
問題点4、CutStr関数、CutString関数と2つ用いる意味がない。
先の回答は、このように4つ程の問題点を含んでいました。
要は、余りにも完成度が低かったということです。
とりあえずお知らせしておきます。
No.3
- 回答日時:
福岡県糟屋郡新宮町桜山手_____新宮__新宮町桜山手
福岡県糟屋市新宮町桜山手_____新宮__新宮町桜山手
福岡県糟屋区新宮町桜山手_____新宮__新宮町桜山手
福岡県郡山郡新宮町桜山手_____新宮__新宮町桜山手
福岡県糟市川市新宮町桜山手__新宮__新宮町桜山手
福岡県糟市川市市田町桜山手__市田__市田町桜山手
=GetTown(A1)
=ReAltAddress(CutString(AltAddress(A1), "区,郡,市", 2))
町名と町名と字番地を抜き出してみました。
もちろん、上記の6つだけテストをしたに過ぎません。
そういうことで、信頼性は今一つです。
要は、単純にCutStr関数で抜き出すと’郡山’、"市川"、"市田"が邪魔します。
そこで、予めこれらを置換しておいて抜き出した後にも再置換して不具合を解消しています。
何とも原始的な手法ですが、まあ、<事足りればよし>じゃないですか?
最も簡単に抜き出す手法かと思います。
もちろん、事前置換と事後置換のデータセットは質問者の課題です。
Public Function GetTown(ByVal Text As String) As String
GetTown = ReAltAddress(CutStr(CutString(AltAddress(Text), "区,郡,市", 2), "町", 1))
End Function
Public Function CutStr(ByVal Text As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim strDatas() As String
strDatas = Split("" & Separator & Text, Separator, , 0)
CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
Public Function CutString(ByVal Text As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim I As Integer
Dim M As Integer
Dim strSeparator() As String
Dim strReturn As String
strSeparator() = Split(Separator, ",")
M = UBound(strSeparator())
For I = 0 To M
strReturn = strReturn & CutStr(Text, strSeparator(I), N)
Next I
CutString = strReturn
End Function
Public Function AltAddress(ByVal Text As String) As String
Text = Replace(Text, "郡山", "こおり山")
Text = Replace(Text, "市川", "いち川")
Text = Replace(Text, "市田", "いち田")
AltAddress = Text
End Function
Public Function ReAltAddress(ByVal Text As String) As String
Text = Replace(Text, "いち田", "市田")
ReAltAddress = Text
End Function
No.2
- 回答日時:
この手のソリューションは立派に万単位のお金を頂ける内容です。
しかしながら「住所分割」でググったら、結構出てきましたよ。
http://pc.nikkeibp.co.jp/pc21/tech/excel36/35/in …
http://www2.odn.ne.jp/excel/waza/function.html#S …
などがありました。
ご参考まで...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
住所で〜市〜町の場合丸をつけ...
-
セメント工場の立地条件について
-
住所に記されてある「大字」や...
-
住所に大字(おおあざ)って書い...
-
当町、貴町の読み方を教えて下...
-
十日町、八日町、六日町などの...
-
滋賀・加賀・伊賀・甲賀・佐賀....
-
日本橋蛎殻町ってなんて読むん...
-
日本で一番民度が低い地域はど...
-
木へんに母で何と読みますか
-
地アミって…??
-
六甲山中の地名の読み仮名
-
Google Earth 画面上のアイコン...
-
福島県いわき市の袖穢という地...
-
中国地名の英文表記
-
哈爾濱は、ハルピンとハルビン...
-
「中堤」って何ですか?読み方は「...
-
「渡辺」のたな・べ」か、「わ...
-
現在の登山者でわかる用語はあ...
-
首都圏のアイヌ語の地名について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報