ネットが遅くてイライラしてない!?

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

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

A 回答 (2件)

住所録を元に更新クエリを作ります。


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

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

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

ありがとうございました。
無事解決することができました。

お礼日時:2006/04/02 11:55

こんばんは。



「住所フィールドは都道府県名から始まっている。
すなわち、住所フィールドの先頭から3文字もしくは4文字を
抜き出して、都道府県フィールドに入れればいい。」
という前提で回答します。

更新クエリで、住所録テーブルを選択します。
フィールド⇒都道府県
レコードの更新⇒Left([住所],3) とします。
次に、同じ更新クエリで、
条件判定用フィールド(「判定」とでもしておきます。)を作成します。
フィールド⇒判定:Mid([住所],3,1)
抽出条件⇒"都"or"道"or"府"or"県"
とします。
これで、住所フィールドの先頭から3文字目が
"都""道""府""県"のいずれかのデータが更新対象になりました。

これでこの更新クエリを実行すると、神奈川県、和歌山県、鹿児島県以外(=都道府県名が2文字)のデータが更新されます。

次に、別の更新クエリを作成し、
フィールド⇒都道府県
レコードの更新⇒Left([住所],4)
抽出条件⇒is null とします。

これを実行すると、最初の更新クエリで更新対象とならずに、
フィールドがnullのままのデータ(=都道府県名が3文字のデータ)だけが更新されて、完成です。

わかりにくかったでしょうか。
    • good
    • 0

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

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

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

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

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

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住所から市町村名を取り出す

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

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

Aベストアンサー

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

QAccessでvlookupみたいなことはできますか。

Accessで、2つのテーブルがあります。

touroku_m テーブル……ID、登録No、氏名、携帯メール
keitai_m テーブル……ID、登録No、携帯メール

keitai_mの方には、携帯メールフィールドに、アドレスが入力されています。
touroku_mテーブルの携帯メールフィールドは空なので、登録Noを比較して、共通だったらkeitai_mに入力してある携帯メールアドレスをtouroku_mに一気に入れたいのです。

こんなことは可能でしょうか。

Aベストアンサー

レス遅くなってすみません。
えっと、追加クエリはテーブル名を見て追加しますので、追加クエリが実行されるときにtouroku_mの名前のテーブルに追加されます。
なので最初touroku_mという名前のテーブルが名前を変えると、それには追加されませんが、またtouroku_mに戻せば追加されるようになりますよ。
要は追加クエリを実行したいテーブルの名前をtouroku_mにしとけば大丈夫です。

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


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

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のコメント参照)のではなく、都道府県名、市区町...続きを読む

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QACCESSのフォームからデータの追加ができない

現在Accessの基本を勉強中です。
テーブルを元にフォームを作成し、フォームから新しく名前や会社名などを直接入力し、追加できるようにしたいです。
ところがフォームから入力を行うと、内容が追加されず一番最初に登録した人の名前が書き換わるだけになります。
どのように新しくデータを追加できるようになるのでしょうか?
まったくの初心者なので、どの機能を使えばよいか戸惑ってます。
どうかよいご意見をお願い致しますm(__)m

Aベストアンサー

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォーム自体を入力専用にする
 (フォームのプロパティシートの『データ』タブで『データ入力用』を「はい」に設定:
  既存のレコードは表示されなくなります)
 ・レコード移動用のコマンドボタンを設置する
 (フォームをデザインビューで開き、ツールボックス(矢印や、新規のテキストボックス等を
  設置する際に使用するツールバー)の左から二番目にあるウィザードボタンが押された
  状態にして、新規コマンドボタンを設置すると、簡単に作れると思います)
といった方法があります。

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォー...続きを読む

QAccessで、1つの項目に複数の置換えを1度でするには?

Access2003で、1つの項目に複数の置換えを1で実行したいのですが、どうすればいいのでしょうか?
編集メニューの『置換』を使うのではなく、クエリやマクロで実行したいのです。

どんどん溜めているデータを定期的に決まった文字を1度に変換できるようにしたいのです。

例えば、[会社名]フィールドに入っている
 「株式会社」 を 「(株)」 に、
 「有限会社」 を 「(有)」 に、
 「法人会社」 を 「(法)」 に、…続く…、などと置換えしたいのです。

更新クエリで、『Replace([会社名],"株式会社","(株)")』 と1つなら置換えできたのですが、複数置換えしたい場合は、同様のクエリをその数だけ作ってマクロで続けて実行させるという方法しかないのでしょうか?

できればクエリを増やしたくないので、他にいい方法がありましたら、教えて下さい。

Aベストアンサー

同一のReplace関数のネストで、下記は2つの例ですが、3つまでぐらいなら、式が長くなるが辛抱できるのでは。
Replace(Replace([学校],"北小学校","北新小学校"),"中央小学校","中央北小学校")
生徒テーブルの学校フィールドで
A生徒の学校フィールド  北小学校ー>北新小学校
B生徒の学校フィールド  中央小学校ーー>中央北小学校
になったフィールドを作れました。

QACCESS DCOUNTの抽出条件について

式1: DCount("コード","テーブル","コード=" & [テーブル]![コード])

結果の2以上のものを抽出したいのですが、どのように記述するのでしょうか?

>1または>=2またはnot 1でもいいですが・・・
記述方法が良く分かりません。

Aベストアンサー

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも上記エラーが出ているようでしたら、
 元となるテーブルとクエリの情報(フィールド名とデータ型)をお知らせ下さい)
※なお、コードは数値型と想定しています。もしも文字列方の場合は、併せて
 式を「"コード='" & [テーブル]![コード] & "'"」と変更する必要があります。

上記のエラーを回避するには、DCountの第1引数を「*」にします。
また、コードがNullのレコードで、クエリの表示結果が「#エラー」となるのを
回避するためには、第3引数にNz関数を使用します。
(コードの最小値は0か1でしょうから、「最小値-1」(=-1か0)にするのがよいかと
 思います)

【Nullは重複数に含めない場合】
DCount("*","テーブル","コード=" & Nz([テーブル]![コード],-1))
※コードがNullの場合は、第3引数の結果がTrueにならない(Null=-1)ので
 0件扱いとなるため、抽出条件の「>1」で弾かれます。
 また、第3引数にNz関数を使用する代わりに、クエリの『コード』の抽出条件に
 「Is Not Null」を指定する(→最初から集計の対象外にする)方法もあります。

【Nullも1つのコードとして重複扱いする場合】
DCount("*","テーブル","Nz(コード,-1)=" & Nz([テーブル]![コード],-1))

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも...続きを読む


人気Q&Aランキング