マンガでよめる痔のこと・薬のこと

Access初心者です。
今Accessで顧客管理を作成しています。
フォームで電話番号の下4桁で検索し、該当の顧客の情報がフォームで見れるようにしたいのですが、クエリでの取り込むべきフィールドや抽出条件などがよくわかりません。
今現在はクエリに「電話番号」フィールドだけを取り込み、抽出条件に Right([Forms]![電話番号検索]![電話番号],4) というのを入れてます。
今の段階で作成しているものは、
・ユーザーテーブル
・検索実行クエリ
・ユーザーフォーム
・書き込みフォーム
・電話番号検索フォーム
・開くマクロ
・閉じるマクロ
・最後のレコードへ移動するマクロ
・新しいレコードへ移動するマクロ
・書き込みマクロ
・終了マクロ

以上になります。
電話番号検索フォームで下4桁を入力し、検索ボタンを押すとユーザーフォームの該当の顧客の情報が表示されるようにしたいというのが目的です。
何卒ご指導の程よろしくお願い致します。

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

A 回答 (7件)

>物分りが悪くて本当に申し訳ないのですが、


物分りが悪いのじゃないですね
基礎知識が不足しています

>フォームのソースをそのクエリにするというのは、
>どうゆう風にすれば良いのか良ければ教えて頂けないでしょうか…?
簡単なことですから教えてあげてもいいですが
これだけ覚えたってすぐまた分からないことが出てきますよ
それをまたここで聞くのですか?

Netじゃ系統だった知識は身につきません
入門書をせめて1冊最後まで読んでください
    • good
    • 0
この回答へのお礼

自分で探って解決しました。
ありがとうございました。

お礼日時:2007/11/13 16:55

私は、「電話番号の下4桁で」といった検索をするときは、


クエリの式で、
1.電話番号を半角数字のみに整形
2.上記の結果を逆順にする。(StrReverse関数)
としておき、
フォームの電話番号も同様に
1.電話番号を半角数字のみに整形
2.上記の結果を逆順にする。(StrReverse関数)
としたうえ、
Like で部分検索します。

こうすれば、03-456-78990と入力しようが、
7890でも456-7890でも検索できます。
    • good
    • 0

お詫びのお詫び:



× "PHONE LIKE '*-*-" & Me.電話番号下四桁 & "'"
○ "PHONE LIKE '*" & Me.電話番号下四桁 & "'"

つまり、<下4桁のみにマッチする工夫>は間違い。

まあ、完全なゴミ回答でした。

※ついでに、<電話番号検索フォームで下4桁を入力し>は??
※フォームヘッダーなどに検索用入力テキストボックスをが普通とは思います。
    • good
    • 0

お詫び:



質問を曲解していました。
マッチする回答は以下のようでしょう。
つまり、No1さんの回答の後追いです。
ただ、条件文は下4桁のみにマッチする工夫はしています。

Private Sub コマンド_OK_Click()
  Dim strSQL As String

  strSQL = "SELECT * FROM クエリXXX WHERE " & "PHONE LIKE '*-*-" & Me.電話番号下四桁 &
"'"
  Forms("Customer").RecordSource = strQuery
  Forms("Customer").Reauery  コマンド_終了_Click
End Sub

※自宅からですので未テストです。
※クエリからは抽出条件を除くのが前提です。
※フォームのRecordSourceをオープン時にどうするかは考え方次第です。
    • good
    • 0

>クエリで抽出することはできるようになったのですが、


>抽出したものをフォームで表示させることがまだできないです…
フォームのソースをそのクエリにすればいいだけのことでは
    • good
    • 0
この回答へのお礼

度々本当にありがとうございます!
物分りが悪くて本当に申し訳ないのですが、フォームのソースをそのクエリにするというのは、どうゆう風にすれば良いのか良ければ教えて頂けないでしょうか…?

お礼日時:2007/11/08 09:25

テーブル<Customer>



cuntomer_num__company_________kname_______zipcode__address1__address2__building__phone
______________101__スポーツランド__鈴木 一郎__150-______東京都____渋谷 2____Aビル____03-400-3333
______________102__スポーツランド__岡島 一郎__150-______東京都____渋谷 2____Bビル____03-400-4444
______________103__スポーツランド__田中 一郎__150-______東京都____渋谷 2____Cビル____03-400-5555

フォーム<Customer>

Private Sub コマンド_InputPhoneを開く_Click()
On Error Resume Next
  DoCmd.OpenForm "InputPhone", , , Null
End Sub

フォーム<InputPhone>

Private Sub コマンド_OK_Click()
  Forms("Customer").Controls("電話番号下四桁") = Me.電話番号下四桁
  Forms("Customer").FilterOn = False
  Forms("Customer").Filter = "PHONE LIKE '*-*-" & Me.電話番号下四桁 & "'"
  Forms("Customer").FilterOn = True
  コマンド_終了_Click
