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

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

新規登録して質問してみよう
ただいま回答率
85.35%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1696閲覧

Access レポートのテキストボックスに、列名を参照した値を持ってくる

ryoya_access

総合スコア34

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/07/31 05:42

編集2020/07/31 13:23

レポートのテキストボックスに、列名を参照した値を持ってくる

Access(2007-2016)で、人月商売の損益管理データベースを作成しています。
レポートで、従業員の勤務時間と時間単価を参考にして予算との損益を計算したいのですが、思うようにレポートが作成できません。

初歩的な質問かもしれませんが、お力を貸していただけると助かります。
以下、詳細になります。

テーブル・リレーション

〇使用テーブルは7つで、以下のようにリレーションを組んでいます。
イメージ説明

リレーションの主な意図としては、以下のようになっています。

〇勤怠テーブルと稼働テーブルが1:多
例)
勤怠テーブル(1):Aさんが7/1に8時間働いた
稼働テーブル(多):↑の内訳は、受注明細Aに3時間、受注明細Bに4時間、受注明細Cに1時間だった

〇受注テーブルと受注明細テーブルが1:多
例)
受注テーブル(1):顧客Aから7/1に受注があった
受注明細テーブル(多):↑の受注内容は、タスクAとタスクCの契約だった

受注テーブル(1):顧客Bから7/3に受注があった
受注明細テーブル(多):↑の受注内容は、タスクBとタスクCとタスクEの契約だった

1.顧客テーブル---------------
顧客ID:オートナンバー
顧客名:短いテキスト

顧客ID 顧客名
1 ○○商事
2 ○○広告
3 ○○電気

2.受注テーブル---------------
受注No:オートナンバー
受注日:日付
顧客ID:数値

受注No 受注日 顧客ID
1 2020/07/01 1
2 2020/07/01 2
3 2020/07/01 3

3.受注明細テーブル-------------
受注No:数値
タスクID:数値
予算額:数値

受注No タスクID 予算額
1 2 200
1 3 300
2 1 10
2 2 20
2 3 30
2 4 40
2 5 50
3 4 40
3 5 50

4.タスクテーブル----------------
タスクID:オートナンバー
タスク名:短いテキスト

タスクID タスク名
1 業務A
2 業務B
3 業務C
4 業務D
5 業務E

5.勤怠テーブル----------------
勤怠管理No:オートナンバー
社員ID:数値
出社日:日付
出社時間:日付/時刻
退社時間:日付/時刻

勤怠管理No 社員ID 出社日 出社時間 退社時間
1 1 2020/07/02
2 2 2020/07/02
3 3 2020/07/02
4 1 2020/07/03
5 2 2020/07/03
6 3 2020/07/03
7 4 2020/07/03
8 5 2020/07/03
9 3 2020/07/07

6.稼働テーブル------------------
稼働管理No:オートナンバー
勤怠管理No:数値
受注No:数値
タスクID:数値
稼働時間:数値

稼働管理No 勤怠管理No 受注No タスクID 稼働時間
1 1 1 3 4
2 1 1 2 5
3 1 3 5 2
4 2 1 2 3
5 2 2 1 3
6 3 3 5 2
7 4 3 4 10
8 5 3 4 6
9 5 1 3 7
10 6 1 2 8
11 7 2 5 9
12 7 3 4 4
13 8 3 4 3
14 9 3 5 4

7.社員テーブル------------------
社員ID:オートナンバー
社員名:短いテキスト
時給:数値

社員ID 社員名 時給
1 一郎 100
2 二郎 200
3 三郎 300
4 四郎 400
5 五郎 500

以上のテーブルから作成したクロス集計クエリ「Q_メイン」

イメージ説明

イメージ説明

これをもとにレポートを作ります。

###レポート
クロス集計クエリ「Q_メイン」の全てのフィールドを選択
イメージ説明

グループレベルは顧客名>作業月
イメージ説明

以下のように集計のオプションを設定し、レポートを作成します。
イメージ説明

すると以下のようなレポートが完成します(少し体裁を整えました)。
イメージ説明

これに、テキストボックス(青部分)を追加し、各業務への稼働時間×時給の計算結果を入れます。
イメージ説明

ここが本題になるのですが、以下の画像のオレンジ部分のようにテキストボックスを追加し、損益を計算したいのですが、実装方法が分かりません。
イメージ説明

デザインフォームはこのようになっています。
イメージ説明

