
テーブルA
ID | val
---------
01 | 001
02 | 002
03 | 003
04 | 004
05 | 005
テーブルB
ID | val
---------
01 | 001
02 | 002
03 | 003
05 | 005
テーブルAとBのレコード数はいずれも約30万件あります。
本来AとBは同数のレコードをもつはずなのですが、数件の差異があることがわかりました。
それが何かを調べたいのですが、その方法についてご教示ください。
エクセルであれば、Vlookupを使い
テーブルA
ID | val | Vlookup式
--------------------
01 | 001 | 001
02 | 002 | 002
03 | 003 | 003
04 | 004 | Null
05 | 005 | 005
という方法で発見できるのですが、なにせ件数が多いため、慣れないAccessを使ってやろうと考えました次第です。
で調べると、Vlookupに似たDlookup関数というのがあるではありませんか。
そこで、「クエリデザインの作成」→「テーブルの表示」ウィンドウの「テーブル」タブから「テーブルA」を選択→項目「ID」「val」をデザイングリッドに展開しました。
そして、新規フィールドを選択→ビルダーをクリック→ここでDlookupを選択しました。
しかし、以下の式の引数をどのように設定すればよいのかではたと立ち止まってしまいました。
DLookUp(«expression», «domain», «criteria»)
どう設定すれば、エクセルにおけるVlookupのようなことが実現できるでしょうか。
あるいは、もっと適当な方法がありましたらご教示いただければ幸いです。
ちなみに、環境はAccess2010を使っています。
よろしくお願いします。

No.2ベストアンサー
- 回答日時:
アクセスはエクセルじゃないですから、似たような関数を持ってきて貼り付けてもだめです。
しかし、DLookUpをあなたがやりたいように使うことはできます。
テーブルAをもとにしたクエリーをつくることにして、
DLookUp("val", "テーブルB", "ID=" & [ID])
テーブルBの、IDが同じレコードの、valを返せ、という意味になります。
IDが文字列変数なら、''で挟む必要があります。
しかし、#1の方もご指摘の通り、せっかくデーターベースソフトを使っているのに、そんな風にDLookUp関数を使う人はいません。
30万件もDLookUp関数走らせたら、動かないかもよ。
手元にアクセスがないから、画面をうpできないのですが、散文的に書いてみます。
まずクエリビルダでテーブルAとテーブルBを開きます(あなたがテーブルAだけを選択したところです)。
テーブルAのIDをドラッグして、テーブルBのIDでドロップします。
すると、IDとIDが細い線でつながられるはずです。
テーブルを二つ開いたところで、すでに細い線でID同士がつながれていたら、この作業は不要。
この線を選択して右クリックするとメニューが現れ、リンクの編集、というような意味の項目があるはずです。これをクリック。
そこで、テーブルAのすべてのレコードと、関連するテーブルBのレコードを表示する、というよう意味の項目を選びます(ラジオボタン)。
で、閉じる。
ID同士をつなぐ線が矢印になったはずです(Aに向かう矢印・・・・・だったはず)。
デザイングリッドには、テーブルAからIDとvalをドラッグ・ドロップ、テーブルBからはvalをドラッグ・ドロップします。
テーブルB.valの抽出条件は IsNull (Is Nullだったかな?)とします。
それでクエリの実行。
ID | A.val | B.val
--------------------
04 | 004 | Null
という感じで結果が表示されます。
これが、#1の方のおっしゃる不一致クエリです。
ウィザードでも作ることができることになっていますが、このウィザードのメッセージが私には全く意味不明な日本語なので、私はウィザード使いません。
上のように自分で作ったって、かかる時間は同じですから。
お返事遅くなりすいません! 当座を不一致クエリでしのぎ、後日あらためて-ken-ken-さんの方法で試してみましたら(Dlookupの方ではありません)、無事正しい結果が返ってきました。今後活用させていただきます。ご教示ありがとうございました。
No.7
- 回答日時:
-Ken-Ken- さん
お説ごもっともです。少しコチンと来ましたが、ありがとうございます。
--------------------------------------
hajime0405 さん 追伸です
No.5の添付は件数がT_Aの方が多いときの設定です
2.T_Aの全レコードとT_B同じ結合フィールドのレコードだけを含める
これで表示された件数と「数件の差異」が一致すれば一応解決ですね
VALに重複のレコードがあれば解決したことになりません
重複があるかどうかのチェックはVALの
インデックスを「重複なし」と変更は受け付けられませんので…
インデックスを「重複なし」の設定の流れはテーブルのデザインビューから入り
[VAL]→[インデックスの右端▼]→[は(重複なし)]→[閉じる]→[はい]で
重複があればコメントが表示され閉じることが出来ません

補足情報ありがとうございます。
>これで表示された件数と「数件の差異」が一致すれば一応解決ですね
おかげさまで、一致いたしました。
照合キーの重複許可可否の件もありがとうございました。

