• ベストアンサー

【Excel】住所から市区町村名を抜き出す方法

いつもお世話になります。セル内に住所が入力してあり、その住所を元に地方公共団体コードをつけたいと思います。地方公共団体コードとは市区町村ごとに充てられた6桁の数字です。 A列に住所が入力してあります。(県名は入力してありません。)次にB列に以下のような式を入力しました。 =if(find("区",a1),left(a1,find("区",a1)),if(find("郡",a1),left(a1,find("郡",a1)),if(find("市",a1),left(a1,find("市",a1)),"") A列に区が含まれていたら、左から区の部分までをぬきだし、偽なら郡を探し、真ならば左から郡のところを抜き出し、偽なら市を探し、真ならば左から市のところを抜き出し偽ならば何もしない。 すごく、分かりづらいかもしれませんが・・・。ごめんなさい。 うまくいかないのですが、良い方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#02です >、"郡"の場合は抽出する文字列を郡ではなく"町"もしくは"村"で =IF(ISERROR(FIND("郡",A1)),LEFT(A1,MAX(IF(ISERROR(FIND({"区","市"},A1)),0,FIND({"区","市"},A1)))),LEFT(A1,MAX(IF(ISERROR(FIND({"町","村"},A1)),0,FIND({"町","村"},A1))))) 完璧にはできませんが、IF文繰り返しより少しはマシでしょうか

wasamon
質問者

お礼

ありがとうございました。思っていた作業が出来るようになり、助かりました。本当に感謝いたします。

wasamon
質問者

補足

ありがとうございます。 本当に感謝します。目からウロコです。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • Nii
  • ベストアンサー率48% (79/162)
回答No.8

>郵便番号は全て入力 ゆうびんホームページより全国の郵便番号と住所の関連付けされたCSVファイルがダウンロードできます。 このCSVファイルには、全国地方公共団体コードも含まれていますので、有効的に活用すればいいかと。 ただ、私の場合は、Excelで無く、元の住所ファイル・郵便番号のCSVファイル両方をAccessに取り込んで、クエリを使用し確認しますので、その手順までは、ここでは説明しきれないかと^^; >住所の頭から団体名の文字数分と団体名を比較して、エラーを訂正 A 住所 B 住所に対応した方公共団体コード =VLOOKUP(A1,F1:G999,2) C 住所に対応した団体名 =VLOOKUP(A1,F1:G999,1) D エラーチェック =IF(MID(A1,1,LEN(C1))=C1,"","Error") E F 対応表の団体名 G 対応表の地方公共団体コード =IF(MID(住所が入ったセル,1,LEN(団体名を取得したセル))=団体名を取得したセル,"","Error")になります。 LEN(C1):C1のセルの文字数が取得出来ます MID(A1,1,LEN(C1)):A1のセルの頭(1文字目)からC1セルの文字数分を抜き出し IF(論理式,真の場合,偽の場合):抜き出した値と団体名が=だったら真、違っていたら偽を 論理式:MID(A1,1,LEN(C1))=C1 真の場合:空白("")を表示 偽の場合:"Error"を表示

参考URL:
http://www.post.japanpost.jp/zipcode/dl/kogaki.html
wasamon
質問者

お礼

ありがとうございました。CSVファイルをダウンロードしました。 これを元にアクセスにインポートして、現在アクセスでファイルを構成しなおしてます。本当に助かりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • Nii
  • ベストアンサー率48% (79/162)
回答No.7

ANo.4です。 抽出方法は既に答えてる方がいたので、最終的にどうしたいかで書き込みをしました。 団体名と地方公共団体コードの対応表は、既にあると思ったのが間違いの元ですね。 失礼しました。 団体名と地方公共団体コードの対応表が ・団体名が昇順に並んでいる ・町の場合の団体名が○○○郡XXX町で入力されている この条件を満たせば、より少ない工数で目的が達成出来ると思ったのですが^^; VLOOKUP(A1,D1:E999,2)で地方公共団体コード VLOOKUP(A1,D1:E999,1)で団体名 住所の頭から団体名の文字数分と団体名を比較して、エラーを訂正 ま、私の場合でしたら、郵便番号を元に、地方公共団体コードを振るのを考えますが^^;

wasamon
質問者

お礼

肝心なところをレスしてませんでした。 団体名と地方公共団体コードの対応表は、既にあります。団体名と地方公共団体コードも昇順で並んでいるんですが・・・。具体的に教えていただけないでしょうか? >住所の頭から団体名の文字数分と団体名を比較して、エラーを訂正 と言うのはfindなどの関数を使えばよいでしょうか? ごめんなさい。本当に初心者なので・・・。

wasamon
質問者

補足

回答ありがとうございました。 >間違いの元 とんでもないですよ!感謝いたします。 所で、郵便番号を元に、地方公共団体コードを振る・・・。 郵便番号は全て入力されてるのですが、良い方法があれば教えていただけないでしょうか?

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.5

まあ、Excelの関数を駆使すれば出来るようですが、かなり、ややこしいです。 チクッとVBAを組めば、かなり簡単になります。 例えば、次は CutAddress()を自作した場合です。 <A列>    <B列> 大田区太田町  大田区 太田郡太田町  太田郡 太田市太田町  太田市 市川市山川村  市川市 市川市市川村  市川市 B1=CutAddress(A1) でズズーッと! これで、上記のように抜き出されます。 (注意)郡に市が含まれないという前提。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String) As String   Dim I     As Integer   Dim N     As Integer   Dim strDatas() As String   Dim strCut   As String      strDatas = Split("" & Separator & Text, Separator, , 0)   N = UBound(strDatas()) - 1   For I = 1 To N     strCut = strCut & strDatas(I) & Separator     If I = 2 Then       Exit For     End If   Next I   CutStr = strCut End Function Public Function CutAddress(ByVal R As Range) As String   CutAddress = CutStr(R, "区") & CutStr(R, "郡") & CutStr(R, "市") End Function

wasamon
質問者

補足

ありがとうございます。 恥ずかしながら、VBAほとんど理解できないので・・・。使い方が良く分かりません(>_<) せっかく考えてくださったのに申し訳ないです。よろしければ、もう少しご教示願えないでしょうか?

すると、全ての回答が全文表示されます。
  • Nii
  • ベストアンサー率48% (79/162)
回答No.4

A列に元の住所(千代田区九段南1-6-11)が入っているとして D列に団体名(千代田区)、E列に団体コード(131016)を入力し 団体コードを表示したいセルに、=VLOOKUP(A1,D1:E999,2)と入力すれば・・・ VLOOKUP(検索値,検索元範囲,結果となる列)

wasamon
質問者

補足

ご回答ありがとうございます。 そうなんですよ!最終的にはそれをやるんですよ! 団体名を入力してると手間になるので、団体名を住所から簡単に抽出出来ればいいな・・・。と思ってるんですよ。

すると、全ての回答が全文表示されます。
noname#20023
noname#20023
回答No.3

=IF(ISERROR(FIND("区",A1)),IF(ISERROR(FIND("郡",A1)),IF(ISERROR(FIND("市",A1)),"",LEFT(A1,FIND("市",A1))),LEFT(A1,FIND("郡",A1))),LEFT(A1,FIND("区",A1)))  これで大丈夫だと思います。

wasamon
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

こんな感じでしょうか =IF(ISERROR(FIND("区",A1)),IF(ISERROR(FIND("郡",A1)),IF(ISERROR(FIND("市",A1)),"",LEFT(A1,FIND("市",A1))),LEFT(A1,FIND("郡",A1))),LEFT(A1,FIND("区",A1))) でも「市川市」のような場合はうまくいかないと思いますよ。

wasamon
質問者

補足

ありがとうございます!!! もう一つお願いしたいのですが、私の最初の説明不足なのですが、"郡"の場合は抽出する文字列を郡ではなく"町"もしくは"村"でやりたいのですが、難しいでしょうか? >でも「市川市」のような場合はうまくいかないと思いますよ。 仰るとおりです。その他にも「郡山市」や「四日市市」などあり、その辺は手作業で入力しようと思っています。

すると、全ての回答が全文表示されます。
回答No.1

うまくいかない…というのは #Value! が出てしまうと言うことですか?

wasamon
質問者

補足

回答ありがとうございます。 区の付いた住所は抽出できるんですがそれ以外は#Value!がでます。

すると、全ての回答が全文表示されます。

関連するQ&A