顧客名と、列名になっている業務内容(業務A~D)に紐づけて、予算額を引っ張ってくる方法はあるのでしょうか?

顧客名は変動しますが、列名はどの顧客名でも固定(業務A~Dの4つ)なので、ヘッダーの顧客名さえ参照できれば、予算額を持ってこれる気もしているのですが、理解が足りずどうしたらよいか分かりません。

お力をお貸しいただけると助かります。よろしくお願いいたします。

※以下参考までに、顧客-タスク別予算額のクエリです。
イメージ説明

※追記:DLookUpで持ってきた予算額の合計
教えていただいた方法で、月ごとに損益を計算することは出来ました(オレンジ部分)。
しかし、それを顧客ごとに集計しようとすると、予算部分の合計が上手くいきません(黄色部分の「総予算」)。
イメージ説明

例えば業務Bの総予算(黄色部分)は、200+200で400になっているはずなのですが、どこから数字を持ってきたか1000になっています。「顧客名フッター」の他の部分の集計はうまくいっているのですが、予算だけが数字が合わないです。

黄色部分の「総予算」のテキストボックスには、オレンジ部分をSum()でくくった以下のようなコードを記入しています。

=Sum(DLookUp("予算額","Q_予算額","顧客名='" & [顧客名] & "' AND タスク名='業務A'"))

※オレンジ部分の「予算」のコード

=DLookUp("予算額","Q_予算額","顧客名='" & [顧客名] & "' AND タスク名='業務A'")

同フッターの他のテキストボックスのように、単純にSumするだけではダメなのでしょうか?

イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

※以下参考までに、顧客-タスク別予算額のクエリです。

そのクエリがあるならDLookup関数で参照すればどうでしょうか。

例えば「業務A」の予算額のコントロールソースなら下記のような式にすればよさそうです。

=DLookup("予算額","顧客-タスク別予算額","顧客名='" & [顧客名] & "' AND タスク名='業務A'")

投稿2020/07/31 08:27

hatena19

総合スコア34075

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

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

ryoya_access

2020/07/31 11:39

理想の解決方法まさにこれでした!クエリを作ってDLookup関数を使うことで、出来ることの幅がとても広がりそうです…非常に助かります(初歩の初歩なのかもしれませんが…笑)。ありがとうございました!!
ryoya_access

2020/07/31 13:25

1点追加でお聞きしたいことがあるのですがよろしいでしょうか。「※追記:DLookUpで持ってきた予算額の合計」に詳細を記載させていただきました。 教えていただいた方法で、月ごとに損益を計算することは出来ました(オレンジ部分)。しかし、それを顧客ごとに集計しようとすると、予算部分の合計が上手くいきません(黄色部分の「総予算」)。この部分は何がいけないのでしょうか…。
hatena19

2020/07/31 15:52

Sum関数はレコードソースにあるフィールドを対象に集計するものです。 レコードソースにないものは集計できません。 顧客-タスク別予算額のクエリには、年月のフィールドがないのに、その予算を集計するというのは矛盾してませんか。まずはその辺を考え直して、そのうえで、希望の集計ができるクエリにして、DSum関数を使って集計するという方法になります。
guest

0

レポートのレコードソースに予算が含まれるようにして、コントロールで=SUM()を指定する。
AccessのレポートにSUM関数を使用した合計を追加する方法

投稿2020/07/31 06:13

sazi

総合スコア25327

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

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

ryoya_access

2020/07/31 07:52

情報を追加しました。予算の性質が一か月単位で発生する(「○○商事の業務Bに対して、1カ月200円」のように)ため、単にレコードに予算を追加すると、「○○商事の業務B」が行われるたびに予算が計上されてしまいます(一郎、三郎、二郎のレコードにそれぞれ予算が200円計上されている)。 これを月に1度のみオレンジ部分に表示したいと考えています。 例)業務Bのオレンジ部分には「200」、業務Cのオレンジ部分には「300」が入り、合計予算は「500」になる形です。 情報・説明力不足で申し訳ありません。
ryoya_access

2020/07/31 07:55

その後も色々と考えたのですが、レポートのテキストボックスに、『=[顧客名]![業務A]![予算]』([顧客名]の業務Aの予算)のようにベタ打ちできる方法があれば1番良いのではないかと思いました。そのような方法はあるのでしょうか…?
sazi

2020/07/31 07:56

それはレコードソースの元になっているクエリーで何とかする話ですね。 レポートではその顧客・タスク毎の予算をSUM()するだけにした方が良いと思うので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問