0

これは、私が回避できない単純な問題のようです。次の式があります(正常に動作します)。

=MEDIAN(FILTER('Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3))

私が望むのは、ArrayFormula を使用して、B3 だけでなく B3:B の範囲の列ごとの結果を取得することです

これはできますか?

4

1 に答える 1

0

SELECT ... WHERE... IN (valA,valB...)最初のアイデアは Google QUERY 関数を使用することでしたが、標準の SQL句をサポートしていません。しかし、あなたが望むことは で達成可能ですARRAYFORMULA。トリックは、2 つの列を適切に一致させ、エラーを処理し、適切なフィルタリング (読みやすくするために複数行) を適用することです。

=MEDIAN(FILTER(Filtered-Data'!$D$4:$D,
  ARRAYFORMULA(IF(IFERROR(MATCH
   (Filtered-Data'!$D$4:$D,'Filtered-Data'!$C$4:$C=B3:B,0),0)>0,TRUE,FALSE)))) 

説明:

  1. ARRAYFORMULA(MATCH(col1,col2,0))値一致基準を含む配列の最初の行を検索します。0/1 は、一致が上から始まるか下から始まるかを決定します。スタンドアロン使用の場合、MATCH最初の結果を生成した後に停止します。適用するとARRAYFORMULAMATCH必要なものに近づくことができます。結果の配列が生成されます。ただし、アイテムが一致しない場合はエラーが返されるため、列に次のようなものが表示されます。

    N/A 
    2
    3
    1
    3
    2
    N/A
    N/A
    N/A
    1
    3
    
  2. 常にある種の行番号が必要なので、これらN/Aは何の役にも立ちません。すべてを古き良き「0」IFERRORに置き換える が来ます: Google スプレッドシートは「0」から行をカウントすることはありません (「1」から始まり、オフセットのみがゼロから始まります)。 " - あなたのケースにとって安全なものに変更するよりも。N\AIFERROR(MATCH(col1,col2,0),0)

  3. FILTER は、filtering_criteria でブール値の単一列配列またはブール値の配列 ( https://support.google.com/drive/table/25273?hl=en ) に評価される式を想定しているため、そのようなブール値の配列を確実にARRAYFORMULA生成する必要があります。IF便利です - 常に TRUE または FALSE を生成します:IF(IFERROR(MATCH(col1,col2,0)>0,TRUE,FALSE)

  4. そのようなものにARRAYFORMULAを再適用して、配列で作業し、単一の結果ではなく配列の結果をレンダリングします。ARRAYFORMULA(IF(IFERROR(MATCH(col1,col2,0)>0,TRUE,FALSE))それを内部に配置しFILTERます...出来上がり、動作します。

参照については、http: //productforums.google.com/forum/#!topic /docs/PpnZinkLzQs を参照してください。

于 2013-09-25T15:23:36.993 に答える