

Googleスプレッドシートにて、在庫表を作っています。  
シート1は入出庫履歴が蓄積されていくシートで、シート2は在庫表になってます。  
専用アプリから入力したデータがシート1に自動で蓄積されていきます。

シート1には下記内容が入っています。  
[![シート1](https://i.stack.imgur.com/PT7P4.png)](https://i.stack.imgur.com/PT7P4.png)

シート2にQueryでシート1のA列の品名ごとにB列、C列の合計を持ってきたいです。  
ただ、B列はD列が「入庫処理」のもののみの合計を持ってきたく、C列はD列関係なく表示されているものすべての合計を持ってきたいです。

下記関数までは組めたのですが、これだとC列もD列が「入庫処理」のものの合計になってしまいます。

`=QUERY('シート1'!A1:D,"select A, sum(B), sum(C) where D='入庫処理' and A is not null
group by A label A '品名', sum(B) '合計', sum(C) '引当数'", 1)`

[![シート2](https://i.stack.imgur.com/wx9FX.png)](https://i.stack.imgur.com/wx9FX.png)

結果のイメージとしては下記のような結果で表示してほしいです。  
（C列はシート1のＤ列関係なく合計したいので、製品Aの引当数が10ではなく、15になってほしい）  
[![画像の説明をここに入力](https://i.stack.imgur.com/95iGe.png)](https://i.stack.imgur.com/95iGe.png)

何か少しでもアドバイス頂けますと有難いです。  
宜しくお願い致します。

＊＊＊

（7/13追記）

Tanaike様

パターン２の関数を実際に使っているシートにあてはめました。  
例 実際  
品名 ：A列 E列  
数量 ：B列 Q列  
引当数 ：C列 K列  
入荷済み：D列 P列

※質問に記載した列と実際のシートの列が違っていてすみません。

=QUERY(BYROW('シート１'!A1:S,LAMBDA(value1,{index(value1,1,5),if(index(value1,1,16)="",0,index(value1,1,17)),index(value1,1,11),index(value1,1,16)})),"select
Col5, sum(Col17), sum(Col11) where Col5 is not null group by Col5 label Col5
'品名', sum(Col17) '合計', sum(Col11) '引当数'", 1)

エラーが発生してしまったのですが、なぜだか分かりますでしょうか。  
エラー内容  
「関数 QUERY のパラメータ 2 のクエリ文字列を解析できません: NO_COLUMN: Col5」  
※Col5 を E などに変えても同じエラーが出てしまいました。

また、BYROWやLAMBDAなどを使うのが初めてのため、そのあたりの使い方も間違っているかもしれません。  
合わせてご確認頂けますと幸いです。

以上よろしくお願いいたします。


CC BY-SA 4.0
2023-07-06T02:25:21.987
95494
2023-08-21T00:51:29.527
2023-08-21T00:51:29.527
51218
51218
question
google-spreadsheet
スプレッドシートのQueryで、ある列の値が条件を満たすものの合計と、総合計を同時に求めたい


例えば、次の2パターンはいかがでしょうか。

### パターン1

このパターンでは、列A-Cを列A,Bと列Cに分けて出力します。

[code]

    ={QUERY('シート1'!A1:D,"select A, sum(B) where D='入庫処理' and A is not null group by A label A '品名', sum(B) '合計'", 1),QUERY('シート1'!A1:D,"select sum(C) where A is not null group by A label sum(C) '引当数'", 1)}
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/6nLEb.png)](https://i.stack.imgur.com/6nLEb.png)

### パターン2

このパターンでは、最初に列Cに"入庫処理"のない列Bを0に変更することで、使用されているQUERY関数では"入庫処理"をチェックする必要がなくなります。

[code]

    =QUERY(BYROW('シート1'!A1:D,LAMBDA(value1,{index(value1,1,1),if(index(value1,1,4)="",0,index(value1,1,2)),index(value1,1,3),index(value1,1,4)})),"select Col1, sum(Col2), sum(Col3) where Col1 is not null group by Col1 label Col1 '品名', sum(Col2) '合計', sum(Col3) '引当数'", 1)
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/Uoycs.png)](https://i.stack.imgur.com/Uoycs.png)

## 追加

更新された質問への新たな回答は下記のとおりです。

まず、下記の新たな質問について、

>
> =QUERY(BYROW('シート１'!A1:S,LAMBDA(value1,{index(value1,1,5),if(index(value1,1,16)="",0,index(value1,1,17)),index(value1,1,11),index(value1,1,16)})),"select
> Col5, sum(Col17), sum(Col11) where Col5 is not null group by Col5 label Col5
> '品名', sum(Col17) '合計', sum(Col11) '引当数'", 1)

> エラーが発生してしまったのですが、なぜだか分かりますでしょうか。

理由は、`BYROW('シート１'!A1:S,LAMBDA(value1,{index(value1,1,5),if(index(value1,1,16)="",0,index(value1,1,17)),index(value1,1,11),index(value1,1,16)}))`で、`'シート1'!A1:S`の列を4列に縮小しているため、`select
Col5, sum(Col17), sum(Col11) where Col5 is not null group by Col5 label Col5
'品名', sum(Col17) '合計', sum(Col11) '引当数'`では、存在しない列を選択していることが原因と思われます。

この場合、`BYROW(###)`のみを変更して、queryについては変更する必要はありませんので、下記のように修正してください。

[code]

    =QUERY(BYROW('シート1'!A1:S,LAMBDA(value1,{index(value1,1,5),if(index(value1,1,16)="",0,index(value1,1,17)),index(value1,1,11),index(value1,1,16)})),"select Col1, sum(Col2), sum(Col3) where Col1 is not null group by Col1 label Col1 '品名', sum(Col2) '合計', sum(Col3) '引当数'", 1)
    
[/code]


CC BY-SA 4.0
2023-07-07T08:12:34.680
95516
2023-07-15T07:51:05.670
2023-07-15T07:51:05.670
19460
19460
95494
answer