• 締切済み

住所から「区」を抜き出すには

いつもお世話になっています。 Excelで「区」を抽出する関数を教えていただけませんでしょうか。 幾つか調べましたが、参考にしながらも上手く作る事ができませんでした。 神奈川県川崎市幸区●●●●●123456 ⇒ 幸区 東京都港区●●●●●●123456 ⇒ 港区 そして、市があって区が無い場合は「市」を抽出したいです。 神奈川県大和市●●●●●●123456 ⇒ 大和市 よろしくおねがいいたします。

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.10

No4の方の 全国の市町村コード一覧 http://citycode.fmd4.com/home を利用してみました。 Sheet2に上記サイトのデータを貼り付け 市町村名にある空白を置き換えの機能で削除 画像にあるようなデータにします。 A列に住所があるとして B列に 県名を表示する式 =IF(MID(A2,4,1)="県",LEFT(A2,4),LEFT(A2,3)) 県名を表示させるのは簡単です。 C列に市町村名を表示させるにはSheet2の市町村名のデータを利用して =MID(A2,LEN(B2)+1,MAX(IF(COUNTIF(Sheet2!D:D,LEFT(REPLACE(A2,1,LEN(B2),""),COLUMN(A1:H1)))>0,COLUMN(A1:H1),0))) と入れて Ctrl+Shift+Enter で決定させて B、C列を下までコピーします。

回答No.9

こんばんは。 私のほうは、正規表現でやってみたつもりが、全国レベルになるとうまくいかないものが出てきて、結局、個別処理なんていう方法を取らざるを得ませんでした。とても、褒められたコードではありませんが、せっかくエラーのでないレベルに達したもので、公開しておきます。一応、このコードの味噌は、最長マッチと最短マッチの妙ですね。 ただし、  東京都利島村利島村一円 等の島で、村が最初に来るもの対応していません。 '// Sub Test1()  Dim s As Long, k As Long, g As Long, kn As Long, s2 As Long, d As Long, m as Long, t as Long  Dim c As Range  Dim buf As String  Application.ScreenUpdating = False  With CreateObject("VBScript.RegExp")   For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))    buf = c.Value    buf = SpecialArrange(buf, c)    g = InStr(buf, "郡"): s = InStr(buf, "市")    k = InStr(buf, "区"): kn = InStr(buf, "県")    d = InStr(buf, "北海道"): s2 = InStr(s + 1, buf, "市")    m = InStr(buf, "町"): t = InStr(buf, "都")        If (k > 0 Or t > 0) And s2 = 0 And m = 0 And s = 0 And (s - k = 1 Or g - k = 1 Or s - k > 1) Then     .Pattern = "[都道府県](.*[区市])"    ElseIf g > 0 And g - kn > 1 And g - d > 1 And g - s > 1 And s2 = 0 And s * g <> 0 And s < g Then     .Pattern = "[都道府県]([^市]*[市])"    ElseIf g > 0 And g - kn > 1 And g - d > 1 And (s = 0 Or g - s > 1) Then     .Pattern = "[都道府県]([^郡]*[郡])"    ElseIf g > 0 And s > 0 And s - g = 1 Then     .Pattern = "[都道府県](.+市)" '蒲郡市    ElseIf g > 0 And s > 0 And g - kn > 1 And (g > d) And (g < s Or g < s2) Then     .Pattern = "[都道府県]([^郡].*郡)"    ElseIf g > 0 And k = 0 And s - kn = 1 Then     .Pattern = "[都道府県](.*市)" '市原市    ElseIf s2 > 0 And k = 0 And s - kn = 1 Then     .Pattern = "[都道府県](市[^市]*市)" '市原市    ElseIf g > 0 And k = 0 And g - kn > 1 And s < g Then     .Pattern = "[都道府県]([^市].*市)"    ElseIf g > 0 And k = 0 And g - kn > 1 Then     .Pattern = "[都道府県]([^郡市町].*[郡市町])"    ElseIf g > 0 And g - kn = 1 Then '郡山仕様     .Pattern = "[都道府県]([^市町]*[市町])"    ElseIf (d > 0 Or k > 0) And s > 0 And s2 = 0 And g = 0 Then     .Pattern = "[都道府県](.*市)"    ElseIf s2 - s = 1 Then     .Pattern = "[都道府県]([^市]+市市)" '野々市    ElseIf s2 - s = 1 Then     .Pattern = "[都道府県]([^市].*市)"    ElseIf s > 0 And s2 > 1 And m = 0 And s2 - s > 1 And s - kn > 1 Then     .Pattern = "[都道府県]([^市]*市)"    ElseIf s > 0 And m = 0 And (s2 - s > 1 Or s2 = 0) And s - kn > 1 Then     .Pattern = "[都道府県]([^市].*市)"    ElseIf s > 0 And m > 0 And s - kn > 1 Then     .Pattern = "[都道府県]([^市]*市)"    ElseIf s2 > 0 Then     .Pattern = "[都道府県](.*市)"    ElseIf g = 0 And k > 0 Then     .Pattern = "[都道府県]([^区].*区)"    ElseIf g > s Then     .Pattern = "[都道府県]([^郡].*郡)" '余市郡    ElseIf InStr(c.Value, "利島村") = 0 Then     .Pattern = "[都道府県]([^郡市町区].*[郡市町区])"    Else    'unfixed    End If    .Global = True    On Error Resume Next    If .Test(buf) Then     With .Execute(buf)(0)      buf = .SubMatches(0)      c.Offset(, 1).Value = buf     End With    End If    If Err.Number > 0 Then c.Offset(, 1).Value = ""    On Error GoTo 0   Next c   Application.ScreenUpdating = True  End With End Sub Function SpecialArrange(buf As Variant, rng As Range)   '個別対応    If InStr(buf, "市市場") > 0 Then     buf = Replace(buf, "市市場", "市")    ElseIf InStr(buf, "今市市") > 0 Then     rng.Offset(, 1).Value = "今市市"     buf = ""    ElseIf InStr(buf, "余市町") > 0 And InStr(buf, "郡") = 0 Then     rng.Offset(, 1).Value = "余市町"     buf = ""    ElseIf InStr(buf, "郡市") > 0 Then '栃木県芳賀郡市貝帳     buf = Mid(buf, 1, InStr(buf, "郡市"))    ElseIf InStr(buf, "四日市市") > 0 Then '奈良県大和郡      rng.Offset(, 1).Value = "四日市市"      buf = ""    ElseIf InStr(buf, "市市野") > 0 Then '佐渡市市野沢     buf = Mid(buf, 1, InStr(buf, "市市"))    ElseIf InStr(buf, "市市") > 0 Then '佐渡市市野沢     buf = Mid(buf, 1, InStr(buf, "市"))    ElseIf InStr(buf, "市郡中") > 0 Then '郡中新田     buf = Replace(buf, "市郡中", "市")    ElseIf InStr(buf, "臼杵市市浜") > 0 Then '臼杵市     buf = Replace(buf, "臼杵市市浜", "臼杵市")    ElseIf InStr(buf, "大和郡") > 0 Then '奈良県大和郡      buf = Mid(buf, 1, InStr(buf, "大和郡") + 2)    ElseIf InStr(buf, "四日市市市場") > 0 Then '奈良県大和郡      buf = Replace(buf, "四日市市市場", "四日市市")    End If   SpecialArrange = buf End Function

  • weboner
  • ベストアンサー率45% (111/244)
