『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

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

A 回答 (3件)

SELECT * FROM テーブル1


WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

この回答への補足

投稿頂きました内容が自己解決の手段と同じでしたので、BAとさせていただきます。

補足日時:2011/01/27 22:43
    • good
    • 1
この回答へのお礼

お返事頂きましてありがとうございます。

今後の参考にさせていただきます。

お礼日時:2011/01/27 22:38

>解決方法をご存知でしたら改めてお願い申し上げます。



下記3通りのいづれかをお試しください。

「表示」「集計」で集計方法を「グループ化」
http://office.microsoft.com/ja-jp/access-help/HP …

クエリのプロパティを表示して「固有のレコード」を「はい」にする。
http://office.microsoft.com/ja-jp/access-help/HA …

フィールドのプロパティを表示して「固有の値」を「はい」にする。
http://office.microsoft.com/ja-jp/access-help/HA …

この回答への補足

自己解決しました。
以下、経緯を記入いたします。


目的:
クエリの抽出条件として、別テーブルに登録されているレコード・フィールドを除外キーワードとして使いたい。


参考ページ:No30101.クエリのNot演算子について教えていただけませんか
http://www.accessclub.jp/bbs/0081/beginers30101. …


■解決方法■
1.クエリ作成画面にて テーブル1 の『ID』フィールドと『検索キーワード履歴』を登録します。(『ID』フィールド必須)

2.『ID』フィールドの抽出条件に、以下の文法にて入力します。(改行しない場合は半角スペースを入れてください)

文法:
Not In (SELECT 検索元テーブル.IDフィールド
FROM 検索元テーブル, 除外キーワードテーブル
WHERE 検索元テーブル.検索したいフィールド Like "*" & 除外キーワードテーブル.除外キーワードフィールド & "*")

今回の場合:
使用したテーブルは以下の通り

テーブル1   (テーブル名/検索元テーブルです)
--------------------
ID(フィールド/IDとして使用)
検索キーワード履歴  (フィールド名/検索されるデータ)


テーブル2   (除外したいワードが登録されている)
--------------------
除外キーワード候補  (フィールド名/抽出クエリに用いる除外したいキーワードが登録されている)


実装するとこんな感じ:
Not In (SELECT テーブル1.ID
FROM テーブル1, テーブル2
WHERE テーブル1.検索キーワード履歴 Like "*" & テーブル2.除外キーワード候補 & "*")


以上。
部分一致として動作し、別テーブルのフィールドに登録されたキーワード全件を除外した上で、クエリを出力します。


以上です。失礼いたします。

補足日時:2011/01/27 22:36
    • good
    • 0

選択クエリでテーブル1、テーブル2を連結しないで選択



テーブル1の検索キーワード履歴の抽出条件欄に

<>[テーブル2].[除外キーワード候補]

と入力して保存

もし、除外キーワード候補が検索キーワード履歴の一部分なら条件は

Not Like "*" & [テーブル2].[除外キーワード候補] & "*"

としてください。
    • good
    • 3
この回答へのお礼

お返事頂きましてありがとう御座います。

教えていただきました部分一致による抽出条件
Not Like "*" & [テーブル2].[除外キーワード候補] & "*"
によりクエリを実行したところ、意図せぬ結果が出力されました。

部分一致による抽出は機能していますが、
テーブル2.除外キーワード候補へ登録されているレコードの数ぶん(10件)同一内容が出力されてしまいます。


■出力結果(各結果が10件ずつ表示される)
おにく
おにく
おにく
おにく
おにく
おにく
おにく
おにく
おにく
おにく
お魚
お魚
お魚
お魚
お魚
お魚
お魚
・・・以下略


■希望(1件毎に表示)
おにく
お魚
冷凍食品
調味料
菓子
・・・
・・・
・・・以下略


なお蛇足ですが、
Like "*" & [テーブル2].[除外キーワード候補] & "*"
にて実行すると、[除外キーワード]を含む値が1件毎正常に出力されます。
Like と Not Like では挙動が異なるようです。

解決方法をご存知でしたら改めてお願い申し上げます。

お礼日時:2011/01/27 20:50

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

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

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

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

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

Q別のテーブルのフィールドを抽出項目にするには?

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 フィールド2
ID-1     りんご
ID-2     バナナ
・       ・
・       ・
・       ・
ID-2000    チェリー
---------------------------------------
---------------------------------------

除外リスト(テーブル3。名前は除外リスト)
フィールド1
りんご
チェリー



---------------------------------------

元データのフィールド2に
Not Like "*りんご*" And Not Like "*チェリー*"
と記述すれば、フィールド2にりんご、チェリーを含むレコード以外のものが表示され、
欲しい情報が手に入るのですが、(上記例だとバナナのみ表示される)
実際にはりんご、チェリーなどあいまい検索し、非表示にしたいキーワードが100個あります。

なので、除外リストというテーブルをつくり、
そのフィールド内に書かれたキーワードを使い
Not Like "*りんご*" And Not Like "*チェリー*"
と同じような表示結果になるようにしたいのですが、
やり方が調べてもどうしてもわかりません。

どうか皆様のお力を貸してください。
宜しくお願いいたします。

別のテーブルのフィールドを抽出項目にするには?

Access初心者です。
申し訳ありませんが、急ぎ回答いただきたく思います。
どうか宜しくお願いいたします。

お伺いしたい内容は、

データが多く、抽出条件も多いので、
別のテーブルのフィールドに入っている単語を使い、
抽出したい元データのレコードをあいまい検索して非表示にしたいです。

データの内容は下記になります。

