GoogleスプレッドシートでQUERYを使用してARRAYFORMULAを使用する方法


10

リストのすべての行に対して実行する必要があるクエリがあります。単一の行に書き込むとうまく機能します。

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をQUERYで動作させることができますか?


Query()式をArrayformulaでラップすることに関する赤赤ワインによるコメントをサポートするため。すでに配列型の結果を返す/生成する数式をラップする必要はありません。つまり、「Filter」、Unique、「Transpose」などにArrayformulaを適用しない
Xzila

1
また、ほとんどの場合、クエリを使用できますが、フィルター式は機能します。そうすれば問題を簡単に解決できると思います。
Xzila

@Xzilaでこれを行う方法がある場合はfilter、回答を投稿してください。そのような解決策に興味があります。

2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)最初の部分は、中括弧で列を並べ替えることです。2つ目は、AからEは、Bがそれ自体を見て、Cがそれ自体を見て、重要な唯一の列のように見えるためです。たぶん私は理解していません。
Xzila 16

回答:


10

この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、ただし、行ごとに個別のコマンドは必要ありません。

複雑なのは、vlookup1つの検索キーしか受け入れず、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


3
最初のステートメントに関して、arrayformula内のネストクエリは最初の引数に対して機能します。参照してくださいwebapps.stackexchange.com/a/97658/88163
ルベン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.