回答No.8

VLOOKUPで拾える一覧表作ってみました No4で提示した市町村コード表をコピーして http://citycode.fmd4.com/home 新規ブックsheet1のA1セルに貼り付けた後に下記マクロを実施してください Sub sample() Sheets("Sheet1").Range("A1").Select Rows("1:4").Select Selection.Delete Shift:=xlUp Columns("A:C").Select Range("C1").Activate Selection.Delete Shift:=xlToLeft Columns("C:C").Select Selection.Delete Shift:=xlToLeft Columns("B:B").Select Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True Range("D1").Select ActiveCell.FormulaR1C1 = "=RC[-3]&RC[-2]&RC[-1]" Range("D1").Select Selection.AutoFill Destination:=Range("D1:D1935") Range("D1:D1935").Select Range("E1").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],5)" Range("F1").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],8)" Range("G1").Select ActiveCell.FormulaR1C1 = "=IF(ISERROR(FIND(""区"",RC[-4])),RC[-5],RC[-4])" Range("E1:G1").Select Selection.AutoFill Destination:=Range("E1:G1935") Range("E1:G1935").Select Range("H1").Select ActiveCell.FormulaR1C1 = _ "=SUMPRODUCT((RC[-7]&RC[-1]=R1C1:RC[-7]&R1C7:RC[-1])*1)" Selection.AutoFill Destination:=Range("H1:H1935") Range("H1:H1935").Select ActiveWindow.SmallScroll Down:=-12 Range("H1").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$H$1935").AutoFilter Field:=8, Criteria1:="1" Range(Selection, Selection.End(xlDown)).Select Range("E1:H1934").Select Range("H1").Activate ActiveWindow.SmallScroll Down:=-177 Selection.Copy Sheets("Sheet2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("D:D").Delete Shift:=xlToLeft End Sub sheet2に一覧表ができますので セル範囲 A1:C1358 に表5 セル範囲 B1:C1358 に表8 と名前を定義してください =IFERROR(VLOOKUP(LEFT(住所,8),表8,2,0),VLOOKUP(LEFT(住所,5),表5,3,0)) これで抽出可能になるはずです 今後市町村合併等があっても最新の市町村コード表から対応表を作り直せば、対応可能かと思われます

  • weboner
  • ベストアンサー率45% (111/244)
