• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access計算式のフィールドの指定方法)

Access計算式のフィールドの指定方法

このQ&Aのポイント
  • Accessの問題集を解いてみている中で、レポートビューで計算式を作成しようとすると、意図しないパラメータの入力画面が表示されてしまいます。
  • テーブルとクエリを利用して作成されたレポートで、特定の条件に応じて会員割引金額を表示するためにIIF関数を使用していますが、式ビルダで作成する場合にパラメータの入力メッセージが出てしまいます。
  • 通常、クエリなどの計算式ではテーブル名が入っていても正しく計算されますが、この場合はなぜパラメータの入力メッセージが表示されるのでしょうか。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 > [会員]フィールドを表示(デザインビューでチェック入ってます) こちらこそ、言葉が足りなかったようですみません(汗) 上記のように、クエリのデザインビューで『表示』のチェックをオンにしたものは、 『クエリで定義したフィールド』になります(→No.1の中程の『定義』の意味)。 確かに元になっているのは「『取引先台帳』テーブルのフィールド」ですが、 クエリを通して見ることになるフォームやレポートでは、同フィールドは 「『受注一覧』クエリのフィールド」としてしか扱えなくなります。 ・・・という説明が、前回は欠けてしまっていました。 なお、このことは、以下の操作で確認できます: 【確認方法・A】  1)『受注一覧』クエリのコピーを適当な名前で作成  2)上記で作成したクエリの『会員』フィールドの左端に「会員名: 」を追加   (半角コロン「:」が入っているので注意:フィールドへの別名の指定方法)   →クエリをデータシートビューで開くと、『会員名』として表示されるように    なります。  3)同クエリを使用したレポートのコピーを適当な名前で作成  4)上記で作成したレポートの『レコードソース』を、上記で作成したクエリ   に変更  ⇒このレポートを開くと、『会員』がパラメータとして要求される。   (=テーブルの『会員』フィールドが参照できているわけではない、と) ※『名前の自動修正』オプションが有効になっていると面倒なので、コピーで   確認することをお勧めします。   (また、順序を変えると、自動修正でレポートのコントロールソースが書き   換えられ、意図した結果にならなくなる可能性があります) 【確認方法・B】  レポートのテキストボックスの『コントロールソース』に、『[受注一覧]![会員]』  と記述 ⇒このレポートを開くと、『会員』フィールドの値が正しく表示される。   (『クエリ内で、元となっているテーブルを参照』しているのと同様に、   『レポート内で、元となっているクエリを参照』することができている) <注意>  ここで指定するのはあくまで上記の式だけです。  先頭に『=』を入れると、『受注一覧』がパラメータとして要求されます。 ・・・以上です。 眠気が増してきたので、すみませんがこの辺で・・・ (支離滅裂になっていないとよいのですが(汗))

libu
質問者

お礼

「レコードソース」のヒントをいただき、あれこれ試してみました。 結局、レポートの演算の場合、フィールド名以外にテーブル名やクエリ名を 付加してフィールドを指定したものは、パラメータになってしまうみたいですね。 とりあえず、レポートで演算フィールドを作成する場合は、フィールド名のみ で計算させるようにしたいと思います。 長々とありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> この場合は、何故パラメータの入力メッセージが出てしまうのでしょうか。 クエリの場合、単一のテーブルからだけでなく、複数のテーブル(及びクエリ) から作成することが可能です。 このとき、すべてのフィールドで名前が異なれば問題ありませんが、複数の テーブル・クエリで同名のフィールドがあると、フィールド名だけではどちらを 参照すればいいかを判断できません。 そのため、クエリの場合は、構成要素となっているテーブル・クエリの名前 での修飾による参照が可能にされている、ということだと思います。 (もしもExcelでのワークシート関数の方がなじみがあるようでしたら、「同じ  シート内であれば『=A1』で参照できるのに対して、別シートの場合は  『=Sheet1!A1』」、別ファイルの場合は『='c:\Test.xls'!Sheet1!A1』と、  所属先を指定する必要が生じるのに近い・・・かもしれません(汗):  Sheet1が作成しようとしているクエリ、同ブックのSheet2・Sheet3が  テーブルに相当、といった感じ?(汗)) 一方、フォームやレポートの場合、そこに設置したテキストボックスやVBA から参照できるのは、あくまで「レコードソースに指定したテーブル・クエリ で定義されているフィールド」(=クエリの場合は、クエリのデザインビューで 『表示』のチェックがオンになっているフィールド)のみ、となります。 これは、レコード・フィールドとも相当数あった場合、必要なフィールドに 限定して読み込むことで、元となっているテーブル・クエリの全フィールド・ 全レコードを読み込むよりも動作を軽くするため、と考えられます。 その結果、「レコードソースのクエリ」で表示対象として指定されなかった 情報は隠蔽されてしまうため、『[取引先台帳]![会員]』という式を指定 すると、『取引先台帳』がパラメータ扱いされる、ということです。 ※『式ビルダ』は、フォーム・レポートの他、クエリの『抽出条件』欄などから  も使用可能(→クエリの場合は右クリックメニューから起動)に設計された、  いわば汎用ツールです。  このため、本来なら「当該クエリの元となっているテーブル」の場合でのみ  使用可能な「[テーブル名]![フィールド名]」の形の式が、その形では使用  不可能なフォームやレポートでまで、選択可能になってしまっているので  使用する際には注意が必要です。  (本当なら、使用可能なものだけに制限が掛かってしかるべき、というのは   ありますが、ある程度Accessになれてくると直接入力した方が早い、   といったこともあって、そこまでの手は掛けられていないものと推測) ・・・以上、納得のいく説明には程遠いと思いますが(汗)、参考まで。

libu
質問者

お礼

早速ご丁寧な解答ありがとうございます。 ただ、私の記述が少し足りなかったようで。 今回のレポートの基になっているクエリ「受注一覧」には、 [会員]フィールドを表示(デザインビューでチェック入ってます) させています。 ただ、レポート上は作成時に一度すべてのフィールドを入れて作成し、 その後設問の指示で不要なので削除しております。 (作成タブのレポートボタンにより作成) この場合も、同様に考えればよろしいのでしょうか。 どうやらAccessの仕様辺りが絡んできてるような感じですね。 ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A