web-dev-qa-db-ja.com

別のタブのデータに基づいて列名を動的に作成する

さまざまな連絡先フォームの私のウェブサイト上のすべての提出を記録するGoogleシートを持っています。各連絡フォームが送信された回数と送信された週を知る必要があります。

目標は、Googleシートを次のようにすることです(Googleシートの各タブは、これらのフォームと同じ名前です)。

Week Commencing | Number of Submissions
  1st July 2019 | 37
  8th July 2019 | 7

私が持っているデータは次のようになります:(「データ」という名前のタブ内)

form name                         | date 
Custom Printed Premium Gift Boxes | 7/4/2019 12:01:28

Googleシートへのリンク: https://docs.google.com/spreadsheets/d/1ffOVvGT7CGV3gXR1HP5kp6Pg1JgD40qRjlt6lwwFbo0/edit?usp=sharing

私の質問:

  1. データタブからの送信をカウントし、週ごとの合計を正しいタブに入れるにはどうすればよいですか?
  2. 週番号を取得して「2019年7月1日」という正しい行タイトルに変換し、その週の送信数を正しいセルに入力するにはどうすればよいですか?
  3. 私がやっていることを達成するためのより良い方法はありますか?スクエアペグ/丸穴ですか?
2
Tjobbe
  • 週番号を導出するには:

    =ARRAYFORMULA(IF(LEN(B2:B), WEEKNUM(B2:B, 2), ))

    0


  • それを各週番号の最初の日に変換するには:

    =ARRAYFORMULA(IF(LEN(B2:B), VLOOKUP(WEEKNUM(B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), "d. mmmm yyyy")}, 2, 0), ))

    0


  • 完全な要約表を作成するには:

    =ARRAYFORMULA(QUERY(IF(LEN(B2:B), {VLOOKUP(WEEKNUM(B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), "d. mmmm yyyy")}, 2, 0), A2:A}, ),
     "select Col2,Col1,count(Col1) 
      where Col1 is not null 
      group by Col1,Col2 
      label count(Col1)''"))

    0


  • それを正しいタブに配置するには(スクリプトを使用-手動再計算):

    function sheetName() {
    return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
    }
    =ARRAYFORMULA(QUERY(QUERY(IF(LEN(data!B2:B), 
    {VLOOKUP(WEEKNUM(data!B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                               DATEVALUE(MAX(data!B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                               DATEVALUE(MAX(data!B2:B)))), 
     "d. mmmm yyyy")}, 2, 0), data!A2:A}, ),
     "select Col2,Col1,count(Col1) 
      where Col1 is not NULL 
      group by Col1,Col2 
      label count(Col1)''", 0), "select Col2,Col3 where Col1='"&SHEETNAME()&"'", 0))

    0


  • それを正しいタブに入れる(スクリプトなし-手動入力)

    =ARRAYFORMULA(QUERY(QUERY(IF(LEN(data!B2:B), {VLOOKUP(WEEKNUM(data!B2:B, 2), 
    {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                           DATEVALUE(MAX(data!B2:B)))), 2),
     TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                           DATEVALUE(MAX(data!B2:B)))), 
    "d. mmmm yyyy")}, 2, 0), data!A2:A}, ),
    "select Col2,Col1,count(Col1) 
    where Col1 is not NULL 
    group by Col1,Col2 
    label count(Col1)''", 0), "select Col2,Col3 where Col1='Contact Form'", 0))

    0

0
user0