2016-12-07 4 views
0

更新:Excelに移動して解決しました。 :(シート間の現在の日付に基づいてデータを合計する方法

私は毎週のためのページがあり、Googleのスプレッドシートを持っている。私は現在、名前はすべてのシートの両端に現れる回数の合計量をカウントするために、次のカスタム関数を使用しています。

function COUNTALLSHEETS(range, countItem, excluded) { 
try { 
    var count = 0, 
     ex = (excluded) ? Trim(excluded.split()) : false; 
    SpreadsheetApp.getActive() 
     .getSheets() 
     .forEach(function (s) { 
      if (ex && ex.indexOf(s.getName()) === -1 || !ex) { 
       s.getRange(range) 
        .getValues() 
        .reduce(function (a, b) { 
         return a.concat(b); 
        }) 
        .forEach(function (v) { 
         if (v === countItem) count += 1; 
        }); 
      }; 
     }); 
    return count; 
} catch (e) { 
    throw e.message; 
} 
} 
function Trim(v) { 
return v.toString().replace(/^\s\s*/, "") 
.replace(/\s\s*$/, ""); 
} 

ときI =COUNTALLSHEETS("$A$1:$G$40", A2, "Rosters") を使用して機能を実行することは、関数の第三引数によって除外ものを除くすべてのシート間で値を返します。この場合は、「名簿」と題したシートはカウントされません。

私の問題は、毎週ということです、私はexclのシートを更新する必要がありますuded。私は現在、将来予定されているシートをすべて除外しています。代わりに、以前の機能へのショートコールのだから、それはコード自体、または自動的に将来のシートを除外するための関数呼び出しを変更するにはどのような方法があり、より

=COUNTALLSHEETS("$A$1:$G$40", A2, "Rosters, 5-9Dec, 12-16Dec, ... etc.") 

のように見えますか?私は現在の日付を引っ張って、それをシートのタイトルと比較します(これは必要に応じて特定のフォーマットに合わせて変更することができます)。将来の日付のシートは除外します。

私に何かアイデアを教えてください。私ができるスプレッドシートのコピーを共有する必要がある場合。

+0

シート名がすべてある場合は、シート名を日付に変換できる文字列に変換します。その日と今日の日付を比較すると、それはうまくいくのでしょうか?したがって、すべてのシート名を取得し、それらをループし、シート名を解析して日付を今日の日付と比較します。次に、必要なテストを行い、そのシートを処理するか、シート名のリストをコンパイルして含めるか除外します。 –

+0

@SandyGood:うまくいくかもしれません。 Googleスプレッドシートには、日付が前後するかどうかを判断する方法があります。私はちょうどAPIを深く掘り下げなければならないでしょう。 –

+0

日付比較はJavaScript内部で行うことができます。 –

答えて

0

除外シートに定期的にアクセスする必要がありますか?それを隠して、隠されていないシートだけを数えるのはどうでしょうか?あなたの問題を解決するのと同時に、物事をより組織的/管理可能に保つことができます。私はあなたのユースケースを熟知していないので、これは正しい方向ではないかもしれません。

関連する問題