アイテムと価格が記載されたGoogleスプレッドシートがあります。列D
には価格があり、列C
にはアイテム名があり、その一部には複数の単語が含まれています。アイテムに複数の単語がある場合、最初の単語のみが本当に重要です。
私が達成したいのはこれです:
次に、結果を含む円グラフ(これは結局のところ食べ物です)を生成します。だから、例えば、私は持っているかもしれません:
1 C | D
-------------------+------------
2 Cheese | $9.08
3 Milk, 2L | $3.89
4 Avocado | $0.99
5 Avocado 3/$5 | $5.00
6 Apples Fuji | $2.75
7 Avocado | $1.49
8 Milk 4L | $4.75
9 Apples | $2.25
最終結果は次のようになります。
Cheese | $9.08
Milk | $8.64
Avocado | $7.48
Apples | $5.00
REGEXEXTRACT()
を使用して個々のフィールドを解析できることを知っています。
=REGEXEXTRACT(C3; "^([A-Za-z]+)")
予想どおり、Milk
を返します。同様に、FILTER()
を使用して列の合計を加算できることを知っています。
L | M
--------------------+----------
=UNIQUE( C2:C ) | =SUM( FILTER( D$2:D; L2=C$2:C ) )
=CONTINUE(C2, 2, 1) | =SUM( FILTER( D$2:D; L3=C$2:C ) )
...
しかし、これらを組み合わせて、REGEXEXTRACT()
によって変更されたアイテムの合計を加算します。私は次のようなことができることを望んでいました:
=UNIQUE( REGEXEXTRACT( C2:C; "^([A-Za-z]+)" ) )
そして
=SUM( FILTER( D$2:D; L2=REGEXEXTRACT(C$2:C, "^([A-Za-z]+)") ) )
ただし、範囲を指定すると、REGEXEXTRACT()
関数は配列ではなく文字列のみを提供します。私は式を試してみると:
=REGEXEXTRACT(UNIQUE(C2:C); "^([A-Za-z]+)")
私が得るエラーは「文字列ではない:Cheese」です。
だから私の質問は...この作品をどうやって作るのですか?
橋として「スクラッチ」ワークシートを作成する必要がありますか?数式内でREGEXEXTRACT()
結果セットの各要素をUNIQUE()
することは可能ですか?
私のアプローチは、最初にデータを「正規化」することです。
=ArrayFormula(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B))
そして、実際にこれを QUERY 関数で直接ラップして、目的の出力を生成できます。
=ArrayFormula(QUERY(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B);"select Col1, sum(Col2) where Col1 != '' group by Col1 label sum(Col2) ''";0))
ヘッダー行も出力できます:
=ArrayFormula(QUERY(IF({1,0};IFERROR(REGEXEXTRACT(A2:A;"^([a-zA-Z]+)"));B2:B);"select Col1, sum(Col2) where Col1 != '' group by Col1 label Col1 'Food Item', sum(Col2) 'Total'";0))