web-dev-qa-db-ja.com

Googleスプレッドシートの表からセルの配列を返す方法

最上行に製品SKUSを含む#EXAMPLE TABLEがあり、最初の列は材料です。各SKU行には、成分行の値が表示されています。ユーザーがさまざまなSKUから選択できるドロップダウン付きの別のシートを作成し、2つの列を動的に表示する数式(= query?)を作成します。成分値が0より大きい場合、そのSKUの成分名と成分値。ネストされた= ifではなく、= queryのような動的関数でこれを実行したいと思います。

# EXAMPLE TABLE

ingredients     cake        pie         quiche
flour           2           1           1
sugar           3           3           -
apples          -           2           -
berries         -           1           -
cheese          -           -           2
eggs            1           -           2

# EXAMPLE VIEW

Thing to make:   [ dropdown  ]

# USER selects from EXAMPLE VIEW

Thing to make:      [ cake ]    <---- user makes choice

# EXAMPLE VIEW returns:

Thing to make:      [ cake ]

flour   2
sugar   3
eggs    1

# or user selects   [ quiche ]

# EXAMPLE VIEW returns:

Thing to make:      [ quiche ]

flour   1
cheese  2
eggs    2

=query'ExampleTable'!A:D, "select A where C > 0")を使用してみましたが、値が0より大きい成分名を返すので、配列[小麦粉、チーズ、卵]を返しますが、これは非常に近いですが、完全な結果ではありません。探しています。

1
jöhg

1つのアプローチは、filterquerying itの前のテーブルです。次に、テーブルがA1:D7にあり、製品の選択がセルF1にある例を示します。

=query({A1:A7, filter(B1:D7, B1:D1 = F1)}, "select * where Col2 > 0")

ここで、filterは、列名がF1と一致する列のみを保持します。配列表記{}は、2列の配列を作成します。最初の列はA1:A7(成分名)で、2番目の列は数量です。最後に、queryは、数量が正の行を選択します。

これは上記のより装飾されたバージョンで、一致するものがない場合は「レシピが見つかりません」を表示し、label ... ''を使用して出力の列名を省略します。

=iferror(query({A1:A7, filter(B1:D7, B1:D1 = F1)}, "select * where Col2 > 0 label Col1 '', Col2 ''"), "no recipe found")
0
user135384