ExcelでCSVが1,048,576行で切れる。1年分120万件は11月15日で止まり、上書き保存で15万1,425件が消えた

2026-10-06Excelの使い方

Excelのシートに入るのは1,048,576行までで、見出しを1行使えば明細は1,048,575件までになる。1年分120万件の売上明細のCSVを開くと、11月15日の途中で止まり、そこから先の151,425件は画面に出てこない。

怖いのはそのあとだ。警告を閉じてCtrl+Sを押すと、確認の画面は1つも出ずにCSVが上書きされ、ファイルから151,425件と、金額にして6億9,639万9,300円分の行が消えた。1日あたりで見ると、2,873件を超える明細は1年分が1枚のシートに入らない。

1年分120万件のCSVは、ダブルクリックで開くと1,048,575件、上書き保存したCSVも1,048,575件、xls形式で保存し直すと65,535件、Power Queryで月ごとに集計すると1,200,000件がExcelに残る

確かめたのはMicrosoft 365のExcel(バージョン16)、Windows 11で、2026年10月6日。行数の上限は、MicrosoftのExcelの仕様と制限で、ワークシートの行数と列数が1,048,576行、16,384列となっているのを同じ日に読んだ。明細はすべて架空で、2026年1月1日から12月31日までに伝票番号1から1,200,000を割り振り、1日に約3,288件ずつ並べたCSVを作った。

ExcelでCSVを開くと1,048,576行目で切れる。1年分の明細は11月15日で止まった

作ったCSVは見出しを入れて1,200,001行、28.8MBある。これをダブルクリックと同じ開き方で開くと、4秒ほどで開き、A列の数字の個数は1,048,575、最後の行は伝票番号1,048,575の2026年11月15日だった。11月15日の明細3,288件のうち3,095件までが入り、残りの193件から先が切れている。

月ごとに数えると、10月までは全部残り、11月は半分、12月は1件も残らなかった。

月 元のCSVの件数 Excelに残った件数 消えた金額
10月 101,918 101,918 0円
11月 98,630 49,122 227,636,582円
12月 101,917 0 468,762,718円
1年 1,200,000 1,048,575 696,399,300円

切れたシートでSUMを取ると、金額の合計は48億2,275万1,700円になった。元のCSVでは55億1,915万1,000円で、12.6%少ない。エラーにはならない。年間の合計として出された数字が、11月半ばまでの合計だったことは、表のどこにも書かれない。

仕組みは単純だ。Excelは開いたCSVを1行目からシートに流し込み、1,048,576行目まで来たら止める。入らなかった行は、ブックの中のどこにも持っていない。列も同じで、2万列のCSVを開くと16,384列目のXFDまでしか入らなかった。1,048,576は2の20乗、16,384は2の14乗で、Excelの形式が決めているシートの大きさになる。

1日あたりに直すと、1,048,575件を365日で割って2,872.8件。1日2,872件までなら1年分が1枚に入り、2,873件だと1年分は1,048,645件で、大晦日の最後の70件が入らない。12か月で割れば、1か月87,381件が境目になる。

「データセットのサイズが大きすぎます」と出たあと、Ctrl+Sを押すと15万件が消える

ダブルクリックで開くと、画面の真ん中に次の警告が出た。

Excelのグリッドに対して、このデータセットのサイズが大きすぎます。
このブックを保存すると、読み込まれていないデータは失われます。

ボタンはOKの1つだけだ。押すとシートが出て、上に黄色い帯で「データ損失の可能性」と出る。ただ、これはCSV形式で保存すると書式などが失われるという、どのCSVを開いても出る案内で、行が足りないこととは関係がない。

ここでCtrl+Sを押した。確認の画面は出ず、そのまま上書きされた。保存後のCSVは1,048,576行、23.8MBに減っていて、最後の行は「1048575,2026/11/15,7375」だった。元の日付は2026-01-01の形で書いていたが、保存後は2026/1/1の形に変わっていた。日付の列が別の形で書き戻されることは、日付が文字列や数字になる記事で数えた話とつながる。

MicrosoftのデータセットがExcelグリッドに対して大きすぎる場合の対処方法にも、元のファイルを上書きして保存すると読み込まれなかったデータはすべて失われる、と書かれている(2026年10月6日に確認)。保存が要るなら、ファイルの「コピーを保存」で別の名前にする、というのが同じページの案内だ。このページに載っている警告の文は「グリッドには大きすぎます」という言い回しで、私の画面に出た文とは違った。検索するときは両方で探すとよい。

もう1つの落とし穴は、警告が出ない開き方があることだ。マクロや外部のツールがCOMでExcelを動かしてCSVを開いた場合、警告を出す設定にしていても画面には何も出ず、1,048,575件のシートがそのまま返ってきた。毎朝CSVを開いて集計し、ブックに保存する仕組みを作っていると、件数が上限を超えた日から誰にも知らされずに数字が欠ける。

1行多いだけで警告が出る。改行の数で数えると、入るCSVを入らないと思う

境目も確かめた。見出しを入れてちょうど1,048,576行のCSVは、警告なしで開いた。1行足して1,048,577行にすると警告が出た。消えるのは最後の1件だけで、消えたことには行数を数えないと気づかない。

逆向きの取り違えもある。メモ欄に改行を含む明細が2万件あるCSVを作った。ファイルの改行を数えると1,068,576行で上限を超えるが、明細は見出しを除いて1,048,575件。開くと警告は出ず、1,048,575件が全部入り、メモ欄の改行はセルの中の改行として残った。Excelが数えているのは改行の数ではなく明細の件数だ。改行で行数を数える道具で「入らない」と判断して、分ける必要のないCSVを分けていたことになる。

