0

年ごとに日付を自動的にインクリメントするクエリを実行する必要があります。たとえば、次の式を使用します。

=INDEX(query('Scheda Intervento'!C3:K14;"select sum (K) where (F >= date '2013-01-01' and F <= date '2013-01-31' and C = '" & A3 &"')");2;1)

...しかし、毎年、数式に表示される日付をどこでも変更する必要があります(2014年、2015年)など。

私のスプレッドシートのコピーはここで共有されます。この数式は、シート「riepilogo totale ore , date, compensi operatore」のセル C2 にあります。

今後数年間、数式が自動的に更新されるようにするにはどうすればよいですか?

4

1 に答える 1

0

「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 &"')"))
于 2013-04-23T17:43:04.517 に答える