回答No.7

No4です、ちょいと補足 全国的に見ると 北海道余市町 山形県東村山郡 山形県西村山郡 山形県北村山郡 千葉県市原市 千葉県市川市 東京都町田市 東京都東村山市 東京都武蔵村山市 新潟県十日町市 福島県郡山市 群馬県北群馬郡 長野県大町市 広島県廿日市市 愛知県四日市市 ↑ 思いつくところをざっと上げてみた まだあるかもしれないけど この辺りの市町村郡の文字が含まれている市町村群の扱いをどう処理するか 市と区のみの抽出まで進んだところで、止まってしまった =IFERROR(MID(E5,MAX(4,IFERROR(FIND("市",E5),0)+1),FIND("区",E5)),MID(E5,(MID(E5,4,1)="県")+4,FIND("市",E5,5)-(MID(E5,4,1)="県")-3))

回答No.6

若干の手直しが必要かもしれませんけど、こちらで試してみたら? 住所を分割する http://menushowdelay.blog.fc2.com/?no=525

noname#204879
noname#204879
回答No.5

[No.1補足]へのコメント、 》 その場合は、空白にする事はできますでしょうか? そのこと自体は簡単だけど、下記のような実在する住所の場合にも対応させなきゃならんとすると、私にはお手上げです。 北海道河東郡音更町柳町南区 北海道河西郡更別村旭区 福井県坂井市春江町為国中区 兵庫県多可町中区 岡山県岡山市南区北七区

  • weboner
  • ベストアンサー率45% (111/244)
回答No.4

ネット上にはこんなものがあります 全国の市町村コード一覧 http://citycode.fmd4.com/home こういった物をうまく使うとやりやすいでしょう 例えば"市"だけで探そうとすると千葉県市原市とか市川市とかは変なところで区切られてしまう 一覧表を作ってVLOOKUP関数で拾い出すとか 何かしらの規則性を見つけ出すとか 東京都の場合であれば6文字目まで取れば区別は付きそうですね 直接の回答にはなっていません、あしからず

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.3

・四日市市の場合最初の”市”で四日市と判定するので無理

回答No.2

Q、「区」を抽出する関数? A、ほとんど不可能。 一度、そういう関数の作成に挑戦したことがあります。 Step1、全国の地名を郵便番号一覧で調査・分析。 まず、ここで・・・。 都郡市山市 などの例外的サンプルを抽出することから。結果、相当に、この類の地名・住所が存在することが判明。 【結果】郵便番号簿解析ツールを利用するのが一番確実。

noname#204879
noname#204879
回答No.1

》 市があって区が無い場合は「市」を抽出したい 市も区もない場合は、どうするどうする?

lanlanlan1122
質問者

補足

mike_gさん ありがとうございます。市も区もない場合があるのですね。身近になかったので想定すらしていませんでした...。 その場合は、空白にする事はできますでしょうか?よろしくお願いいたします。

