mygems

ExcelなしでCSVの列を合計する方法

CSVの列の合計・平均・個数やカテゴリ別合計を、Excelなしで。ターミナル、スプレッドシート、スマホでの簡単な方法。

執筆: mygems ·

列の合計を出すのは、CSVでいちばんよくある作業です。答えはたいてい、ファイルを開いたアプリの中でワンクリックで出ます。厄介なのは、間違った合計も正しい合計とまったく同じに見えることです。通貨記号、エクスポートが末尾に足した合計行、数百行の重複があるだけで合計はずれますが、画面にはそれを知らせるものが何もありません。

先に結論

  • ExcelまたはSheets: 列を選択します。合計は下のバーに表示されます。
  • カテゴリ別: ピボットテーブル、またはSUMIFを使います。
  • コマンドライン: csvstat、mlr、またはDuckDBのクエリ1つ。後述します。
  • スマートフォン: 選択範囲の統計を表示できるCSVアプリで列を選択します。
  • 毎回: 数値の個数と空でないセルの個数を比べます。違っていれば、足されていない値があります。

ワンクリックで合計

Excelでは、列の見出し文字をクリックします。下のステータスバーに平均、データの個数、合計が表示されます。ステータスバーを右クリックすると、最小値、最大値、数値の個数を追加できます。

Googleスプレッドシートでは、列を選択すると右下に合計が表示されます。クリックすると、平均、個数、最小、最大に切り替えられます。

ほとんどの間違いを見つけるチェック: データの個数(空でないセル)と数値の個数を比べます。金額が5,000件ある列なら、どちらも5,000になるはずです。数値の個数が4,870なら、130個のセルは文字列で、合計から漏れています。

数式で出す

=SUM(D:D)
=SUMIF(B:B, "Travel", D:D)
=SUMIFS(D:D, B:B, "Travel", C:C, ">=2026-01-01")

SUMIFは、別の列が条件に合う行だけを合計します。SUMIFSは条件をいくつでも指定できます。

カテゴリ別の合計

「カテゴリ別の支出合計」は、カテゴリごとに数式を書くのではなく、ピボットテーブルで出します。

  • Excel: 挿入 → ピボットテーブルを選び、カテゴリを行に、金額を値にドラッグします。初期設定は合計です。個数になっている場合、その列は文字列です(後述)。
  • スプレッドシート: 挿入 → ピボットテーブル。考え方は同じです。

コマンドラインで

csvkitは、すべての列、または1列を要約します。

csvstat -c amount expenses.csv

Millerで、カテゴリごとにグループ化した合計:

mlr --icsv --opprint stats1 -a sum,mean,count -f amount -g category expenses.csv

DuckDBは、どんなサイズのファイルでも、どんな問い合わせでも使えます。

duckdb -c "SELECT category, sum(amount) AS total, count(*) AS rows FROM 'expenses.csv' GROUP BY ALL ORDER BY total DESC"

awk -F,は避けてください。 Stack Overflowの回答はどれも勧めていますが、これはすべてのカンマで分割します。"Smith, Jane"のような引用符で囲まれたフィールド内のカンマでも分割し、何も警告せずに違う列を合計します。

合計が間違う理由

以下はどれも、それらしい数字を出してしまいます。

数値ではない値

  • 通貨記号: $1,200.00。多くのツールは文字列として扱い、スキップします。
  • 桁区切り: CSV内の1,200は、引用符付きの文字列であることがよくあります。
  • 小数点のカンマ: ヨーロッパのシステムが出す1.200,50は、ドイツ語圏の読み手には1200ですが、英語圏のツールでは文字列か1.2になります。
  • 会計式のマイナス: (450.00)は財務系のエクスポートでは−450を意味しますが、それ以外のツールでは文字列です。多くは返金なので、スキップすると合計が実際より大きくなります。
  • プレースホルダー: N/A、-、TBC。

先ほどの個数チェックで、これらはすべて見つかります。可能なら元データで直してください。難しければ、合計する前に列を整えます。

