住所データがあります。「××市○○町1-2-3」。
ここで、「××市○○町」と「1-2-3」を別フィールドに分けたいと思っています。ACCESSまたはExcelのVBAまたは更新クエリ、文字列関数等で行う場合、どのようにすればよいか教えて下さい。なお、「××市○○町」と「1-2-3」の間には空白はありません。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

 


自前で文字列のマッチング等を行わなくても、Office (97以上?)にバンドルされている、「MSYubin7.dll」を使用すれば可能です。

サンプルコードですが、Accessで、以下の手順を踏み、

(1) レポートの新規作成ボタンを押下。
(2) はがきウィザードを選択。
(3) レポートを作成。

作成されたレポートのクラスモジュール内のAPI宣言部と「Sub DevideAddress」を見れば参考になると思います。

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町村名、町名、字名すべてを対応辞書と照合してマッチングできるようです。したがって、No.2のコメントで問題点として指摘した「漢数字で番地が記載されたデータ」にも対応できます。

問題点は、OfficeのヘルプにもMSDNにもドキュメントらしいドキュメントがないことです。
(上記ウィザードで生成されたコードにもコメントは皆無です)

もともと、参考URLの製品の機能の一部をMicrosoftにOEM提供したもので、Office製品の、いわば「おまけ」程度の位置付けですので、きちんとしたドキュメント、細かな機能が必要であれば、正規の製品版を購入した方がよいかもしれません。
(一度限りの単発仕事なら、そのためだけに買うのはちょっともったいない感じがしますが・・・)
 

参考URL:http://www.adv.co.jp/products/yu7v2/default.htm
    • good
    • 1
この回答へのお礼

nanashinogombei さん

ありがとうございました。お礼が遅れて申し訳ありませんでした。