---------------------------------------
元データ(テーブル1とテーブル2から結合したクエリ(名前は元データ)
フィールド1 ...続きを読む

Aベストアンサー

以下でどうなるでしょうか。

元データのクエリの名前を「元データ」とします。
除外リストは、そのまま「除外リスト」名とします。

SELECT * FROM 元データ
WHERE NOT EXISTS (
SELECT 1 FROM 除外リスト
WHERE 元データ.フィールド2 LIKE "*" & 除外リスト.フィールド1 & "*"
)
;


曖昧で一致するもの、が無ければ…、と考えてみましたが。

(修理性能はわかりません)

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

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で空白のデーターをクエリで判定/識別する方法を教えてくださ

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

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

Aベストアンサー

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

QACCESS テーブルを見比べて、一致したレコードを抽出したいです

ACCESSで、以下のデータ抽出をしたいです。
別々のテーブルで、番号の一致したものだけ取り出したいです。
どのようにすればよいのでしょうか?
よろしくお願いします。

 Aテーブル     Bテーブル
  ・001 ***     ・002 *** 
  ・002 ***     ・004 ***
  ・003 ***     ・001 ***

求める答え

  ・001 ***  
  ・002 *** 

Aベストアンサー

> もう少しくだいて説明頂くとわかるのですが、
判ってしまえば簡単なんですが、言葉だけで説明するのは大変なんですよね。
「自動車の運転を、動作や絵を使わず文字だけで教えろ」と言われているようなものなので....
データベースを開き、
1.「クエリ」をクリック。
2.「新規作成」をクリック。
3.「デザインビュー」を選択して「OK」をクリック。
4.「テーブルの表示」から、「Aテーブル」をクリックし、さらに「CTRL」キーをおしたまま「Bテーブル」をクリックして、
 「Aテーブル」と「Bテーブル」が選択されている状態にして「追加」をクリック。
5.「閉じる」をクリックして「テーブルの表示」パネルを閉じる。
6.「Aテーブル」のコードの部分を「Bテーブル」のコード部分へドラッグする。
7.両テーブルのコード部分が線で結ばれていることを確認する。
8.「Aテーブル」の表示したいフィールドを、下の表にドラッグします。

このへんで、カンベンして下さい...

QACCESS クエリ 抽出条件が多い場合

ACCESSの超初心者です。

選択クエリで、80件ほどの抽出条件を部分一致で
設定しています。(Likeを使用)

例えばこんな感じです。
 フィールド
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115
 
 抽出条件 Like "aaa*" Or Like "bba*"
→抽出結果 aaa1,aaa33,bba35,bba115

今後も条件が増えていく予定なので、別の
良い方法がないかと思っています。
(できるかどうかわかりませんが、
別にテーブルを作り、その一覧内の文字が
含まれるレコードのみを抽出)

皆さんのお知恵をお貸しいただけないでしょうか。

宜しくお願いします。

Aベストアンサー

検索対象の文字列をテーブルで扱うのであれば以下のような感じになるでしょうか。

検索されるテーブル(名前:T1)
 フィールド(名前:FN)
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115

検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)
  aaa
  bba


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like [TS].[FN] & "*");



検索する文字列テーブルに細工(曖昧方向を追加)
検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)/ 曖昧方向(名前:SP)
  aaa            1
  bba            1

曖昧方向の意味
=1:後方曖昧 (例:aaa*)
=2:前後曖昧 (例:*aaa*)
=3:前方曖昧 (例:*aaa)


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like Choose([TS].[SP],"","*","*") & [TS].[FN] & Choose([TS].[SP],"*","*",""));

検索対象の文字列をテーブルで扱うのであれば以下のような感じになるでしょうか。

検索されるテーブル(名前:T1)
 フィールド(名前:FN)
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115

検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)
  aaa
  bba


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like [TS].[FN] & "*");



検索する文字列テーブルに細工(曖昧方向を追加)
検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)/ 曖昧方向(名...続きを読む

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

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

Aベストアンサー

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

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

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

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

QACCESSのクエリー抽出条件にIIFを使用して

コンボボックスの値を抽出条件にしたクエリーを作成しています。
コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、
以下の式を入れたのですが全表示がされません。

IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])

Like "*" の部分がいけないのでしょうか?
(偽の場合は選択した値のレコードが抽出されます)

どなたか教えてください、よろしくお願いいたします。

Aベストアンサー

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にしてください。
(3)IIfを入力したフィールドの「抽出条件」に True と入力します。
 (Trueの囲い文字はいりません。)

どうでしょう?ちゃんと出ますよね・・・?
ただし、フィールドを作ったわけですから、
クエリのデータシートビューには必要のない、-1などが表示されたフィールドが表示されますよね。
これは、デザインビューに戻って、表示のチェックボックスをオフにすれば解決します。

IIFというのは、ExcelのIF関数とはちょっとイメージが違います。
以下解説↓

今回の条件式の部分には、[コンボ]="ALL"という評価式(←ポイント!)が入力されています。
Excelでは条件式というイメージが強いですが、
IIFは評価式という意味です。
つまり、この評価式自体がTrueとFalseを持つということです。
IIf([Forms]![テーブル名]![コンボボックス名]="ALL",・・・・)という式で、
条件をALLとしたら・・・
評価結果=True となります。
そして真の場合の処理にTrueを指定することで、IIFの戻り値がTrueになります。
条件にALL以外を入力すると・・・
評価結果=False となります。
そして偽の場合の処理の戻り値が、ALL以外の条件になります。
抽出条件にもTrueを入力したのは、無条件に全件が表示されるのを防ぐためです。

これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。
または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。
健闘を祈ります!

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にして...続きを読む

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でフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

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

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。


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

人気Q&Aランキング