xls形式も試した。開いた120万件をExcel 97-2003の形式で保存し直すと、開き直したシートは65,536行で終わり、明細は65,535件、1月20日で止まった。古い形式で受け渡すように決まっている取引先があると、ここで94.5%が消える。

1件ずつ見たいなら、開始する行を変えて2回に分けて開く

明細を1件ずつ確かめたいときは、1回目に頭から1,048,576行を開き、2回目に続きから開く。テキストインポートウィザードの1つ目の画面に、インポートを始める行を指定する欄がある。

2回目の開始する行は、見出しの行数+1,048,575+1で1,048,577になる。COMのOpenTextで開始行を1,048,577にして同じCSVを開くと、伝票番号1,048,576から1,200,000までの151,425件が入り、1回目と合わせて1件の欠けも重なりもなかった。3回目が要るなら2,097,152行目から始める。2回目からは見出しの行が入らないので、1回目の見出しを写す。

ウィザードはMicrosoft 365では隠れていることがある。Microsoftのテキストインポートウィザードのページでは、ファイル、オプション、データで「テキストから(レガシ)」を選ぶと、データタブの「データの取得と変換」のレガシウィザードから使えるようになる、とある(2026年10月6日に確認)。私が開始行を変えて開いたのはCOMのOpenTextで、ウィザードの画面を操作して試してはいない。設定する値は同じものだ。

集計だけなら、Power Queryで読み込んでシートに出す前に数える

月ごとの件数と金額が分かればよいなら、1,048,576行の壁はシートに出す瞬間にしかない。データタブの「テキストまたはCSVから」でPower Queryに読み込み、日付から月を取り出して、月ごとに件数と金額を集計してからシートに出した。結果は12行で、件数の合計は1,200,000、金額の合計は55億1,915万1,000円。元のCSVと1円も違わない。120万件の読み込みと集計にかかったのは16秒だった。

同じPower Queryでも、集計せずに全部の行をシートに読み込むと、表は1,048,575件で止まった。COMから更新したときはエラーも返らなかった。Power Queryを通したから安心、ではなく、シートに何行出すかで決まる。

Microsoftの対処方法のページは、読み込み先にピボットテーブルを選ぶやり方を勧めている。ピボットテーブルは配った後の更新で古い数字が残ることがあり、その見分け方はピボットテーブルが更新されない記事に書いた。

CSVの行数を、Excelで開かずに数える

開く前に行数が分かれば、ここまでの話は全部避けられる。PowerShellなら次の1行で、120万行のCSVを0.28秒で数えた。

[Linq.Enumerable]::Count([IO.File]::ReadLines('C:\データ\明細.csv'))

返ってきたのは1,200,001で、見出しを含んだ行数だ。ただしこれは改行の数なので、メモ欄に改行がある明細は2行以上に数える。

配布する表には、Power Queryで数える欄を付けた。表と同じフォルダにCSVを置き、ファイル名を書いて「すべて更新」を押すと、CSVの行数と列数が出る。こちらは引用符の中の改行を1件の中に数える。1,048,577行のCSVを置いて画面から更新すると、セキュリティの確認が1回出て、OKを押すと1,048,577と2列が出た。

大きいCSVをExcelで扱うときの分かれ道。1,048,576行以下ならダブルクリックで開いてよく、超えるなら集計だけかどうかでPower Queryか分けて開くかに分かれ、どちらでも元のCSVは上書き保存しない

配布する表は、行数を入れると消える件数と分けて開く行が出る

「1_開けるか」のB5にCSVの行数を入れると、Excelに入る件数、消える件数、消える割合が出る。1日あたりの件数を入れれば、何日分が1枚に入って何日で止まるかも出る。下の表は、分けて開くときに何行目から始めるかの一覧だ。

CSVの行数1,200,001、1日3,288件を入れた画面。Excelに入る件数1,048,575、消える件数151,425、消える割合12.6%、1シートに入る日数318、最後まで入る日付2026/11/14、2回目の開始する行1,048,577

見本の120万件では、1シートに入るのは318日分で、11月14日までは丸ごと入る。実際に開いたシートで11月15日の途中まで入っていたのと合う。

ほかの数でも試した。1日2,900件で1年分の1,058,501行なら、消えるのは9,925件で0.9%。1%に満たないので、合計を見比べても気づきにくい。300万件なら3回に分けることになり、開始する行は1、1,048,577、2,097,152と出た。保存の形式をxlsにして10万件を入れると、34,465件が消えると出る。

「2_120万件の実測」には、月ごとの件数と金額、試した開き方9通りの結果を並べた。この記事の数字はここから取っている。

私が一番気にしているのは、警告のOKを押したあとの一手だ。開いた人は1年分のつもりでいて、OKはただの確認に見える。CSVを受け取ったら開く前に行数を数え、超えていたらダブルクリックしない。16桁の番号がCSVの上書きで壊れる話は16桁目を0にする記事で数えていて、どちらも元のCSVを残しておけば戻せる。

確かめていないこと

テキストインポートウィザードの画面を操作して開始行を変えることは試していない。COMのOpenTextで同じ値を渡して確かめた。メモ欄に改行がある明細で、開始行が改行の数で決まるのか件数で決まるのかも確かめていない。

Power Queryで全部の行をシートに読み込んだときに、画面から更新した場合にどんな表示が出るかは見ていない。COMから更新した結果だけを書いた。ピボットテーブルに読み込むやり方も試していない。

表の行数を数える欄は、ブックの場所をCELL関数で取っている。OneDriveと同期しているフォルダに置いた場合は試していない。

Excel 2016や2019、Mac版、Googleスプレッドシートでは試していない。

動作確認: Microsoft 365のExcel(バージョン16) / Windows 11 / 2026-10-06確認

ExcelCSV最大行数1048576行Power Queryテンプレート