「riepilogo」(要約) シートのヘッダーで月を日付として表現した場合、数式でそれらを参照できます。行を年番号で開始することにより、年の変化に合わせて日付を簡単に調整できます。
たとえば、ここで A2 は単純な数字で表された年です。Gennaio (1 月) の B2 は、Date(year,month,day)
スプレッドシート関数を使用して日付を作成します (この場合は 2013/1/1)。次の月は、EDATE(date,number_of_months)
スプレッドシート機能を使用して、その後の各月の最初の日を設定します。

ここで、その月の日付を参照するように数式を調整します。date
オペレーターは「yyyy-mm-dd」の形式の日付を想定しているため、関数を使用して日付をフォーマットする必要がありますTEXT
。B3 の数式は次のようになります。
=INDEX(query('Scheda Intervento'!$C$2:$K$13;ʺselect sum (K) where (F >= date'ʺ & text(B$2,ʺyyyy-mm-ddʺ) & ʺ' and F < date 'ʺ & text(edate(B$2,1),ʺyyyy-mm-ddʺ) & ʺ' and C = 'ʺ & $A3 &ʺ')ʺ);2;1)
が再び使用されていることに注意してくださいEDATE()
。これは、式が同じ列の値のみに依存するようにするためです。必須ではありませんが、スプレッドシートの一番右の列で変更せずに使用できるので便利です。
年を A2 に入れる代わりに、次のことを選択できます。
- を使用して年を自動的に決定する
=year(today())
、または
- スプレッドシート内の別のセルを参照しています。
編集: Google スプレッドシートの日付に関するローカリゼーションの問題
上記の解決策は機能しますが、イタリアでは機能せず、おそらく他のロケールでも機能しません。Date()
Locale == Italia のユーザーの Google スプレッドシートでは、 関数と関数の両方EDate()
で「解析エラー」が発生します。
date
これを回避するために、以下のカスタム関数は、指定された日付値を の演算子に適した形式の文字列に変換しますQUERY
。カスタム関数の詳細については、このブログ エントリを参照してください。必要な作業は、[ツール] メニューから [スクリプト エディター...] を選択し、このコード ブロックをエディター ワークスペースに貼り付けて保存するだけです。スクリプトには任意の名前を付けることができます。
/**
* Return the given date as a string formatted as 'yyyy-mm-dd'.
*/
function date2string(dateval) {
var d = new Date(dateval);
var dateArr = [];
dateArr[0]=d.getFullYear();
dateArr[1]=d.getMonth() + 1; //Months are zero based
dateArr[2]=d.getDate();
return dateArr.join('-');
}
スクリプトを配置date2string()
すると、スプレッドシートで使用できる新しい関数が作成されます。セル C3 の更新された数式は次のとおりです。
=INDEX(query('Scheda Intervento'!$C$2:$K$13;"select sum (K) where (F >= date '" & date2string(C$2) & "' and F < date '" & date2string(D$2) & "' and C = '" & $A3 &"')");2;1)
INDEX() の問題
この式には別の問題があり、それはINDEX()
関数にあります。この関数は、配列内の項目にインデックスを付けるためのインデックスと共に、入力として配列を想定しています。QUERY()
これは、クエリ文字列の基準を満たすデータが見つかった場合にうまく機能します。その場合、からの戻り値QUERY('Scheda Intervento'!$C$2:$K$13;"select...
は次の 2 行配列のようなものになります。
Sum
54
その場合、INDEX([["Sum"],[54]];2;1)
結果は54
、配列の行 2 列 1 から選択された になります。
しかし、一致するデータがない場合、行 2 はなく、#REF
エラーになります。SUM()
配列の数値を加算するために使用するだけで、これを回避できます。数字がない場合は、0
- パーフェクトになります。
セル C3 の結果の数式は次のとおりです。
=SUM(query('Scheda Intervento'!$C$2:$K$13;"select sum (K) where (F >= date '" & date2string(C$2) & "' and F < date '" & date2string(D$2) & "' and C = '" & $A3 &"')"))