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

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

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

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

SQL

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

データベース

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

4716閲覧

Access:フォームで表示中のレコードのみを計算対象にする

ryoya_access

総合スコア34

Access

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

SQL

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

データベース

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2020/09/23 02:36

実現したいこと

現在Access(2007-2016)で勤怠管理のデータベースを作成しており、フォームで社員ごとに勤怠情報のレコードを表示させています。Accessフォーム上のDCount関数,DSum関数について分からない点があり、質問させていただきます。

フォーム右上に、フォームに表示しているレコードの数と、その勤務時間合計を表示する部分を作りたいのですが、「フォーム表示中のレコードのみ計算対象にする」という処理の仕方を教えていただけないでしょうか。

イメージ説明
例)上の画像の場合、Bさんの総レコード数は6なので、出勤回数は「6」と表示される
イメージ説明
例)「今月データのみ表示」ボタンを押して9月のレコードのみ表示させたとき、9月のレコード数は3なので、この場合は出勤回数「3」と表示されるようにしたい

・レコードソース名:T_勤怠
・ヘッダー左のテキストボックス名:「Txt_氏名」
・右上の出勤回数のテキストボックス:=DCount("*","T_勤怠","[氏名]=" & [Txt_氏名])

現在このようになっています。検索力不足もありGoogleで解決方法を見つけられなかったので、ヒントになるWebサイトを教えていただけるだけでも有難いです。お力添えよろしくお願いします…!

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

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

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

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

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

kuma_kuma_

2020/09/23 02:46

質問の内容からするとリアルタイムで変更したい と受け取れるのですが間違いないでしょうか? また回答にはVBAの知識が必要となる内容となりますがよろしいでしょうか?
guest

回答2

0

ベストアンサー

出勤回数のテキストボックスのコントロールソースを

=Count(*)

とすればフォームに表示されているレコードの件数になります。

勤務時間合計は下記の式で。

=Sum([退勤時間]-[出勤時間]-[休憩時間])

リアルタイムで反映されます(レコード保存後に)。

投稿2020/09/23 02:48

編集2020/09/23 04:18
hatena19

総合スコア34075

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

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

ryoya_access

2020/09/23 03:21

Dsum,Dcountではなく、単純にSum,Countと書くことで表示中のレコードのみを対象にできるのですね。1点追加で質問させていただきたいのですが、Count("*")にカウントの条件を付けることは可能でしょうか。 ネットで「Access Count 条件」などと調べても、Dcount関数の記事ばかり出てきてしまいまして… 実際は、フォームには1か月分(1日~末日)のレコードがすべて表示されていて、その中から「出勤時間」が記入されているレコードのみカウントする、といった形で利用したいと思っています。情報開示不足で申し訳ありませんが、よろしくお願いします。
hatena19

2020/09/23 05:17 編集

Count("*") ではなく Count(*) です。 > その中から「出勤時間」が記入されているレコードのみカウントする 「出勤時間」が記入されていない=Null ということなら、 =Count([出勤時間]) でOKです。Nullはカウントしないので。 ただ、画像を見ると既定値が 0 になっているので、0は未入力という意味なら、下記のような式になります。 =Count(IIf([出勤時間]=0,Null,[出勤時間])) あるいは、 =Sum(IIf(Nz([出勤時間])=0,0,1))
ryoya_access

2020/09/23 05:41

無事、やりたかった機能を実装できました。 丁寧に回答いただきありがとうございました。
guest

0

RecordsetClone
という現在フォーム上で表示させているレコードのコピーを取得する方法があります。
このレコードから集計を行って表示する関数を用意すればよいのです。

投稿2020/09/23 05:42

編集2020/09/23 05:43
kuma_kuma_

総合スコア2506

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

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

ryoya_access

2020/09/23 07:24

丁寧に回答いただきありがとうございました。「RecordsetClone」を知らなかったため、大変勉強になります。今回は先に回答をくださったhatena19様にベストアンサーをつけさせていただきました。今後も機会がありましたら、どうぞよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問