関連するQ&A

  • EXCELで 文字列に一致しない場合の合計

    以下の表からEXCELの関数でA列から「東京都」の文字列を含む場合のB列の合計値と含まない場合のB列の合計値を出す関数を教えてください。 A      B 東京都港区 200 東京都北区 124 東京都大田区 100 横浜市緑区 99 川崎市幸区 90

  • 住所の一部が合致する場合を抜き出して番号をつけたいのですが、 可能でしょうか。

    エクセルで、 住所の一部が合致する場合を抜き出して番号をつけたいのですが、 可能でしょうか。 具体的には、 住所リスト: 東京都港区台場~ 東京都葛飾区立石~ 東京都荒川区荒川~ 神奈川県横浜市西区~ 埼玉県さいたま市~ 上記に対し、 東京都港区=3番 東京都荒川区=4番 埼玉県さいたま市=5番 と一部が合致する値に番号をつけたいのです。 Vlockupでうまくいかないのですが、 教えていただけないでしょうか。 とても困っています。 何卒、よろしくお願いいたします。

  • 東京都町田市について

    町田市をご存知でしょうか。 町田市は東京都多摩地域の市ですが、 まわりを神奈川県相模原市・川崎市・横浜市・大和市や 東京都八王子市・多摩市に囲まれており、 地理的にも大きく神奈川県の区域に食い込んだ地形になっています。 さて、本題ですが 神奈川県とも結び付きが非常に強い町田市が何故東京都に属しているのでしょうか? 町田市に長い間住んでいた者(今は違うのですが)としていつも気になっていました。 もし良ければ総合科の課題にしたいのですが。

  • ゴルフボールの名入れについて(検索済み)

    地域のところか迷ったのですが、こちらに詳しい方が多いかと思い書き込みさせていただきます。 お得意様に名前入りゴルフボールをプレゼントしたいのですが、どこのSHOPがお勧め&早く対応してくれるでしょうか? Webで調べると早いところで1週間もかかるのですが、そんなものなのでしょうか? 希望する地域は下記です。 東京都 港区/目黒区/品川区/大田区 神奈川県 川崎市川崎区/幸区 横浜市(横浜駅周辺) よろしくお願いします。

  • 東京都港区or千葉県我孫子市or神奈川県川崎市について・・・

    質問です。 『東京都港区』、『千葉県我孫子市』、『神奈川県川崎市』では、どこが住みやすいでしょうか? 治安、子育て、買い物などの便利性を考慮しています。 どうか教えて下さい。

  • エクセルで住所録管理データベースで

    エクセルで住所録管理データベースで (例) C列         D列 東京都台東区上野   1-234-1 神奈川県横浜市山手  2-84-6 埼玉県草加市弥勒   51-98 と入力されてますが A列にC列から 県名を抽出 B列に市・区名を抽出を 関数を使ってできないでしょうか? 又、C列の県名と市・区名を消したいのですが

  • 住所を市郡区町村名で分けたい

    エクセル2000を使用しての住所入力です。 住所を都道府県・市郡区町村名・以降番地で分けたいのです。 例えば 東京都港区赤坂なら 東京都 港区 赤坂 愛知県名古屋市中区栄なら 愛知県 名古屋市中区 栄 愛知県豊田市トヨタ町なら 愛知県 豊田市 トヨタ町 長野県北佐久郡軽井沢町軽井沢なら 長野県 北佐久郡軽井沢町 軽井沢 というふうにです。 都道府県を過去の質問を参考にして、 関数を使用して分けることはできました。 その後はどのようにしたらいいでしょうか。 どなたか教えて下さい。

  • エクセルの配列

    エクセルの配列を使用しての関数がうまく出来なくて困っています。    A   B  C 1  1  1  東京都墨田区 2  1  1  東京都神奈川区 3  1  2  東京都杉並区 4  1  2  神奈川県横浜市 5  1  3  神奈川県川崎市 6  1  3  東京都多摩市 7  2  1  岩手県 8  2  1  大阪府 9  3  2  兵庫県 10  3  2  京都府 と並んでいます。 ここでA列=1 且つ B列=1又はB列=2 且つ C列が"東京都"という文字を含んでいる の総計を計算したいのですが(上の状態ならば「3」) {=SUM(SUMPRODUCT(IF(A1:A10=1,1,0))*(IF(OR(B1:B10=1,B1:B10=2),1,0))*(ISNUMBER(FIND("東京都",C$1:C10))))} と関数を入れても正しい値が出ません。どこがおかしいのでしょうか? 作業列を使わずに求めたいです。 どなたかご教授宜しくお願いします。

  • Excel2010 住所5分割

    東京都豊島区東池袋3丁目1番1号 東京都八王子市子安町4丁目10番15号 神奈川県川崎市高津区明津12番地メゾン美鈴 とある住所を「都道府県」「市区町村郡」「通称名」「○丁目」「番地ビル」 のように分割したいです。  M列     N列      O列     P列      Q列    都道府県  市区町村郡    通称名    丁目      番地 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 「東京都」 「豊島区」   「東池袋」  「3丁目」  「1番1号」 「東京都」 「八王子市子安町」      「4丁目」  「10番15号」 「神奈川県」 「川崎市高津区」 「明津」      「12番地メゾン美鈴」 5万近く件数があり手作業では無理なので、関数かVBAで出来れば助かります。 都道府県とそれ以降の分割しかわかりません。 宜しくお願いします。

  • セルに入っている住所に都道府県名を加えたい

    あるセル(x)に住所が入っています。 その住所は都道府県から入っている場合もあるし、都道府県抜きの場合もあります。 都道府県の抜きの場合に、都道府県を入れて住所を編集し、別のセル(Y)にセットしたいです。 「港区、、、」であれば「東京都港区、、、」 「横須賀市、、、」であれば「神奈川県横須賀市、、、」 そんな感じです。 特定地域ですので、市町村名は限られています。 どんな風にエクセルを作成すれば良いでしょうか?

専門家に質問してみよう