あってはならない行

  • 合計行。 銀行や会計のエクスポートは、末尾に「Total」や「Closing balance」が付くことがよくあります。含めたまま合計すると、2倍になります。最初の合計を信じる前に、最後の数行を見てください。
  • 重複。 重なり合うエクスポートをつなげたファイルでは、重なった部分が二重に数えられます。CSVの重複行を削除する方法を参照してください。
  • 繰り返しのヘッダー行。 複数のCSVを手で連結すると、ヘッダー行がデータの途中に紛れ込みます。文字列なのでスキップされますが、比較対象の行数を水増しします。

符号

出金をマイナス、入金をプラスで書くエクスポートもあれば、別々の列に分けるものもあり、プラスの金額に別の「借方/貸方」列を付けるものもあります。3つ目のタイプで金額列を合計すると、残高ではなく取引総額になります。銀行明細CSVのガイドで、よくあるレイアウトを説明しています。

Excelが先に値を変えていた

列が金額ではなく長いIDやコードだった場合、ダブルクリックで開いた時点で丸められているかもしれません。合計よりも検索への影響が大きい問題ですが、原因は同じです。ExcelはCSVのデータを変更します。開くときに起こります。

スマートフォンで

スマートフォンの表計算アプリも選択範囲の合計を表示しますが、CSVを変換してからになります。CSVアプリなら、ファイルのまま計算できます。

Smart CSV Viewerでは、列名をタップして列を選択し、下のバーの上にある概要行をタップするとSelection statsが開きます。サイズ、入力済みと空のセルの数、数値についてはその個数、合計、平均、最小、最大が表示されます。1,234.50、$5、1.234,50のどの書き方も数値として数えられます。数字をタップするとコピーできます。

Budget列のSelection statsシート。30セル、空でないセル30、数値30、合計75,100、平均2,503.33、最小900、最大6,500
Numbers 30 / Non-empty 30:スキップされた値はなし

NumbersとNon-emptyの比較は、先ほどの個数チェックそのものが組み込まれています。先にフィルターをかければ、統計は一致した行だけが対象になり、ピボットテーブルなしでカテゴリ別の合計が出せます。

CSV File Viewer - Smart CSViPhone・iPad · Android

iPhoneやAndroidで列を選ぶだけで、個数、合計、平均、最小、最大を表示します。通貨記号と2種類の小数表記に対応し、先にフィルターをかければ小計も出せます。

できること

30秒でできる最終チェック

合計をメールに書く前に確認します。

  1. 個数と数値の数。 空でないセルがすべて数値として数えられている。
  2. 最後の5行。 合計、残高、フッターの行がない。
  3. 最大値。 降順に並べて先頭を見ます。小数点を1つ置き間違えただけで合計が100倍ずれるのは、いちばんよくある失敗です。

よくある質問

CSVファイルの列を合計するにはどうすればいいですか?
ExcelまたはGoogleスプレッドシートで開いて列を選択すると、ウィンドウの下に合計が表示されます。表計算ソフトを使わない場合は、csvkitのcsvstat、Millerのstats1、またはSELECT sum(amount) FROM 'file.csv'のようなDuckDBのクエリを使います。
CSVの列の合計が合わないのはなぜですか?
多くの場合、一部の値が文字列になっているためです。通貨記号、桁区切り、小数点のカンマ、かっこで書かれた会計式のマイナス、N/Aのようなプレースホルダーなどが原因です。数値セルの個数と空でないセルの個数を比べると確認できます。エクスポートの末尾に合計行がないか、重複行がないかも確認してください。
CSVの列をカテゴリ別に合計するにはどうすればいいですか?
ExcelやGoogleスプレッドシートのピボットテーブルで、カテゴリを行に、金額を値に入れます。コマンドラインでは、DuckDBのGROUP BYクエリや、-g付きのMillerのstats1が1行で同じことをします。
Excelで合計ではなく個数が表示されるのはなぜですか?
列が文字列として保存されているため、Excelはセルを数えられても足し算はできません。列を数値に変換するか、値が数値として読み取られなくなっている通貨記号や区切り文字を取り除いてください。
Excelなしで、CSVの列を合計できますか?
できます。Googleスプレッドシートは無料で、csvkit、Miller、DuckDBなどのコマンドラインツールなら1行で列を合計できます。スマートフォンのCSVアプリの中には、選択した列の合計、平均、最小、最大をそのまま表示するものもあります。

mygems — CSV EditorとSmart CSV Viewerを開発しています。表計算ソフトが大きなファイルで音を上げるから生まれたアプリです。