LWP | QUERYで集計から抜ける金額を見つける
QUERYで集計から抜ける金額を見つける
図解1|四つの明細、合計は16,400円のはず

図1|一行が一つの受注明細。まず、何を合計する表なのかをそろえる。
解説1|四つの明細、合計は16,400円のはず
ストーリー
ナマズさん「この4件をまとめたいんだけど、合計は16,400円になるはずなんだ。」
ココさん「受注明細ごとの金額ですね。元の受注メモと対応させてから、QUERYで集計してみます。」
全国規模の中華食材卸・淡水社の架空の教材表を使う。一行は一つの受注明細で、同じ商品でも受注が別なら別の行になる。金額は円単位の受注額で、税・送料・値引きは含めない。
入力例の元になる受注メモ
受注明細 |
商品・規格 |
数量×単価 |
金額 |
|---|---|---|---|
O001-1 |
干ししいたけ500g |
6袋×1,200円 |
7,200円 |
O001-2 |
豆板醤1kg |
4本×800円 |
3,200円 |
O002-1 |
干ししいたけ500g |
3袋×1,200円 |
3,600円 |
O003-1 |
豆板醤1kg |
3本×800円 |
2,400円 |
各明細を数量と単価で確かめると、7,200+3,200+3,600+2,400=16,400円となる。以降はこの4件を、A列に受注明細、B列に元金額を置いたGoogleスプレッドシートで扱う。
読むポイント
集計結果だけを見て「正しそう」と判断せず、元の受注メモで件数と金額を確かめておく。その比較があれば、計算結果が不足したときに、どの明細が関係するかを調べられる。
図解2|見た目が数字でも、値の種類が違う

図2|表示が2400でも、数値として入っているとは限らない。
解説2|見た目が数字でも、値の種類が違う
ストーリー
ナマズさん「14,000円? 2,400円足りないな。でも、表の最後にも2400と書いてあるよ。」
ココさん「表示だけでは分からないので、最後のセルに入っている値の種類を確認しましょう。」
入力例
新しいシートへ下表を入力する。B5だけは、半角のアポストロフィを先頭に付けて '2400 と入力する。セル上の表示は2400でも、値は文字列として保持される。引用符を含む文字を表示させる操作とは区別する。
行 |
A列 |
B列 |
|---|---|---|
1 |
受注明細 |
元金額 |
2 |
O001-1 |
7200 |
3 |
O001-2 |
3200 |
4 |
O002-1 |
3600 |
5 |
O003-1 |
'2400と入力 |
数式と結果
F1:F2を空けて、F1へ次の式を入れる。
=QUERY(A1:B5,"select sum(B) label sum(B) '受注金額合計'",1)F1には「受注金額合計」、F2には14000が表示される。sum(B)はB列の合計、labelは結果の見出しを指定する部分。第3引数の1は、入力範囲の先頭1行を見出しとして扱う指定である。
読むポイント
この教材では、原因を再現するためB5だけを意図的に文字列にした。実務では、外部からの貼り付けや取込みなどで同じ混在が起きていないかを調べる。
図解3|文字列の2400は、QUERY内でnull扱い

図3|元セルの値と、QUERYが集計に使う値を分けて見る。
解説3|文字列の2400は、QUERY内でnull扱い
ストーリー
ココさん「この列には数値が3件、文字列が1件あります。QUERYは多い方の型を使い、少ない方の型の値をnullとして扱います。」
ナマズさん「元の2400が消えたんじゃなくて、QUERYの集計に使われていないんだね。」
一つの列で型が混在すると、QUERYは多数を占める型を列の型として使う。この例では数値が多数なので、文字列の2400はQUERY内でnullとして扱われ、数値の合計に加わらない。エラーが出なくても、業務上必要な金額がすべて集計されたとは限らない。
関数の役割
元セル |
元の値の型 |
QUERY内での扱い |
|---|---|---|
B2:7200 |
数値 |
7200 |
B3:3200 |
数値 |
3200 |
B4:3600 |
数値 |
3600 |
B5:2400 |
文字列 |
null |
数値3件を足すと14,000円になる。nullは「元の受注金額が0円」という意味ではなく、今回のQUERY内で有効な数値として扱われていないということ。元シートのB5は書き換わらない。
読むポイント
「QUERYは文字列をすべて無視する」と一般化しない。文字列が多数を占める列なら、選ばれる型も違う。この記事は数値3件・文字列1件の金額列に絞り、同数の場合の型選択は扱わない。
図解4|ISNUMBERで、型の違うセルを見つける

