痔になりやすい生活習慣とは?

access2003 Win-XP

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

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

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

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

A 回答 (5件)

途中から失礼します。



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

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

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

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

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

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

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

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

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

市町村名: Nz(DLookup("市町村名","住所変換","'" & [住所] & "' Like [元住所] & '*'"),"その他")
    • good
    • 0
この回答へのお礼

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

思い通りにできました。感謝します。

お礼日時:2012/01/07 10:00

実験環境でうまく動かなかったのでしょうか。


それとも、そちらの本番環境でのお話?
そちらで作成した
SQL文とエラーの内容とテーブルのフィールド名も載せてください。

東区・北区はある意味で良い(悪い)例でした。
台東区・江東区・港北区・・・などもヒットしてしまいますね。。すみません。
実際の5市町村名は何かも教えてもらえますか。
その内容によっては最初のZipConv関数を利用せざるを得ないかもしれない。

Access2003なら多分動くのでは?その場合は
クエリのフィールド欄に
市町村:zipconv([住所],zcCty1) として、試してみてください。
うまく行ったら、抽出条件欄にその市町村名です。
番地表示以下は適当に存在しない値にして実際にどのような住所なのか
二三例も欲しいような気もします。
とりあえず、ここまで。
    • good
    • 0

5市区町村だけが対象でしたら地道にやってもいいかな。


下記は北区と東区を対象にした場合です。
参考にして五市区町村を加えてください。
ユニオンクエリですのでクエリをデザインビューではなく、SQLビューで開いて編集をします。

SELECT 住所,"北区"as 市区町村
FROM 住所録
WHERE 住所 Like '*北区*'
union all
SELECT 住所,"東区"as 市区町村
FROM 住所録
WHERE 住所 Like '*東区*'
union all
SELECT 住所, "その他" AS 市区町村
FROM 住所録
WHERE Not 住所 Like '*東区*' Or 住所 Like '*北区*';

※同名の市区町村が他都道府県にもある場合は×です。
ご参考までに。
    • good
    • 0
この回答へのお礼

ありがとうございます。

SELECT 住所, "その他" AS 市区町村
FROM 住所録
WHERE Not 住所 Like '*東区*' Or 住所 Like '*北区*';

の部分ですが、うまくできません。
構文を今一度教えてください。

お礼日時:2012/01/06 19:25

住所には番地は入力されていないのでしょうか



それなら簡単です。("県"のみが前提)
---
select
住所
,mid([住所], InStr([住所], "県") + 1) as 市町村名
from 住所禄
    • good
    • 0

三重県四日市市や千葉県市川市、長野県大町市などがありますので


『市町村』を頼りには抽出できない場合があります。
特定の市町村が少なければ、クエリの抽出条件に
Like *○○市*
like *▽*市
などと連ねて行けば出来るかも。

市町村名だけを抜き出す場合は冒頭の例が有りますので難しいと思います。
YU-TANG さんが解説されている、ZipConv 関数が使えるかと思います。
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
    • good
    • 0
この回答へのお礼

ありがとうございます。
住所の中に特定の市町村(5町村、それ以外は「他」)という感じで集計することが目的です。

Iff関数などの利用を考えたのですが

お礼日時:2012/01/06 10:52

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

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

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

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

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

Q【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列に区が含まれていたら、左から区の部分までをぬきだし、偽なら郡を探し、真ならば左から郡のところを抜き出し、偽なら市を探し、真ならば左から市のところを抜き出し偽ならば何もしない。
すごく、分かりづらいかもしれませんが・・・。ごめんなさい。
うまくいかないのですが、良い方法はありませんでしょうか?

Aベストアンサー

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

Q市区町村と番地を分けたいのですが。。。

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

Aベストアンサー

 
自前で文字列のマッチング等を行わなくても、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

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

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

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

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

単に「左から最初の数字の位置で文字列を切り出す」(No.2のコメント参照)のではなく、都道府県名、市区町...続きを読む

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初心者です。

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 の場合は文字数以降のところから全部・・・・しても、エラーにはならないようです。


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

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"...続きを読む

Q所在地の市区郡だけを表示させたい。エクセル関数

所在地の市区郡だけを表示させたい。エクセル関数
市区郡から●丁目まで表示している所在地データ(全国 約2000件)があります。
都道府県名の表示はありません。
このデータを東京都の23区26市4郡にそれぞれ分けるため、はじめに市区郡だけを表示させようと思い、
LEFT関数とIF関数等を考えましたが、市区郡までの文字数が違っており、混乱しています。
お手数ですが、ご教授願います。

Aベストアンサー

