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

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

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

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

3004閲覧

Accessのレポートで、一部の項目だけを別に集計する方法

ryoya_access

総合スコア34

VBA

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

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/07/27 05:06

前提・実現したいこと

Access(2007-2016)で、従業員の稼働時間を管理するデータベースを作成したいと思っています。
Accessのレポートで、一部の項目だけを別に集計する方法がわからず質問させていただきました。

詳細は以下のようになっております。

###詳細

〇テーブルは3つです

1.社員テーブル

社員ID:オートナンバー型
社員名:短いテキスト

社員ID 社員名
1 一郎
2 二郎
3 三郎
4 四郎
5 五郎

2.タスクテーブル

タスクID:オートナンバー型
タスク名:短いテキスト

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

3.稼働テーブル

稼働ID:オートナンバー
稼働日:日付型
社員ID:数値
タスクID:数値
稼働時間:数値

稼働ID 稼働日 社員ID タスクID 稼働時間
1 2020/07/01 1 1 2
2 2020/07/01 1 2 3
3 2020/07/01 3 2 2
4 2020/07/02 5 5 3
5 2020/07/02 5 4 4
6 2020/07/02 4 5 2
7 2020/07/03 3 1 2
8 2020/07/06 2 3 5

〇以上3つのテーブルからクロス集計を使って以下の「集計クエリ」を作成しました

イメージ説明

イメージ説明

稼働日 社員名 業務A 業務B 業務C 業務D 業務E
2020/07/01 一郎 2 3
2020/07/01 三郎 2
2020/07/02 五郎 4 3
2020/07/02 四郎 2
2020/07/03 三郎 2
2020/07/06 二郎 5

このクエリを基にレポートを作成したとき、業務A,業務Bはそのまま表示して、業務C,業務D,業務Eを合わせて列名「その他」として合計表示させる方法はあるのでしょうか。

DSumを使うのかな…と考えたりもしたのですが、一部の項目のみを集計して、残りはそのまま表示させる方法がわからず止まってしまいました。

基本的な動きなのかもしれませんが、どうぞお知恵を貸していただけますと助かります。よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

レポートであれば列名とかはラベルでどうとでもなると思うので
テキストボックスのコントロールソースに

「=nz([業務C],0)+nz([業務D],0)+nz([業務D],0)」
「=nz(sum([業務C]),0)+nz(sum([業務D]),0)+nz(sum([業務D]),0)」

とやればよいのでは?

投稿2020/07/27 06:32

sousuke

総合スコア3830

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

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

sazi

2020/07/27 06:38

Nz()は賢いので、演算の中で使用されると数値の0を返却してくれますから、省略しても大丈夫です。 その分、式が短くて済みます。
sousuke

2020/07/27 06:42

「書いておけば文字か数字か意図しているほうがわかる」ので私は必ず記載しています。 ぶっちゃけ好みでいいかと思います。ほとんどミスしないのはわかっていますが、私は書く派ですね~
ryoya_access

2020/07/27 07:19

ご回答いただきありがとうございます。確かに、レポートであればテキストボックスを置いて、数式を入力すればそこまで難しいことをせずに実現できますね…(汗。フォームとレポートが頭の中でごちゃごちゃになり、難しく考えすぎてしまっていました。ありがとうございました。
sazi

2020/07/27 07:19

老婆心でコメントしておきますと、レポート内での集計は数に上限がありますので、多用はせず極力SQLで行う事をお薦めします。
ryoya_access

2020/07/27 07:26

@sazi様 コメントいただきありがとうございます。今はAccessの機能に頼っていますが、今後SQLやAccessVBAについてもきちんと勉強する必要性を感じました。勉強になります、ありがとうございます。
guest

0

タスクテーブルの代わりに以下のクエリーと結合するのが一番簡単だと思います。

SQL

1select タスクID, iif(タスクid in (3,4,5), 'その他' , タスクテーブル.タスク名) as タスク名 2from タスクテーブル

クロス集計をSQLビューで編集し、上記に置き換えることも可能です。

投稿2020/07/27 05:36

編集2020/07/27 06:41
sazi

総合スコア25327

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

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

ryoya_access

2020/07/27 07:22

ご回答いただきありがとうございます。恥ずかしながらまだSQLを使いこなせていないため、今回はsousuke様の回答をベストアンサーにさせていただきます。今後Accessを触るうえではSQLの勉強も必要になると思うので、sazi様が教えてくださった方法での解決も目指してみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問