Sub DevideAddress(stFullAdd As String, stAdd1 As String, stAdd2 As
。。。
End Sub

助かりました。

お礼日時:2003/03/17 13:57

回答ではありませんが、私も以前このような状況になりました。

アクセス・エクセルではできなかったので、筆まめで解決しましたよ。筆まめに読み込んで、さらにCSVで保存するのですが、保存時の指定で「県」や「番地」を区切ることが出来るので。
    • good
    • 0
この回答へのお礼

non 23 さん

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

お礼日時:2003/03/10 17:45

 AccessもVBAもよく知らない者がこの質問に回答していいものかどうかわからないけど、とりあえず回答してみます。

参考になれば幸いです。

 私はデータベースソフトに「桐」を使っています。Accessなんかよりずっと敷居が低くて、Excelの代わりにも使えます。
 それで、ご質問の問題解決はいとも簡単です。たぶん10分もかからないんじゃないかな。

 「桐」を使った場合の考え方はこうです。
 まず、住所文字列の中で番地はすべて半角文字から始まっていると仮定します。それと、番地までの市町村名他には半角文字が使われていないと仮定します。
 それでいくと、住所の文字列の先頭から調べて、半角文字があれば、先頭から何バイト目にあるかを返します。
 この数字を基に、先頭からこの数字の手前までなら「市町村名他」。この数字以降なら「番地」としてフィールドを分けることができます。
 使うべき桐の関数は、#IS半角と#部分列だけですね。「桐」には文字列関数がたくさん揃っているので、ほとんど対話式で仕事を進められます。便利すぎて、いつまで経ってもAccessもVBAも覚えられないです。

 たぶん、AccessやVBAでも可能なんだろうけど、ポイントは、半角文字を捜してその位置を返す関数ですね。

 余計なお世話かもしれないけど、「桐」のURLを記します。90日以内ならタダで使えるようになっています。

参考URL:http://www.k3-soft.com/kiri9/index.html
    • good
    • 0
この回答へのお礼

whitepepper さん

ありがとうございました。「桐」をダウンロードして試用版を触ってみましたが、
慣れれば易そうですが、う~む、ちと時間がかかりそうです。

それでも、とてもよい参考になりました。もう少しがんばってみます。

お礼日時:2003/03/07 11:59

すべてのデータが「○○町1-2-3」であるなら、


たとえば、A列に
府中市新町5-44-35

西東京市田無町12-6-7

なら、B列に
=LEFT(A1,FIND("町",A1,1))
C列に
=MID(A1,FIND("町",A1,1)+1,10)
とすれば取り出せます。



「町」がつかない場合は、エラーになります(#VALUE!)
たとえば、  多摩市落合8-35-7

また、市に「町」がつく場合、たとえば、
町田市森野8-28-14   町  田市森野8-28-14
のようになってしまいます。
    • good
    • 0
この回答へのお礼

telescope さん

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

お礼日時:2003/03/07 11:23

残念ながら、完全に解決できる方法はないと思います。


一応、左から最初の数字の位置で切り出せば、らしい形が得られるとは思いますが、漢数字で番地を標記したデータが混在していた場合、お手上げです。
(全角の数字にも要注意ではありますが、こちらは漢数字とは違い、対応は可能です)

まあ、それでも上手く工夫すれば手作業でデータを整理するよりは大幅に作業負担を軽減できるのは間違いないので、やってみる価値はあるかもしれません。(データの品質によりけりでしょうけれど)

# Access や Excel より、正規表現の使用できるエディタ等を使用した方がよいかもしれません。
# (VBAでもできるとは思いますが、ちょっと面倒そうな気がする・・・)
    • good
    • 0
この回答へのお礼

nanashinogombei さん

ありがとうございます。やはり完全には難しいですか。。。
地道に切り出しを繰り返して見たいと思います。

お礼日時:2003/03/07 11:24

過去ログですが、ほぼ同じ質問ですので、参考になると思いますが・・・



参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=447179

この回答への補足

>akubihime212さん
早速のご回答ありがとうございました。
教えていただきましたログを見てみましたが、残念なことに「市区町村」と「番地」の双方のデータを活かしたいのです。また、件数がかなり多いので。。。
半角でも空白が入っていれば。。。と悔やんでいるのですが。。。

補足日時:2003/03/06 20:07
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS 住所の分割について

ACCESS初心者です。

ACCESS2003を使用しています。

スペースで区切られた住所を分割し、表示しようとしているのですが行き詰まっています。
皆さんのお力をお借りしたく質問させていただきます。

現状は次の通りです。

テーブルのフィールドに2通りの住所が混在しています。

【パターン1】 ○○○○○ △△△△ とマンション名などがスペースで区切られたもの。
【パターン2】 ○○○○○ とマンション名などがないもの

クエリを使って「住所1」と「住所2」に分割しようと思い、演算フィールドにそれぞれ下記のように記入をしました。

住所1: Left([住所],InStr(1,[住所]," ")-1)
住所2: Mid([住所],InStr(1,[住所]," ")+1)

上記のように設定をしましたが、「住所1」と「住所2」にはそれぞれ下記の通り表示をされます。

【パターン1】 「住所1」に○○○○、「住所2」に△△△△ と正常に表示
【パターン2】 「住所1」には#エラー、「住所2」に○○○○ と表示

いろいろと試行錯誤しましたが、どうしてもうまくいきません。
VBAを使ったことがないので、出来れば使わずに設定できる方法をご教示いただければと思います。

よろしくお願い致します。

ACCESS初心者です。

ACCESS2003を使用しています。

スペースで区切られた住所を分割し、表示しようとしているのですが行き詰まっています。
皆さんのお力をお借りしたく質問させていただきます。

現状は次の通りです。

テーブルのフィールドに2通りの住所が混在しています。

【パターン1】 ○○○○○ △△△△ とマンション名などがスペースで区切られたもの。
【パターン2】 ○○○○○ とマンション名などがないもの

クエリを使って「住所1」と「住所2」に分割しようと思い、演算フィールドにそれぞれ下記の...続きを読む

Aベストアンサー

> 住所1: Left([住所],InStr(1,[住所]," ")-1)
> 住所2: Mid([住所],InStr(1,[住所]," ")+1)



住所1: Left([住所],InStr(1,[住所] & " "," ")-1)
住所2: Mid([住所],InStr(1,[住所] & " "," ")+1)


とするとどうなりますか?
つまり、InStr する時には、必ず " " (空白)が存在するようにします。

※ 上記は LEFT のエラーをなくすもので、
Mid の場合は文字数以降のところから全部・・・・しても、エラーにはならないようです。


※ 不都合あれば修正してください。

QExcelで住所を2つ(町名迄と番地以降)に分けるには?

お世話になります。
Winxp、Excel2003を使用しています。
以下のような住所データがあります。
これを、町名迄と番地以降の2つのセルに分けるには、どうすれば良いでしょうか?よろしくお願いします。

セルA1に東京都小平市東町5-8-15
      ↓  
セルA2には東京都小平市東町
セルA3には5-8-15
としたい。

Aベストアンサー

こんにちは~

A2セルに
=LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1)

A3セルに
=SUBSTITUTE(A1,A2,"")

と入れてみてください。

Q住所から市町村名を取り出す

access2003 Win-XP

住所禄の住所の項目があります。その住所から市町村名を取り出す。

住所           市町村名
○○県XX市      XX市
○○県△△市    △△市
□□県**市    **市

こんな感じで、クエリでできるでしょうか?
取り出す市町村名は、特定の限定した町村で、それ以外は無しでいいです。

Aベストアンサー

途中から失礼します。

特定の5市町村なら、Switch関数でいいかと。
例えば、

> 住所           市町村名
> ○○県XX市      XX市
> ○○県△△市    △△市
> □□県**市    **市

で、それ以外は、その他なら、クエリのフィールドに下記の式を設定すればいいでしょう。

市町村名: Switch([住所]="○○県XX市","XX市",[住所]="○○県△△市","△△市",[住所]="□□県**市","**市",True,"その他")

市町村以降の住所(地番等)も入力されているなら、Like演算子を使って、

市町村名: Switch([住所] Like "○○県XX市*","XX市",・・・・)

市区町村がもっと多かったり、抽出対象の変更がたびたびあるなら、
下記のような変換テーブルを作成して、

住所変換
元住所    市町村名
-----------------------
○○県XX市 XX市
○○県△△市 △△市
□□県**市 **市
・・・・・  ・・・

クエリのフィールドに下記のように設定します。

市町村名: Nz(DLookup("市町村名","住所変換","'" & [住所] & "' Like [元住所] & '*'"),"その他")

途中から失礼します。

特定の5市町村なら、Switch関数でいいかと。
例えば、

> 住所           市町村名
> ○○県XX市      XX市
> ○○県△△市    △△市
> □□県**市    **市

で、それ以外は、その他なら、クエリのフィールドに下記の式を設定すればいいでしょう。

市町村名: Switch([住所]="○○県XX市","XX市",[住所]="○○県△△市","△△市",[住所]="□□県**市","**市",True,"その他")

市町村以降の住所(地番等)も入力されているなら、Like演算子を使って、

市町村名: Swi...続きを読む

QAccessで名前の間のスペースを削除したいのですが

Accessで名前の間のスペースを削除したいのですが

Aベストアンサー

細かい状況が分かりませんがAccessではReplace関数というものが使用できます。
例えば 鈴木 太郎 のようなデータがテーブルの氏名フィールドに入っている場合には、更新クエリーで次のように更新すれば間のスペースを除去できます。
Replace([氏名]," ","")

Replace関数は文字列中のある文字を別の文字に置き換える関数ですが、この例では全角スペースを""(空文字列=文字なし)に置き換えています。

QACCESSで都道府県の抽出

ACCESSで住所録の住所フィールドから都道府県を抽出し、同じテーブルの都道府県フィールドに入れたいのですがどのようにしたら良いのでしょうか?

Aベストアンサー

住所録を元に更新クエリを作ります。
住所録の都道府県だけのフィールドのクエリを作りクエリを更新クエリにします。
クエリのレコードの更新の欄に下記をコピーします。(住所フィールドが住所で良ければ違えば正しいフィールド名にしてください。)

IIf(InStr([住所],"都")>0,Mid([住所],1,InStr([住所],"都")),IIf(InStr([住所],"道")>0,Mid([住所],1,InStr([住所],"道")),IIf(InStr([住所],"県")>0,Mid([住所],1,InStr([住所],"県")),IIf(InStr([住所],"府")>0,Mid([住所],1,InStr([住所],"府"))))))

これで終わりです。クエリを保存してクエリを開けば全て住所から都道府県を抜き出し都道府県に書き込んでくれます。
試しに住所録の選択クエリに上記をコピーして試してみてください。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QExcelで1セル内の住所を市郡町街と丁目以下の地番等に分離する方法は?

Sheet1のA列に例えば群馬県内の住所のリストがあります。(架空の住所です。)
前橋市池端町3-2-21……(セルA1)
桐生市黒保根町水沼7-3-5
高崎市大沢町1-18-204
沼田市佐山町8-6-5-402
勢多郡北橘村下箱田396
多野郡吉井町岩井27-5
以下1,000件程度

Sheet2のA1:B1538に郵政公社からダウンロードした群馬県内の郵便番号一覧表があり、A列に市郡町街大字等、B列に対応する郵便番号があります。(名前定義を仮に「〒」とします)

Sheet1の住所の郵便番号を検索する必要がありますが、そのためには住所の丁目地番より左の部分(市郡町街大字等)を分離しなければなりません。
これをマクロを使わずに1個の計算式で表示したいといろいろ工夫しましたが、どうもいい知恵が浮かびません。仕方なく一旦B列(B1)に
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,9,1),8,1),7,1),6,1),5,1),4,1),3,1),2,1)
という長たらしいネスト式を使って「2~9」の数値をすべて「1」に置き換え、
C列(C1)に =LEFT(A1,FIND(1,B1)-1)
と計算式を入れて市郡町街大字等を抽出し、D列(D1)に
VLOOKUP(C1,〒,2,FALSE) と入れてようやく郵便番号を検索しております。
結果としてはこれで正しい答は出るのですが、標準搭載の関数だけで(マクロを使わずに)何かもっと簡単な方法がありはしないかという気がしてなりません。
ご存知の方があればどうか教えてください。(OS等はWinMe→Excel2000Proです。)