End Sub

Private Sub コマンド_終了_Click()
  DoCmd.Close
End Sub


フォーム<Customer>からフォーム<InputPhone>を開きます。
[電話番号下四桁]を入力したら[OK][Cancel]ボタンをクリック。
[OK]の場合は、一応、フォーム<Customer>の[電話番号下四桁]にも表示しフィルターを実行。

こういう感じです。
    • good
    • 0
この回答へのお礼

ありがとうございます!
とても詳しくて勉強になりました。

お礼日時:2007/11/07 17:01

下4桁を入力するのなら



抽出条件は

like "*" & [Forms]![電話番号検索]![電話番号]

検索ボタンクリックにフォームを再クエリするマクロを書きます
    • good
    • 0
この回答へのお礼

ありがとうございました!
クエリで抽出することはできるようになったのですが、抽出したものをフォームで表示させることがまだできないです…

お礼日時:2007/11/07 17:04

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

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

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

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

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください

QAccessでの かな氏名検索・電話番号検索を教えて下さい。

Access初心者です。
今Accessで顧客管理を作製しています。
フォームでかな氏名検索をしたいのですが、
検索先が入力順になっている為とても検索し辛いです。
これをかなの昇順に変える方法があったら教えて下さい。
また電話番号検索でも下4桁での検索とかが可能でしたら、教えて頂けるとうれしいです。
どうぞ宜しくお願いします。

Aベストアンサー

たぶん、コンボボックス、もしくはリストボックスで一覧を出して、そのClickイベントあたりで目的のお客のレコードへ飛びたい、というのもだと思います。

VBAで微調整はいりますが、#2さんのロジックを元に、コンボボックス、もしくはリストボックスの値集合ソースを設定してやればOKだと思います。

もちろん、イベント発生後に、目的のレコードへ飛ぶコードを各必要がありますが、これはコンボボックス作成時のウィーザードで「レコードの移動」を選択すれば、サンプルを作っていくれますので、それを元にモデファイすればいいと思います。

QAccessの電話番号フィールド

Access2000以降について質問です。
顧客記録の電話番号フィールドについてお尋ねします。
異なるデータソース(テキスト形式)から各々に電話番号フィールドを含む2つのテーブルを作成したのですが、電話番号のフィールドがテーブル1では「ハイフンつき」の電話番号、テーブル2のほうでは「ハイフンなし」の電話番号になっています。また、いずれのフィールドもデータ型は「テキスト型」になっています。
やりたいことはテーブル1の電話番号にはないテーブル2の電話番号を含むレコードを不一致クエリを用いて抽出したいのですが、ハイフンがあるために全て不一致になってしまいます。
ハイフンを入れるのは地方の電話番号が多いため市外局番が3桁や4桁などで不揃いのためLEFT、RIGHT関数を用いて入れるのは不可能です。
そこでテーブル1のハイフンつき電話番号フィールドからハイフンを取り除きたいのですが、なにか方法はありませんか?VBAは分からないのでそれ以外でやる方法があれば教えて下さい。お願いします。

Aベストアンサー

選択クエリで、式1にReplace([電話番号],"-","")でやってみると
下記になりましたが、これが使えませんか。
ID氏名電話番号重複式1
1山田03-2345-6543a0323456543
2大島042-2345-234504223452345
3下田0720-34-3456a0720343456
4小出042-345-23450423452345
5中田07523-23456a0752323456
(たまたまあったテーブルを使っただけで、上記「重複」フィールドは意味ないので無視してください。)

QAccessVBAを使用して、DB内を検索する画面を作成したいのですが。

Accessのヴァージョンは2000以降です。
フォーム上で、テキストボックスに入力して、検索ボタンを押すと、検索結果が表示される物を作りたいのです。

SQLの知識はあるので、SQL文は記述できるのですが、どうすれば検索結果が表示されるのかわかりません。

検索ボタンをクリックしたときにどういう処理をするのか、また、検索結果画面はどのように作っておけばよいのか等、少しでも多くのご回答をいただきたいです。

本やサイトも色々見たのですが、見あたりませんでした。
そのようなサイトがありましたら是非教えていただけると助かります。

お忙しい中申し訳ありませんが、本当に困っています。
よろしくお願いいたします。

Aベストアンサー

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください。
さらに検索ボタンを作成し、「検索」と言う名前で保存。
プロパティ-の「クリック時」で下↓のボタンを押し「イベントプロシージャ」を選択。
右端の「・・・」を選択するとVBAを記述できる画面が出てきます。
そこに下記内容を記述

Private Sub 検索_Click()
Forms![フォーム1].RecordSource = "SELECT * FROM [テーブル1] where forms![フォーム1]![氏名選択] = [テーブル1]![氏名]"
End Sub

