• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AccessのDlookupの引数設定について)

AccessのDlookupの引数設定について

このQ&Aのポイント
  • AccessのDlookup関数を使ってエクセルのVlookupのようなことを実現する方法を教えてください。
  • テーブルAとBのレコード数は約30万件あり、数件の差異があることがわかりました。
  • Dlookup関数の引数をどのように設定すればよいか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#208392
noname#208392
回答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の方のおっしゃる不一致クエリです。 ウィザードでも作ることができることになっていますが、このウィザードのメッセージが私には全く意味不明な日本語なので、私はウィザード使いません。 上のように自分で作ったって、かかる時間は同じですから。

hajime0405
質問者

お礼

お返事遅くなりすいません! 当座を不一致クエリでしのぎ、後日あらためて-ken-ken-さんの方法で試してみましたら(Dlookupの方ではありません)、無事正しい結果が返ってきました。今後活用させていただきます。ご教示ありがとうございました。

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.7

-Ken-Ken- さん お説ごもっともです。少しコチンと来ましたが、ありがとうございます。 -------------------------------------- hajime0405 さん 追伸です No.5の添付は件数がT_Aの方が多いときの設定です  2.T_Aの全レコードとT_B同じ結合フィールドのレコードだけを含める   これで表示された件数と「数件の差異」が一致すれば一応解決ですね VALに重複のレコードがあれば解決したことになりません 重複があるかどうかのチェックはVALの インデックスを「重複なし」と変更は受け付けられませんので… インデックスを「重複なし」の設定の流れはテーブルのデザインビューから入り [VAL]→[インデックスの右端▼]→[は(重複なし)]→[閉じる]→[はい]で 重複があればコメントが表示され閉じることが出来ません

hajime0405
質問者

お礼

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

noname#208392
noname#208392
回答No.6

あははは、#5さん、#1のお礼のところ読みました? この人「不一致クエリ」っていうキーワードだけがほしかったんですよ。 私、不一致クエリの内容をかんで含めるように説明を試みたし、#3さんはナイスなSQL提案してるんだけど、そんなのどうでもよかったんだね。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.5

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

hajime0405
質問者

お礼

折角、ご教示いただいているのに気付かず申し訳ありません。 今回私が遭遇したケースは、 >2.不一致レコードが存在する でしたので、ご指摘の方法をためし、うまくいきました。 また、「照合キーのインデックスを「重複なし」にする」方法についても今後役に立ちそうです。 Access初心者に丁寧なご教示をいただきましたこと感謝申し上げます。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.4

補足願います IDは主キーですよね またオートナンバー形式でないということでよろしいですか ならば不一致クエリー2つ(AにあってBにない、AになくてBにある) でよいのではないのでしょうか

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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;

hajime0405
質問者

お礼

お返事遅くなり申し訳ございません。 ご教示いただいたSQLステートメントを実行すると、不一致クエリと同じ結果が返りました。 SQLの内容が全くもってわかりませんが、今後勉強したいと思います。 どうもありがとうございました。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

クエリーの作成で 不一致クエリー というのがあるんですけど。

hajime0405
質問者

お礼

おおお、そんな便利なクエリがあったんですね。手元のマニュアル本にもでかでかと紹介されていました。ありがとうございました!