最上行に製品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つのアプローチは、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")