全国2000件の住所データから、東京都の区市郡に属するものを探し
てそれぞれ区別できるマーキングをしたいということで、該当する
区市郡だけを抜き出して表示するような列を作れればいいですね。
そうすれば後は並べ替えてチョイチョイですから。

まずは、抽出したい区市郡名の一覧表を用意して下さい。五十音順
に並んでいる必要はありません。「一覧」と名前を定義したことに
します。

住所データからleft関数で何文字か取り出して、一覧に一致したら
ビンゴなんですが、何文字抜き出せばいいのか判りませんね。一番
短いのが北区の2文字、長いのは武蔵村山市やあきる野市の5文字で
一定しません。そこで、2文字から5文字抜き出した配列を作り、そ
れぞれ一覧で検索して一致するものが見つかった一番長い文字数を
採用することにします。たとえば「国分寺市戸倉1丁目」という住所
から{国分;国分寺;国分寺市;国分寺市戸}という配列が出来て、それ
をmatch関数で一覧から探すと{#n/a;#n/a;35;#n/a}のように一致し
ないところが#n/aエラーになるので、チョイチョイと加工して4とい
う数値が得られ、この行は4文字抜き出せばいいなというふうに結論
します。東京じゃない住所だったら最終的に0文字抜き出すので空白
になると。その式はこちら

=left(A1,max(not(isna(match(left(A1,{2;3;4;5}),一覧,0)))*{2;3;4;5}))

説明のわりに短いですね。

全国2000件の住所データから、東京都の区市郡に属するものを探し
てそれぞれ区別できるマーキングをしたいということで、該当する
区市郡だけを抜き出して表示するような列を作れればいいですね。
そうすれば後は並べ替えてチョイチョイですから。

まずは、抽出したい区市郡名の一覧表を用意して下さい。五十音順
に並んでいる必要はありません。「一覧」と名前を定義したことに
します。

住所データからleft関数で何文字か取り出して、一覧に一致したら
ビンゴなんですが、何文字抜き出せばいいのか判りません...続きを読む

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

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

Aベストアンサー

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

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

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住所から市町村JISコードを検出

エクセル2003を使用しています。
住所一覧を参照して市町村JISコードを返したいのですが可能でしょうか。

A列
大阪府大阪市○○区○○町1-1
高知県高知市○○11-1
愛知県海部郡○○町○○○○61
  ・
  ・
  ・

と住所が並んでいます。

過去の質問やサイトを調べて都道府県を抽出することはできたのですが、
JISコードを参照するには市区町村部分まで引っ張り出さないといけないようです。

何か簡単にできるような計算式等、ありませんでしょうか。

Aベストアンサー

データは、地域の区分け、それも、都道府県に別けるのは面倒だから、せいぜい以下のような10ブロック別けぐらいで十分だと思います。

(北海道,東北地方,関東地方,中部地方,北陸・甲信越,東海,近畿地方,中国地方,四国地方,九州地方)

今回の使ったデータは、全部で、122,619行で、それを分散させれば、後は、どこを検索するかブロックを最初に決められれば、後はそんなに問題はないと思います。それを分散したら、1シート、1万数千件程度の検索です。そのデータのブック自体は別にし読み取り専用にしておき、そのブックのシートを、データベース関数やExcelのデータベース検索コマンド(フィルタオプション)でできるかと思います。

この場合、元のデータ自体を加工するという考えは、あまりしないほうがよいのではないかと思います。また入力データを切り分けするなら、その元のデータを考慮しないといけないはずです。

なお、JISコードは、集計すると2,520個で、市町村データは、80,813件でした。ただし、それは、「他に掲載がない場合」や「同名」が存在しているなどの理由からで、12万件自体は変わらないはずです。

個人的には、やはり、専用のデータベースの方が、現在のデータのままでは検索の効率はよいと思っています。

今回、私の使用したデータは以下の[ZIPJIS]というK3(桐)ファイルです。
(内容の説明では、2005年6月20日までの変更に対応。)
http://kitagawa.tv/zipjis/zipjis.htm

参考URL:http://kitagawa.tv/zipjis/zipjis.htm

データは、地域の区分け、それも、都道府県に別けるのは面倒だから、せいぜい以下のような10ブロック別けぐらいで十分だと思います。

(北海道,東北地方,関東地方,中部地方,北陸・甲信越,東海,近畿地方,中国地方,四国地方,九州地方)

今回の使ったデータは、全部で、122,619行で、それを分散させれば、後は、どこを検索するかブロックを最初に決められれば、後はそんなに問題はないと思います。それを分散したら、1シート、1万数千件程度の検索です。そのデータのブック自体は別にし読み取り専用にしてお...続きを読む


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

人気Q&Aランキング