Microsoft Access 掲示板

フォーム上で年月指定をして対象期間の合計値を表示したい

8 コメント
views
4 フォロー

作りたいもの

access初心者です。
売上管理のため指定した期間の合計を表示したいと考えております。
最終的には同じフォームにコンボボックスで年月指定を行いその結果を以下のように反映したいと考えています。
分かりやすいように表にしていますが実際はテキストボックスなどで作る予定です。

例) 2023年1月を選択

開始日終了日合計値
2023年1月1日2023年1月15日○○円
2023年1月16日2023年1月31日○○円

元になるテーブル

売上日金額
2023年1月1日○○円
2023年1月2日○○円
2023年1月3日○○円

できていること

年月指定のコンボボックスの作成
コンボボックスから該当する開始、終了日の表示(テキストボックス)
合計クエリ上で上記テキストボックスの日を使った合計値の算出(Betweenを使った式)

知りたいこと

個別ではやりたいことができたのですがうまく組み合わせて一つのフォームに結果を出すことができません。
解決策を探している際にフォームに結果まで表示するにはVBAがいるというのを見かけたのですが、
excelでVBAは多少使っているのでVBAを使う方法で問題ないです。
ご教授いただけますと幸いです。
よろしくお願いいたします。

うさぎ
作成: 2023/11/14 (火) 13:32:56
通報 ...
1
hiroton 2023/11/14 (火) 14:33:55 a415b@f966d

ちょっと理解しきれてないけど、月の前半と後半、金額を振り分けて合計したらいいんじゃない?

SELECT Format([売上日],"yyyymm") AS 年月
  , Sum(IIf(Day([売上日])<=15,[金額],0)) AS 月前半金額
  , Sum(IIf(Day([売上日])<=15,0,[金額])) AS 月後半金額
FROM 売上テーブル
GROUP BY Format([売上日],"yyyymm");

レコードが分かれていたほうが都合がいいならレコードごとに前半、後半のフラグを立ててそれでグループ化するとか

SELECT Format([売上日],"yyyymm") AS 年月
  , IIf(Day([売上日])<=15,0,1) AS 月内区分
  , Sum([金額]) AS 金額の合計
FROM 売上テーブル
GROUP BY Format([売上日],"yyyymm"), IIf(Day([売上日])<=15,0,1);

抽出条件/フィルタの設定をクエリに入れるか、VBAでやるかはお好みで

2
うさぎ 2023/11/16 (木) 11:26:30 >> 1

ありがとうございます。
こちらのクエリの結果を年月を指定したフォーム上に表1のような形で表示させたいと考えているのですがどのように行えばよろしいのでしょうか。

3
hiroton 2023/11/16 (木) 13:26:34 779ca@f966d

そのクエリをレコードソースにしたフォームを新たに作り、望みの表の見た目にしてメインのフォームにサブフォームとして設置したらそれっぽいと思います


仕様がよく分からないんでクエリの回答してますけど、フォーム上に2つの合計値が表示されればいいだけならテキストボックスで計算させてもいいんじゃないですかね?

DSUM 関数

=DSum("金額","売上テーブル","Format(売上日,'yyyymm')="&[年月指定]&" AND Day(売上日)<=15)
=DSum("金額","売上テーブル","Format(売上日,'yyyymm')="&[年月指定]&" AND Day(売上日)>15)

4
うさぎ 2023/11/17 (金) 10:27:30 >> 3

可能ならテキストボックス内で計算の方法をとりたいです。
売上の基準日が変わる可能性もあるため同じフォーム内の対象のラベル([開始][終了])から日付を持ってきて計算するようにしたいのですが以下だとエラーになります。

=DSum("金額","T_売上","売上日 Between #" & [開始] & "# And #" & [終了] & "#")
5
hiroton 2023/11/17 (金) 10:44:21 38ef6@f966d

「対象のラベル」とはどのように作ったものですか?
普通のテキストボックスを指定すれば特に問題なく動作すると思いますが

たとえば、正しく入力されたと想定して日付を直接記述して試してください

=DSum("金額","T_売上","売上日 Between #" & "2023/10/1" & "# And #" & "2023/10/31" & "#")

は想定した値が表示されますか?

また、

=[開始]
=[終了]

は、それぞれ入力しようとした値を表示しますか?

6
うさぎ 2023/11/17 (金) 15:22:53 >> 5
=DSum("金額","T_売上","売上日 Between #" & "2023/10/1" & "# And #" & "2023/10/31" & "#")

は想定した値がでてきます。

=[開始]
=[終了]

はエラーになります。
現在はコントロールボックスの更新後処理としてラベルに日付が入力されるようにしています。
ラベルではなくテキストボックスを利用すべきでしょうか。

7

ラベルのままで行くなら、Caption を参照するようにしてください。

=[開始].[Caption]
=[終了].[Caption]

テキストボックスにしておけば Caption は必要ないです。

テキストボックスの既定のプロパティ(省略したときに採用されるプロパティ)はValueですので、省略したら下記と同じ意味になります。

=[開始].[Value]
=[終了].[Value]

ラベルには既定のプロパティがないので、参照するプロパティ(Caption)を省略できません。。

8
うさぎ 2023/11/21 (火) 10:56:50 >> 6

ご回答ありがとうございます!
無事に合計値出すことができました。

テキストボックスとラベルについて性質を理解していないので勉強してみようと思います。
ありがとうございました。