No.6
- 回答日時:
あははは、#5さん、#1のお礼のところ読みました?
この人「不一致クエリ」っていうキーワードだけがほしかったんですよ。
私、不一致クエリの内容をかんで含めるように説明を試みたし、#3さんはナイスなSQL提案してるんだけど、そんなのどうでもよかったんだね。
No.5
- 回答日時:
補足が無いので勝手に進めます。
DlookUp関数自分も初めてですが
コンボボックスに似たような機能ではないでしょうか
不一致分だけ抽出するのでしょうか
30万件のレコード全てが対象だと大変ですね
テーブル対テーブルの照合には
適さないのではないでしょうか
------------------------------------
件数が合わないとは
1.どちらかに重複のレコードが存在する
2.不一致レコードが存在する
-----------------------------------
テーブル構成がわからないですが
1.が原因しているように思われます
照合キーに対する件数チェック
照合キーがユニークという前提があるなら
テーブルのプロパティーで
照合キーのインデックスを「重複なし」にするに
2.不一致レコードが存在する
不一致クエリー試されましたか
IDは通常オートナンバー型の主キーですのでこれは
照合キーではありませんね、VALを照合キーとします
[作成リボン]→[クエリーデザイン]→[T_A,T_B選択]
→[追加]→[閉じる]と入って
照合キーをドラッグしてテーブル間をリレーション
し、リレーション線を右クリックしてリレーション
種類を決めます 以下添付図を参照してください

折角、ご教示いただいているのに気付かず申し訳ありません。
今回私が遭遇したケースは、
>2.不一致レコードが存在する
でしたので、ご指摘の方法をためし、うまくいきました。
また、「照合キーのインデックスを「重複なし」にする」方法についても今後役に立ちそうです。
Access初心者に丁寧なご教示をいただきましたこと感謝申し上げます。
No.4
- 回答日時:
補足願います
IDは主キーですよね
またオートナンバー形式でないということでよろしいですか
ならば不一致クエリー2つ(AにあってBにない、AになくてBにある)
でよいのではないのでしょうか
No.3
- 回答日時:
元データが
テーブルA
ID,Val
1,1
3,2
4,4
5,5
テーブルB
ID,Val
1,1
2,2
3,3
5,5
だとして下記のをSQLビューに貼り付けてデータシートビューで見ると
ID,Aval,Bval,C
2, , 2, 0
3, 2, 3, 0
4, 4, , 0
のようになります。DlookUpよりかは速いと思います、たぶん。
不一致クエリウィザードだと一方通行ですが、これなら相互チェックできます。
SELECT T1.ID, T2.Val AS Aval, T3.Val AS Bval, IIf(T2.Val=T3.Val,-1,0) AS C
FROM (
(SELECT ID FROM テーブルA
UNION
SELECT ID FROM テーブルB
) AS T1
LEFT JOIN テーブルA AS T2 ON T1.ID = T2.ID)
LEFT JOIN テーブルB AS T3 ON T1.ID = T3.ID
WHERE IIf([T2].[Val]=[T3].[Val],-1,0)=0
ORDER BY T1.ID;
お返事遅くなり申し訳ございません。
ご教示いただいたSQLステートメントを実行すると、不一致クエリと同じ結果が返りました。
SQLの内容が全くもってわかりませんが、今後勉強したいと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(データベース) Microsoft Accessについて 1 2022/06/06 16:20
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessでvlookupみたいなことは...
-
ACCESS DB起動時パスワードを...
-
ACCESSのSQLで数値型に変換する...
-
ACCESSで質問です
-
Accessのクエリについて
-
ACCESSに同時アクセス(編集)を...
-
アクセスを利用して複数のテー...
-
10万件のデータに対してチェ...
-
Accessから、SQLサーバーへのリ...
-
access97でのデータ利用方法に...
-
Accessレコードの追加や変更が...
-
会社別一覧表を作りたい
-
データのコード化とは?
-
Accessで、複数のテーブルで随...
-
2つのテーブルAとBをマージ...
-
Accessの追加クエリで既存のテ...
-
Accessでテーブルからテーブル...
-
SQLで条件指定結合をしたいがNU...
-
時間の足し算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルからテーブル...
-
Accessレコードの追加や変更が...
-
Accessでvlookupみたいなことは...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
Accessクエリでの、LIKE条件
-
2つのテーブルを比較して一致し...
-
access テーブル内のレコード...
-
テーブル作成クエリで主キーを設定
-
SQLで条件指定結合をしたいがNU...
-
3つの表を1つに縦に連結する
-
ACCESSに同時アクセス(編集)を...
-
Accessの追加クエリで既存のテ...
-
ファイルメーカ 検索実行せず...
-
リンクテーブルを CopyObject ...
-
DAOのTableDefs("TblName").Con...
-
INSERT時にデータ登録とmaxの発...
-
ODBCで接続するとDBに変更/追加...
-
SQLで日付を条件に削除したい
おすすめ情報