質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

777閲覧

【MS access】DLOOKUP関数でフィールド名に合った値検索・抽出したい。

deegee

総合スコア2

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2023/12/07 08:56

前提

Accessで選択クエリを作成する過程で、DLookUp関数でエラーが発生しており困っています。

・テーブル1
商品コード
ジャンル
ランク
ジャンル&ランクの複合キー

・テーブル2
ジャンル
ランク
ジャンル&ランクの複合キー
1週目の売上平均
2週目の売上平均
3週目の売上平均

52週目の売上平均

・テーブル3
商品コード
発売経過週

テーブル1とテーブル2は複合キーで結合、テーブル1とテーブル3は商品コードで結合されています。

コード及び実現したいこと

同週売上平均: DLookUp([発売経過週] & "週目の売上平均","テーブル2","ジャンル&ランクの複合キー = " & [テーブル2].[ジャンル&ランクのキー])

上記の構文を持って、クエリに商品のジャンル、ランク、発売経過週に合った売上平均の値が抽出されたフィールドを作りたいです。

発生している問題・エラーメッセージ

クエリ パラメータとして指定した式でエラー '式に指定した名前 'ジャンル&ランクの複合キ―' が見つかりません。' が発生しました

上記のエラーが全件に渡って発生します。
テーブル2で該当するジャンル&ランクの複合キ―がない可能性も探りましたが、あるためテーブル側に問題はないように見受けます。

もしDLookUpじゃなくても別の方法で対応可能ならば、ご教示いただけると嬉しいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2023/12/07 10:02

"ジャンル&ランクの複合キー"という名前のフィールドがあるということでしょうか?もしそうならそのフィールドのデータ型はなんでしょう。 それとテーブルの正規化ができてないですが、できない理由はありますか?
logres_Fan

2023/12/07 13:32

各テーブルの主キーを明示して下さい。
deegee

2023/12/08 02:20 編集

・テーブル1 商品コード 短いテキスト型 主キー ジャンル 短いテキスト型 ランク 短いテキスト型 ジャンル&ランクの複合キー 短いテキスト型 ・テーブル2 ジャンル 短いテキスト型 ランク 短いテキスト型 ジャンル&ランクの複合キー 短いテキスト型 主キー 1週目の売上平均 数値型 2週目の売上平均 数値型 3週目の売上平均 数値型 … 52週目の売上平均 数値型 ・テーブル3 商品コード 短いテキスト型 主キー 発売経過週 短いテキスト型(例えば52週目ならば、「52」ではなく諸事情あって「W52」としています) テーブル3は テーブルの正規化は私がAccess及びデータベース初心者であるため、できていないというのが実態です。 よろしくお願いいたします。
guest

回答2

0

上記のエラーが全件に渡って発生します。

SQLやVBAで使用する演算子(&)を含むカラムを使用しているから、結合演算子と使い分けできていません。
予約語や演算子などを含むカラム名の場合は、カラム名を[]で括って下さい。

同週売上平均: DLookUp([発売経過週] & "週目の売上平均","テーブル2","[ジャンル&ランクの複合キー] = " & [テーブル2].[ジャンル] & [テーブル2].[ランク])

投稿2023/12/07 15:47

sazi

総合スコア25430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deegee

2023/12/08 02:17

私が説明用に「ジャンル&ランクの複合キー」と仮称をつけておりましたが、実際のAccess上では「キー」というフィールド名にしております。 従って、ご指摘いただいた点によってエラーが発生しているわけではありません。 念のためカラム名を[]で囲ってもみましたが同様のエラーが発生しております。
guest

0

ベストアンサー

saziさんの回答の指摘以外にも、数字で始まるフィールドもそのままではカラム名として認識されないので[]で囲む必要があります。
あと、テキスト型のデータは引用符(')で囲む必要があります。

下記でどうでしょう。

同週売上平均: DLookUp("[" & [発売経過週] & "週目の売上平均]","テーブル2","[ジャンル&ランクの複合キー] = '" & [テーブル2].[ジャンル&ランクのキー] & "'")

とりあえずは現状のテーブルのままでいくとしても、今後のことを考えれば正規化をすべきです。正規化されていないテーブルではデータベースの本来のパフォーマンスを発揮できません。

投稿2023/12/08 03:38

hatena19

総合スコア34367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deegee

2023/12/08 04:23

無事に抽出ができました。 今回をきっかけにデータ型にあった引用符で囲わないと検索できないということを改めて理解できました。 今回はテスト的に作成しているクエリですので、テーブルの正規化についても本番化に伴い対応していきます。 ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問