UEFA EURO 2012のチームとそのスコアを含むGoogleスプレッドシートがあります。
_Team Points Goals scored
------ ------ ------------
Germany 6 3
Croatia 3 3
Ireland 0 1
... ... ...
_
次に、そのリストをフィルタリングして、結果に関係するチームのサブセットのみが含まれるようにします。具体的には、結果のリストにチーム、ドイツ、オランダ、ポルトガル、イタリア、イングランド、フランス、スペインおよびクロアチア。
FILTER
関数を使用してテーブルから単一の値を抽出できることはわかっています。したがって、おそらく=FILTER(A2:C; A2:A = 'Germany' OR A2:A = 'Netherlands' OR A2:A = 'Portugal' OR ...)
のようなFILTER
式を書くことができますが、チームのリストは動的なものなので、これを避けたいと思います。
だから問題は:単一の値だけでなく、値の範囲でテーブルをフィルタリングするにはどうすればよいですか?
私と同じようにこのスレッドに出くわした回答者は、こちら Googleプロダクトフォーラムページ を参照してください。ここでは、Yogiとahabの両方が、データの範囲をフィルタリングする方法の質問に対する解決策を提示しています。別の範囲のデータ。
A3:C
にフィルタリングするUEFA EURO 2012データの範囲が含まれ、D3:D
にフィルタリングするチームのリストが含まれる場合、E3
...
=FILTER(A3:C, MATCH(A3:A, D3:D,0))
または
=FILTER(A3:C, COUNTIF(D3:D, A3:A))
逆に、D3:D
にリストされているチームではないでフィルタリングする場合は、E3
...
=FILTER(A3:C, ISNA(MATCH(A3:A, D3:D,0)))
または
=FILTER(A3:C, NOT(COUNTIF(D3:D, A3:A)))
これらは、これらの関数の有効性を示すために作成した スプレッドシートの例です 。
FILTER
の範囲の不一致に苦労している人のために=FILTER(A1:A, MATCH(A1:A, B1:B, 0))
=FILTER(A1:A, COUNTIF(B1:B, A1:A))
=FILTER(A1:A, ISNA(MATCH(A1:A, B1:B, 0)))
=FILTER(A1:A, NOT(COUNTIF(B1:B, A1:A)))
FILTER
式を使用して2つの範囲間の評価を返す必要があり、これらの2つの範囲が異なるサイズ(クエリから返される場合など)であり、同じサイズに一致するように変更できず、FILTER has mismatched range sizes. Expected row count: etc.
エラーが発生した場合、これは回避策です:
簡単にするために、フィルターの範囲がA1:A10およびB1:B8、配列括弧{}
を使用して、範囲B1:B8
に2つの仮想行を追加し、REPT
を使用してサイズA1:A10
を一致させることができます。
次に、このREPT
式に、+ 1を修正/フェイルセーフとして追加する必要があります(2つの初期範囲の差が1の場合)。REPT
は、最低2回の繰り返しで機能します。したがって、ある意味では、B1:B11
の範囲を(B1:B8
から)作成する必要があり、後で範囲から最後の行を切り捨てて、B1:B10
に対してA1:A10
になるようにします。 REPT
に2つの一意の記号を使用します
次のステップは、REPT
をSPLIT
にラップし、2番目の一意の記号で除算することです。次に、(さらに必要に応じて)このSPLIT
をTRANSPOSE
にラップする必要があります(列のサイズを列のサイズに一致させるため)、最後のステップはQUERY
にラップし、limit
を次の簡単な計算で出力を再度出力しますCOUNTA(A1:A10)
最後の担当者を削除します。まとめると、次のようになります。
=FILTER(A1:A10, NOT(COUNTIF(QUERY({B1:B8;
TRANSPOSE(SPLIT(REPT("♂♀", COUNTA(A1:A10)-COUNTA(B1:B8)+1), "♀"))},
"limit "&COUNTA(A1:A10), 0), A1:A10)))