web-dev-qa-db-ja.com

GoogleスプレッドシートでARRAYFORMULAをクエリで使用する方法

リスト内のすべての行に対して実行する必要があるクエリがあります。単一の行に対して記述されている場合、うまく機能します。

QUERY(MaraRankData,
  "select J,I,H,G,F,E where 
    A='"&E3&"' and 
    B='"&B3&"' and 
    C="&C3&" and 
    D="&D3&"",
  0
)

必要に応じて、データの行が出力されます。しかし、ARRAYFORMULAでラップすると、多くの行ではなく1行のみが出力されます。

=ARRAYFORMULA(
  QUERY(MaraRankData,
    "select J,I,H,G,F,E where 
      A='"&E3:E&"' and 
      B='"&B3:B&"' and 
      C="&C3:C&" and 
      D="&D3:D&"",
    0)
)

Googleスプレッドシートではエラーがスローされないため、何が間違っているのかわかりません。すべての行で数式を繰り返す必要がないように、ARRAYFORMULAをクエリで動作させるにはどうすればよいですか?

8
Stobber

arrayformula(query(...))の組み合わせはサポートされていません。 queryが配列の配列を処理したり、クエリ文字列の配列を実行したりするという概念はありません。

次の2つのオプションがあります。(a)すべての行でqueryを繰り返します。 (b) vlookup を使用して、以下で説明するように、データの列を取得します。例えば:

=arrayformula(vlookup(E3:E, {A3:A, J3:J}, 2, false))

一度にE3:Eの1つの要素を取り、列Aでこの要素を見つけ、列Jの対応する要素を取得します。このアプローチでは、列J、I、H、G、Fを取得するために6つの個別のvlookupが必要です。 E。ただし、行ごとに個別のコマンドは必要ありません。

複雑なのは、vlookupが1つの検索キーのみを受け入れ、4つのパラメーターで検索したい場合、

A='"&E3&"' and 
B='"&B3&"' and 
C="&C3&" and 
D="&D3&

これを回避するには、これらを1つの検索キーに連結します。Z、

=arrayformula(E3:E & "|" & B3:B & "|" & C3:C & "|" & D3:D)

4つの検索パラメーターを1つのパイプ区切り検索キーに連結します。検索するテーブルに対して同じことを行い、vlookupを使用してこれらのキーを比較します。

8
user79865