Sheet1のA列に例えば群馬県内の住所のリストがあります。(架空の住所です。)
前橋市池端町3-2-21……(セルA1)
桐生市黒保根町水沼7-3-5
高崎市大沢町1-18-204
沼田市佐山町8-6-5-402
勢多郡北橘村下箱田396
多野郡吉井町岩井27-5
以下1,000件程度

Sheet2のA1:B1538に郵政公社からダウンロードした群馬県内の郵便番号一覧表があり、A列に市郡町街大字等、B列に対応する郵便番号があります。(名前定義を仮に「〒」とします)

Sheet1の住所の郵便番号を検索する必要がありますが、その...続きを読む

Aベストアンサー

=LEFT(A1,LENB(A1)-LEN(A1))
でどうでしょうか?
A1で言えば"3-2-21"と削除するべき部分が1バイト文字になっていますので、バイトで文字数を数えた時の長さを文字数で数えた時の長さを引けば、
2バイト文字で構成される文字の長さがでます。

Q住所の登録をしたいのですが、「番地以降」という枠があるのですが、この枠に番地を書くのでしょうか?

それともこの枠の前の枠にかくのでしょうか?

すごい初歩的な質問ですみません。

以降というのは含むのでしたでしょうか?
それとも含まないのでしたでしょうか?

