GoogleスプレッドシートのQUERYで、元データに数値があるのに抽出結果が空欄になる場合、同じ列に数値と文字列が混ざっていないかを調べます。Google公式のQUERY仕様では、1列に型が混在すると多数派の型が列の型として採用され、少数派の型はnullとして扱われます。これは単なる表示形式の問題ではありません。
数字があるのにQUERY結果が空になる例
A列が商品名、B列が数量で、B2〜B6に100、200、300(数値)と"400"、"500"(文字列)が混在しているケースを考えます。全体では数値が多数派なので、QUERY結果の数量列に文字列の2件が欠損として見える場合があります。
=QUERY(A1:B6,"select A,B where A is not null",1)
元のセルをクリックすると400と読めても、QUERYが解釈する値の型は異なることがあります。型混在の列での少数派の扱いは公式仕様ですが、同数・空白を大量に含む例の判定を勝手に断定せず、実データに即して確認します。
数値と文字列が混ざる列を判別
データを直接書き換える前に、別の作業コピーで型を調べます。
=ISNUMBER(B2)
=ISTEXT(B2)
TRUEの分布を数行比較し、元CSVを読み込んだ行、別シートから貼った行、先頭ゼロが必要なコード列を分けます。商品コードは数字に見えても数量と異なり文字列のまま扱うべき場合があります。すべての数字風文字列をVALUEで変換するのは危険です。
元データを変えずに補助列で型を揃える
数値として集計することが確定している列のみ、補助列C2で変換を試します。
=IF(B2="","",IFERROR(VALUE(B2),""))
変換できなかった値を別列で検査します。例えばD2に次を置き、元B列が非空なのにC列が空の行を抽出します。
=IF(AND(B2<>"",C2=""),"要確認","")
C列を数値に統一した表をQUERYへ渡しますが、変換不能行を黙って除外せず、D列の「要確認」をゼロにするか原因を特定します。"1,200円"のような文字列を、機械的に取り除いた数字だけで数量と決めてはいけません。
合計と欠損件数を照合する
検算では元データ行数、変換成功行数、欠損・変換不能行数を分けます。例なら元5件、うち数量として確定した5件なら、QUERY後も5件の数量が見え、合計は1,500です。逆に400と500が文字列として無視されたままだと元の合計とは一致しません。
QUERYの結果が出たことだけを成功としないで、元明細の各行と型、合計、欠損数を照らし合わせてください。日付列も内部的に数値型として扱われることがあるため、数値・文字列・日付で混在しているときは別途整理します。