VBAはやっぱり知っておいた方がよろしいかと思います。
と言っても、下記の例ではほんのちょっとだけですけど。
ほとんど中身はSQLです。
応用するにはさらに知らねばならないでしょう。

まず、テーブルは「テーブル1」と言う名前で項目「氏名」と「体重」だけ作ります。
フォームは「表形式」を選択し基になるテーブルに「テーブル1」を選択し作成してください。
フォーム名は「フォーム1」で保存してください。

できたフォーム1に「氏名選択」という名前でテキスト入力フィールドを作成してください...続きを読む

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccess]2つのテーブルを比較してフィールドの一部が一致したデータを抽出

2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。

テーブル名とフィールドは以下のとおりです。

====================
テーブル名「名簿A」

氏名
電話番号
住所
メールアドレス
====================
テーブル名「名簿B」



電話番号
住所
メールアドレス
====================

たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、
メールアドレスフィールドの抽出条件として

Like [名簿B].[メールアドレス]

を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。

ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。

そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として

Like (*[名簿B].[姓]*)

を設定するものでした。
これがうまくいけば最終的には

Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*)

という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に

Like ("*[名簿B].[姓]*")

となってしまい、何も抽出されなくなってしまいました。

このような方法では希望する抽出は行えないのでしょうか?

お分かりのかた、よろしくお願いいたします。

2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。

テーブル名とフィールドは以下のとおりです。

====================
テーブル名「名簿A」

氏名
電話番号
住所
メールアドレス
====================
テーブル名「名簿B」



電話番号
住所
メールアドレス
====================

たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、
メール...続きを読む

Aベストアンサー

> 名簿Aの「氏名」欄には姓と名の間にスペースが入っているものがあり

[名簿B].[姓] & [名簿B].[名]を使った時のクエリで考えてみます。

クエリをSQLビューで表示した時、抽出条件のところは

[名簿A].[名前] Like [名簿B].[姓] & [名簿B].[名]
とか
[名簿A].[名前] = [名簿B].[姓] & [名簿B].[名]

になっていると思います。

[名簿A].[名前]の部分に細工して、Replace([名簿A].[名前]," ","")に書き換えます。
(Replace で空白を削除してあげます)

それをもとに
Replace([名簿A].[名前]," ","") = [名簿B].[姓] & [名簿B].[名]
としてみるとどうなりますか。


※バージョンによっては、クエリ内で Replace が使えないものがあったかと思います。
その時には、補足なりに記述してください。
(対処方法はあります)

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

Qaccessで空白の時の抽出

access2000を使っています。まだ初心者なので難しい事はできないのですが、クエリを使って絞り込み検索のフォームを作っています。
テーブル内のデータで空白のデータがあります。その際にクエリの抽出条件にlike iif(is null([forms]![formA]![テキスト100]),"*","*"&[forms]![formA]![テキスト100]&"*")としています。フォームのテキストが空白のときは全て抽出するという条件を満たす予定で設定したのですが、テーブル内のデータが空白の物が抽出できません。データが空白がない様にすればいいのでしょうが、クエリの条件で設定できないものでしょうか?データはテキスト型です。

Aベストアンサー

クエリで、like "*"では、空白のレコードの抽出は出来ないのでは?
like "*" Or Is Nullになると思いますが、これをこのまま指定の抽出条件に記述したら、条件が・・・のエラーメッセージが出ると思います。そこで、何もかもを一度にするので無く、多少分解してやります。
抽出条件というフィールドを作成し、InStr関数を使用して、テキストの中に、指定した文字が含まれているかを調べます。この関数は、文字が見つかった時は、最初に見つかった文字位置を返してくるので、抽出条件は、<>0と指定します。
フォームに抽出条件が設定されていない時は、全件抽出したいという事ですので、テキストボックスが空白の時に、0以外をこのフィールドにセットすればOKでは?

フィールドに
抽出条件:IIf(IsNull([Forms]![formA]![テキスト100]),1,InStr([FAX番号],[Forms]![formA]![テキスト100]))
抽出条件に
<>0

こんな感じでどうでしょ?

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

Qアクセスで郵便番号にハイフンをつけて印刷したい

アクセスの得意な方、教えてください。
データベースの実データはハイフン無しの7桁の
半角数字の郵便番号を印刷する時、
「999-9999」と、3桁目と4桁目の間にハイフンを
入れタイのですが、どうやったらいいか分かりません。
レポートの郵便番号のプロパティの何処でどのように
設定すればハイフン入りで印刷できるのでしょうか??
教えてください!!

Aベストアンサー

一番てっとり早い方法としてオススメです。

1.レポートの郵便番号のプロパティ
2.[データ]タブの[定型入力]で右端のボタンをクリック
 (こんな形のボタンです。 [・・・] )
3.ウィザードで、「郵便番号」を選んで、「次へ」
4.ずっと「次へ」で「完了」

あっという間に簡単にできますよ。


人気Q&Aランキング