図4|見た目や配置から推測せず、値が数値かどうかを式で調べる。
解説4|ISNUMBERで、型の違うセルを見つける
ストーリー
ココさん「C列を確認用に使いましょう。ISNUMBERなら、数値はTRUE、それ以外はFALSEになります。」
ナマズさん「最後の1件だけFALSEだ。受注メモの2,400円と対応しているね。」
入力例と数式
C1に「数値判定」と書き、C2へ次の式を入れてC5までコピーする。各行の式が、同じ行のB列を見ることを確かめる。
=ISNUMBER(B2)計算結果
行 |
A列 |
B列 |
C列 |
|---|---|---|---|
1 |
受注明細 |
元金額 |
数値判定 |
2 |
O001-1 |
7200 |
TRUE |
3 |
O001-2 |
3200 |
TRUE |
4 |
O002-1 |
3600 |
TRUE |
5 |
O003-1 |
2400 |
FALSE |
ISNUMBERは数値に見える文字列を数値へ変換せずに判定する。B5の表示が2400でも、値が文字列ならFALSEである。B5を右寄せにしたり、表示形式を通貨へ変更したりしても、この判定の代わりにはならない。
読むポイント
FALSEだからといって、その行を削除しない。今回は元の受注メモで2,400円と確認できるため、数値への変換を検討できる。空欄や「未確定」などの文字が入っている場合は、それぞれの業務上の意味を先に確認する。
図解5|元金額を残して、別の列で数値へ直す

図5|判定と変換を分け、直した値を元明細と照合できるようにする。
解説5|元金額を残して、別の列で数値へ直す
ストーリー
ナマズさん「元の入力を消すと、あとで違いを追いにくいな。」
ココさん「B列は残して、D列で数値に直します。変換できない値があれば、エラーのまま原因を確認しましょう。」
入力例と数式
D1に「数値化」と書き、D2へ次の式を入れてD5までコピーする。この教材のB2:B5は、数値または金額を表す数字の文字列だけである。
=VALUE(B2)計算結果
元セル |
元の値の型 |
変換先 |
変換後の値 |
|---|---|---|---|
B2:7200 |
数値 |
D2 |
数値7200 |
B3:3200 |
数値 |
D3 |
数値3200 |
B4:3600 |
数値 |
D4 |
数値3600 |
B5:2400 |
文字列 |
D5 |
数値2400 |
VALUEはGoogleスプレッドシートが認識できる文字列を数値に変換する。今回のD2:D5はすべて数値となる。空いているセルで =ISNUMBER(D5) を試すとTRUEになる。一方、B5は文字列のままなので、C5の判定はFALSEのままでよい。
読むポイント
VALUEで変換できない文字列はエラーになる。IFERRORで一律に0へ置き換えると、「0円の明細」と「変換に失敗した明細」を区別しにくくなる。また、日付らしい文字列も数値へ変換される場合がある。変換できたことだけで、正しい受注金額と判断しない。
図解6|直した列で再集計し、四つの金額を照合する

図6|各行の金額を受注メモと照合し、変換後の4件がすべて数値かも確かめる。
解説6|直した列で再集計し、四つの金額を照合する
ストーリー
ココさん「集計する列をD列へ変えたら、16,400円になりました。」
ナマズさん「4件とも受注メモと一致している。これなら、何を直した結果なのかも説明できるね。」
数式と結果
F列の集計を比較用に残し、H1:H2を空けてH1へ次の式を入れる。
=QUERY(A1:D5,"select sum(D) label sum(D) '受注金額合計'",1)元の式から、入力範囲をA1:D5へ広げ、sumの対象をBからDへ変えた。H1は「受注金額合計」、H2は16400になる。F2の14000との差は2400で、文字列だったO003-1の金額と一致する。
結果の照合
確認対象 |
確認できる結果 |
|---|---|
明細の対応 |
O001-1、O001-2、O002-1、O003-1の4件 |
D2:D5の値 |
7200、3200、3600、2400 |
D2:D5の数値判定 |
4件ともTRUE |
変換前の集計F2 |
14000 |
変換後の集計H2 |
16400 |
合計だけなら、別の誤りが相殺して一致することもある。各行の金額、数値型、件数まで確認し、入力元のどこで文字列になったかも調べる。次回の取込み後も同じ確認を行えば、同種の集計漏れを見つけやすい。
出典
Google公式:QUERY / ISNUMBER / VALUE。2026-11-03確認。会社・取引・価格は説明用の架空例。