市区町村 「 」
番地以降「 」

というような感じです。

Aベストアンサー

#2です。
「市区町村」の「町」とは、「○○郡××町」の「町」のことです。
例えば以下のような住所の場合。

横浜市横浜区横浜本町1丁目23-4 横浜マンション567号
※実在しない住所です

この場合は、「市区町村」欄には「横浜市横浜区」まで。
そして「番地以降」には「23-4 横浜マンション567号」。

斯様に欄がこの2つしかないとしたら、町丁名=「横浜本町1丁目」を書く欄がないんですよ・・・書類自体に欠陥がありますね。
書類の提出先に問い合わせた方が良いですよ、これ。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QPHPの正規表現で住所を分けるには?

住所を郡市町村までと、それ以降に分けたいと考えています。


preg_match('/(.*)(郡|市|町|村)(.*)/',$text,$match);

$address1 = $match[1].$match[2];
$address2 = $match[3];


住所の最初に出てきた郡市町村にマッチさせるにはどうしたら良いのでしょうか?

正規表現の勉強に役立つサイトもあれば教えて下さい。

Aベストアンサー

>住所の最初に出てきた郡市町村にマッチさせる

ちなみにこれだけなら最短マッチ.*?をつかいます

<?PHP
$pattern='/(.*?(?:郡|市|町|村))(.*)/';
$str="東京都多摩市本多摩1-1";
preg_match($pattern,$str,$match);
print_r( $match);
$str="東京都町田市元町田1-1";
preg_match($pattern,$str,$match);
print_r( $match);
?>


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報