今回は、”X月”と月を指定するのではなく、”当月”という形で動的に特定期間の実績を集計する方法を紹介します。使用するのはSUMIFS関数とEOMONTH関数です。それぞれの関数の基本的な使い方については以下を参照ください。
今回使用する販売実績テーブルは以下です。
当月の販売実績を集計する方法
まず手っ取り早く答えを知りたい人向けに、数式を掲載します。
=SUMIFS(I2:I500, C2:C500, ">=" & EOMONTH(NOW(), -1) + 1, C2:C500, "<=" & EOMONTH(NOW(), 0))
この数式によって、以下の結果が返ってきました。
テーブルを調べて、正しいか確認します。なお、現在は24年6月です。
確かに、合計すると11,970となります。
なお今回のテーブルは、150行目が最終行ですが、余裕をもって500行目までを集計対象としています。VBAを使用する場合は、最終行を取得して正しい範囲で計算されることもできます。VBAによる最終行の取得方法は以下を参照ください。
テーブルを使う方法
なお、テーブルを設定することで、正しい範囲を常に参照させることもできます。同じデータを、下では販売実績テーブルとして設定しています。
数式は以下の通りです。
=SUMIFS(販売実績[販売価格(合価)], 販売実績[受注日], ">=" & EOMONTH(NOW(), -1) + 1, 販売実績[受注日], "<=" & EOMONTH(NOW(), 0))
ロジックを解説
では、上の集計がどのようなロジックになっているのかを解説します。数式を再掲します。
=SUMIFS(I2:I500, C2:C500, ">=" & EOMONTH(NOW(), -1) + 1, C2:C500, "<=" & EOMONTH(NOW(), 0))
動かしたのは、2024/6/9です。
以下のようにEOMONTH関数を使うことで、当月の最初の日を取得できます。
次に、以下のようにEOMONTH関数を使うことで、当月の末尾を取得できます。
ここから、最初の長い数式は以下のようになっていることがわかります。
=SUMIFS(I2:I500, C2:C500, ">=2024/6/1", C2:C500, "<=2024/6/30")
ここまでくれば、全体が見通せますね。SUMIFSでしている2つの条件を言葉に書き下すと、C列、つまり受注日が①2024/6/1以降、かつ②2024/6/30以前となり、両方を満たすのは、6月中、となります。
EOMONTH関数の中でNOWやTODAYを使っていれば、常に”当月中”という条件を指定することができるのです。
コメント