web-dev-qa-db-ja.com

Googleスプレッドシートに欠落している日付を追加する

HubSpotからサードパーティコネクタ経由でGoogleスプレッドシートにデータを取得しています。シート1に未加工のデータセットがあり、クエリ機能を使用して特定のデータをシート1から他のシートにプルしています。

たとえば、シート2には、Webサイトでのフォーム送信の日付と値があります。次に出力例を示します。

Date          Value
9/15/2019     1
9/16/2019     2
9/18/2019     1

ご覧のとおり、その日にフォームが提出されなかったため、9月17日は欠落しています。ただし、シートへの送信がない日も含めたいと思います。望ましい出力は次のとおりです。

Date          Value
9/15/2019     1
9/16/2019     2
9/17/2019
9/18/2019     1

シート2 A1にQUERY関数があり、シート1の生データは毎日自動的に更新されるため、そこにとどまる必要があります。可能であれば、シート2の列Fに希望の出力を表示したいと思います。

誰かがこれを手伝ってくれる?


編集:

screenshot&example

上記のスクリーンショットから現在のクエリを確認できます。このクエリでは、contactsシートが未加工のデータシートです。列A:DはQUERYの結果であり、列G:Jは私が達成したい結果です。私の例(列G:J)では、2つの行を強調表示しています。列A:Dからわかるように、2019年9月6日と2019年7月7日のデータがあります。このように欠けている日付を追加することは、私が達成しようとしていることです。

2
Mike

単一の数式ソリューションを探しているようですが、特にGoogleスプレッドシート関連の機能の仕組みに慣れていない場合は、それらを理解して維持するのが難しい場合があります。

関連機能

  1. 日付。 Googleスプレッドシートは日付をシリアル番号として扱います。1日は1単位です。
  2. 上記の機能により、ROW(A:A)を使用して日付形式を適用することで日付のリストを作成できます(メニュー[形式]> [数値]をクリックし、次に目的の日付形式をクリックします)。
  3. 配列。 https://support.google.com/docs のヘルプ記事Using Google Arraysを参照してください。スプレッドシートで小数点区切り記号としてカンマ_,_を使用する場合は、列のセパレータとして使用するのではなく、円記号_\_を使用してください。
  4. QUERY。 SQLステートメントでは、最初の引数として参照を使用する場合、列名にA、B、C表記を使用しますが、次の場合、列名に_Col1_、_Col2_、_Col3_表記を使用配列が最初の引数として使用されます。

シンプルな代替

  1. Sheet1から空白行を削除します。
  2. Sheet1のソースデータに日付のリストを追加します。例

    _=ArrayFormula({Sheet1!A:B;Sheet1!A2+ROW(A1:A30),IFERROR(ROW(A1:A30)/0,)})
    _
  3. QUERY数式で、上記の数式の結果の範囲を最初の引数として使用します。

欠けている日付のみを追加したい場合は、上記の式の代わりに次を使用します。

_=ArrayFormula(
  FILTER(
    {Sheet1!A2+ROW(A1:A30),IFERROR(ROW(A1:A30)/0,)},
    ISNA(MATCH(Sheet1!A2+ROW(A1:A30),Sheet1!A:A,0))
  )
)
_

「複雑な」代替

  1. Sheet1から空白行を削除します。
  2. QUERYの最初の引数として{Sheet1!A:B;Sheet1!A2+ROW(A1:A30),IFERROR(ROW(A1:A30)/0,))}を使用し、2番目の引数(SQLステートメント)で列名をA、B、C表記からCol1、Col2、Col3表記に変更します。結果の式は次のようになります。

    _=ArrayFormula(
      QUERY(
        {Sheet1!A1:B30;Sheet1!A2+ROW(A1:A30),IFERROR(ROW(A1:A30)/0,)},
        "SELECT Col1,Col2"
      )
    )
    _

    または

    _=ArrayFormula(
      QUERY(
        FILTER(
          {Sheet1!A2+ROW(A1:A30),IFERROR(ROW(A1:A30)/0,)},
          ISNA(MATCH(Sheet1!A2+ROW(A1:A30),Sheet1!A:A,0))
        ),
       "SELECT Col1,Col2"
      )
    )
    _

備考

  • 簡単にするために、Sheet!A2+ROW(A1:A30)を使用して最初の日付の後に30の日付を追加します。さらに必要な場合は、より高い参照を使用します。

  • SQLステートメントで_GROUP BY_句を使用している場合は、最初の数式を最初のQUERY引数として使用します。

  • _A1:A30_の代わりに_A:A_を使用できますが、この参照のサイズを制限する方法も使用します。 1つの代替方法は、_ARRAY_CONSTRAIN_を使用することです。

関連する

2
Rubén