web-dev-qa-db-ja.com

フィルターまたは他の数式によって返された配列をフィルターするにはどうすればよいですか?

フィルターによって返された配列をフィルター処理して、空白の列を削除したい。サンプルシートの写真を次に示します。

enter image description here

ここにサンプルシートがあります。

タイプbの行で大きなテーブルをフィルタリングしています。左側のキーを使用して列を取得しています。これは私のシートの非常に基本的な例で、b型の行が多数ある場合がありますが、b型の列は2つしかありません。列ヘッダーは他のヘッダーと同じである場合があり、キーに基づいて変更される場合があります。

1つのフィルターの結果を別のフィルターの内側に配置することにより、2次元フィルターを実行する方法を理解しています。ただし、フィルターの結果を単独でフィルター処理する方法はわかりません。

5列3行を返す数式がある場合。どうすればいいですか:「空白のすべての列を除外したい」。これは通常Filter(A1:E5, A:E <> "")のようなもので、A1:E5は実際にはスプレッドシート上に存在せず、代わりに数式の配列になります(技術的にはわからない)。

うまくいけば、これが私の最後の質問よりもよく説明されていることを願っています。

1
Douglas Gaskell

簡潔な答え

タイプによって識別される列の各セットに空白セルがないと仮定すると、二重のQUERYとTRANSPOSEを使用してそれらをフィルタリングできます。

=Transpose(
     QUERY(
         Transpose(
              QUERY(
                  E1:M13,
                  "Select * where M = '"&F15&"'",
                  1
              )
         ),
         "Select * Where Col2 <>''"
     )
 )

説明

Googleスプレッドシートには、OPによって呼び出された「列のフィルタリング」が可能な関数は含まれていませんが、目的の結果を得るにはいくつかの方法があります。この回答では、この方法の1つが提示されています。

数式の最も深い関数から最も浅い関数まで:

QUERY(E1:M13,"Select * where M = '"&F15&"'",1)

列Mに設定された型がセルF15に設定された値と一致するすべての列を返します。

最初のTRANSPOSE()出現

列を行に変更します。

この時点までの結果は、Xと呼ばれます。

QUERY( X , "Select * Where Col2 <>''")

元の列をフィルタリングし、値のない列を返します。 Col1はテーブルヘッダーに対応し、Col2は最初のQUERY()のフィルター条件に一致する行の最初の行に対応します。

2番目のTRANSPOSE()オカレンスは列を行に変更するため、結果の形状は元のデータの形状に対応します。

備考

Googleスプレッドシートでは、

  • arrayは、中括弧{}で囲むことで示すことができる2次元の値のセットです。
  • rangeは、セル参照(A1、A1:E5など)で示すことができる2次元のセルセットでもあります。
  • 関数または式のresultは、単一または複数の値です。技術的には、結果は1 X 1からn X mまでの2次元配列であると言えます

参照資料

3
Rubén