こんにちはmasalifeです。
今回はエラーの対応方法について紹介したいと思います。
テーマは【クエリでテーブルと同じフィールド名を使用して加工する方法】です。
どういうことか、簡単に例をあげてまとめると
・テーブルに短いテキスト型の【価格】フィールドがある
・その【価格】フィールドをクエリと関数を使用して数値に変換したい
・クエリ上で関数変換後のフィールド名は【価格】としたい
実務でAccessを使用している方はよく遭遇するシチュエーションだと思います。
対応しようとして、エラーがかかり悩むポイントは
・クエリ上で関数変換後のフィールド名は【価格】としたい
の部分です。
同じフィールド名を使用するためには一工夫が必要となるからです。
同じフィールド名が使用できないから、安易にフィールド名を変更してしまい、システムが動かなくなったという事態は避けたいですよね。
今から対応方法について紹介していきます。
目次の【やりたい事】を見て、どうやってやればいいか考えてチャレンジしてみるのもいいですよ。
やりたい事
テーブル【T_価格表】の【価格】フィールドはデータ型が短いテキスト型となっているため、価格が文字となっています。
必要が生じて、【価格】フィールドの表示を一時的に数値しなければなりません。
選択クエリを使用して、【価格】フィールドの文字を数値に変換しましょう。
*フィールド名は【価格】とします。
よくする間違いとエラー内容
勉強も兼ねて、Access初心者の子たちにクエリを作成してもらうと、だいたい次のようになります。(自分も同じでした・・・)
実行してみると、

weblio辞書より引用
クエリでテーブルと同じフィールド名を使用する(エラー解決)
再度、エラーとなるクエリを確認します。
別にフィールド名とした【価格】がVal関数の引数であるT_価格表のフィールド【価格】と同じ名前であることから、循環参照を発生させています。
同じ名前であることから発生するエラーであれば、
数値価格:Val([価格]
というように別の名前とすればいいです。しかし、今回は要件定義にあるように、
ので、【価格】というフィールド名を使ってエラーを解決してみましょう。
【価格】のフィールド名が重複しているので、次のように区別してみます。
整理すると、[T_価格表]!を[価格]の前に付けることによって、Val関数の引数の価格フィールドはT_価格表のですよって明示しています。
実行してみると、
エラーがかからず、正しく価格の値が数値型に変換されています。
さいごに
コンピュータは正しく指示すれば正しい結果を返してくれます。
そして、正しく指示するためにはあいまいを排除する必要があります。
目の前に「たかしさん」が2人いて、誰かに「たかしさんに〇〇を渡しといて」と依頼されたとしても、どちらのたかしさんに渡せばいいか分かりませんよね。
私たち人間であれば、「あの人に依頼されたのだからこっちのたかしさんかな。」と想像を働かせますが、コンピュータは指示されたどおりにしかやってくれません。
なので、ちゃんと「鈴木たかしさんに〇〇を渡しといて」と明示する必要があります。
この点を意識すると、ACCESSの理解がぐんと進みますよ。