プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。セル内に住所が入力してあり、その住所を元に地方公共団体コードをつけたいと思います。地方公共団体コードとは市区町村ごとに充てられた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列に区が含まれていたら、左から区の部分までをぬきだし、偽なら郡を探し、真ならば左から郡のところを抜き出し、偽なら市を探し、真ならば左から市のところを抜き出し偽ならば何もしない。
すごく、分かりづらいかもしれませんが・・・。ごめんなさい。
うまくいかないのですが、良い方法はありませんでしょうか?

A 回答 (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.h …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/14 15:04

ANo.4です。


抽出方法は既に答えてる方がいたので、最終的にどうしたいかで書き込みをしました。

団体名と地方公共団体コードの対応表は、既にあると思ったのが間違いの元ですね。
失礼しました。

団体名と地方公共団体コードの対応表が
・団体名が昇順に並んでいる
・町の場合の団体名が○○○郡XXX町で入力されている
この条件を満たせば、より少ない工数で目的が達成出来ると思ったのですが^^;
VLOOKUP(A1,D1:E999,2)で地方公共団体コード
VLOOKUP(A1,D1:E999,1)で団体名
住所の頭から団体名の文字数分と団体名を比較して、エラーを訂正

ま、私の場合でしたら、郵便番号を元に、地方公共団体コードを振るのを考えますが^^;

この回答への補足

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

補足日時:2006/09/14 09:45
    • good
    • 0
この回答へのお礼

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

と言うのはfindなどの関数を使えばよいでしょうか?
ごめんなさい。本当に初心者なので・・・。

お礼日時:2006/09/14 09:57

#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文繰り返しより少しはマシでしょうか

この回答への補足

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

補足日時:2006/09/13 17:56
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/14 15:06

まあ、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

この回答への補足

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

補足日時:2006/09/13 17:55
    • good
    • 0

A列に元の住所(千代田区九段南1-6-11)が入っているとして


D列に団体名(千代田区)、E列に団体コード(131016)を入力し
団体コードを表示したいセルに、=VLOOKUP(A1,D1:E999,2)と入力すれば・・・

VLOOKUP(検索値,検索元範囲,結果となる列)

この回答への補足

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

補足日時:2006/09/13 17:49
    • good
    • 0

=IF(ISERROR(FIND("区",A1)),IF(ISERROR(FIND("郡",A1)),IF(ISERROR(FIND("市",A1)),"",LEFT(A1,FIND("市",A1))),LEFT(A1,FIND("郡",A1))),LEFT(A1,FIND("区",A1)))



 これで大丈夫だと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/14 09:49

こんな感じでしょうか



=IF(ISERROR(FIND("区",A1)),IF(ISERROR(FIND("郡",A1)),IF(ISERROR(FIND("市",A1)),"",LEFT(A1,FIND("市",A1))),LEFT(A1,FIND("郡",A1))),LEFT(A1,FIND("区",A1)))

でも「市川市」のような場合はうまくいかないと思いますよ。

この回答への補足

ありがとうございます!!!
もう一つお願いしたいのですが、私の最初の説明不足なのですが、"郡"の場合は抽出する文字列を郡ではなく"町"もしくは"村"でやりたいのですが、難しいでしょうか?

>でも「市川市」のような場合はうまくいかないと思いますよ。

仰るとおりです。その他にも「郡山市」や「四日市市」などあり、その辺は手作業で入力しようと思っています。

補足日時:2006/09/13 17:19
    • good
    • 0

うまくいかない…というのは


#Value!
が出てしまうと言うことですか?

この回答への補足

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

補足日時:2006/09/13 16:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!