Excelの行数上限(104万行)を超えるCSVを開く4つの方法【分割・集計・変換】

業務システムやGoogle Analyticsからエクスポートした大量のCSVファイルをExcelで開いたら、データが途中で切れていた。あるいは「このデータセットはExcelグリッドに対して大きすぎます」という警告が出た。こうした経験はありませんか。

Excelの最大行数は1,048,576行(約104万行)です。この上限を超えるCSVをダブルクリックで開くと、超過分のデータは読み込まれません。そのまま気づかず保存すると、超過分は永久に消えてしまいます。

この記事では、Excelの行数上限を超えるCSVを処理する4つの方法を、手軽な順に紹介します。

Excelの行数上限を超えるCSVを処理する4つの方法

方法 手軽度 対応行数 プログラミング おすすめシーン
方法1: オンライン変換ツール ★★★ 数百万行 不要 今すぐCSVを確認・集計したい
方法2: Power Query ★★☆ 数百万行 不要 Excelで完結させたい・定期業務
方法3: CSV分割 ★★☆ 無制限 不要 データの中身を閲覧したいだけ
方法4: Python / PowerShell ★☆☆ 無制限 必要 数千万行の定期集計を自動化したい

【方法1】オンラインのCSV変換ツールで処理する(★★★)

Power Queryの操作を覚えなくても、ブラウザ上でCSVを開いてフィルタ・集計・Excel変換ができるツールがあります。

使い方はシンプルです。CSVファイルをブラウザにドラッグ&ドロップし、必要な行だけフィルタで絞り込みます。ピボット集計を使えば100万行のデータも数百行の集計表に圧縮できます。結果をExcel形式でダウンロードすれば、そのままレポートに使えます。

LeapRows(※筆者開発ツール)のようなブラウザ完結型のツールなら、ファイルがサーバーにアップロードされずブラウザ内で処理されます。社内データを含むCSVでも安心して使えます。

この方法が最も手軽な理由は、Excelの設定変更もPower Queryの学習も不要だからです。ブラウザさえあれば、今すぐ大量CSVの中身を確認できます。

【方法2】Power Queryでフィルタ・集計してから読み込む(★★☆)

Power QueryはExcelに組み込まれたデータ取り込みツールで、104万行を超えるCSVでも読み込めます。ポイントは、全行をシートに展開するのではなく、フィルタや集計で行数を減らしてから読み込むことです。

フィルタで行数を絞る手順:

  1. Excelで新規ブックを開きます
  2. 「データ」タブ→「テキストまたはCSVから」をクリックします
  3. 対象のCSVファイルを選択→「データの変換」をクリックします
  4. Power Queryエディターが開くので、必要な列のフィルタボタンをクリック→条件を設定します
  5. 行数が104万行以下になったら「閉じて読み込む」をクリックします

集約(グループ化)で行数を圧縮する手順:

全行が必要なのではなく、集計結果だけ欲しい場合はグループ化が有効です。

  1. Power Queryエディターで「ホーム」タブ→「グループ化」をクリックします
  2. グループ化キー(例: 商品カテゴリ、月)を選択します
  3. 集計方法を選択します(合計、カウント、平均など)
  4. 「OK」→「閉じて読み込む」をクリックします

これで数百万行のローデータが、数百〜数千行の集計テーブルに圧縮されてExcelに読み込まれます。

もう一つの選択肢 — Power Pivotに読み込む:

集計結果ではなく全データに対してピボット分析をしたい場合は、Power Pivotのデータモデルに読み込む方法もあります。「閉じて読み込む」の代わりに「閉じて次に読み込む」→「データモデルに追加」を選択すれば、シートの行数上限に制約されずにピボットテーブルで分析できます。

【方法3】CSVを分割してExcelで開く(★★☆)

CSVファイルを104万行以内のファイルに分割してしまう方法です。フィルタや集計が不要で、データの中身をざっと確認したい場合に使えます。

分割ツールの例:

  • オンライン分割ツール: ブラウザ上でCSVをアップロードし、行数指定で分割してダウンロードできます
  • Netplanetes(Windows向けフリーソフト): 行数を指定してCSVを分割できます。ただし古いソフトウェアのためWindows 11での動作は事前に確認してください
  • PowerShellコマンド: 以下のスクリプトで先頭100万行と残りを2つのファイルに分割できます
$header = Get-Content input.csv -TotalCount 1

# 先頭100万行(ヘッダー除く)を取り出してpart1.csvに書き出す
@($header) + (Get-Content input.csv | Select-Object -Skip 1 -First 1000000) |
  Set-Content part1.csv

# 100万行より後のデータをpart2.csvに書き出す
@($header) + (Get-Content input.csv | Select-Object -Skip 1000001) |
  Set-Content part2.csv

このスクリプトはヘッダー行を各分割ファイルに自動で付与します。3つ以上に分割したい場合は、-Skip-Firstの数値を調整してください。

分割後の各ファイルは104万行以下なので、Excelで普通に開けます。

ただし、分割ファイルごとに集計値を計算して合算する場合は注意が必要です。この問題については後述します。

【方法4】Python / PowerShellで集計してからExcelに出力する(★☆☆)

プログラミングを使える環境なら、行数制限を一切気にせずに処理できます。数千万行のCSVでも問題ありません。

Pythonの場合(pandas):

データが数百万行を超える場合、pd.read_csv() で一括読み込みするとメモリ不足になることがあります。そのような場合は chunksize オプションを使って分割しながら処理します。

import pandas as pd

# 【小〜中規模】メモリに収まる場合の一括読み込み
df = pd.read_csv('large_data.csv')
summary = df.groupby('category').agg(
    sales_total=('sales', 'sum'),
    quantity_avg=('quantity', 'mean')
).reset_index()
summary.to_excel('summary.xlsx', index=False)

# 【大規模】メモリに収まらない場合はchunksizeで分割処理
chunks = []
for chunk in pd.read_csv('large_data.csv', chunksize=100000):
    # チャンクごとに集計
    partial = chunk.groupby('category').agg(
        sales_total=('sales', 'sum'),
        quantity_sum=('quantity', 'sum'),
        count=('quantity', 'count')
    )
    chunks.append(partial)

# チャンクの集計結果をまとめて再集計
result = pd.concat(chunks).groupby('category').agg(
    sales_total=('sales_total', 'sum'),
    quantity_avg=('quantity_sum', 'sum')  # 総件数で割れば全体平均を出せる
).reset_index()
result.to_excel('summary.xlsx', index=False)

PowerShellの場合:

# CSVを読み込んで集計
$data = Import-Csv -Path "large_data.csv"
$summary = $data | Group-Object -Property category | ForEach-Object {
    [PSCustomObject]@{
        Category = $_.Name
        TotalSales = ($_.Group | Measure-Object -Property sales -Sum).Sum
        Count = $_.Count
    }
}
$summary | Export-Csv -Path "summary.csv" -NoTypeInformation

PowerShellはWindowsに標準搭載されているので、追加インストール不要で使えます。ただし、pandasに比べると処理速度は遅く、数千万行規模のデータには不向きです。

定期的に同じ形式のCSVを処理する業務では、一度スクリプトを書いてしまえば以降は完全自動化できます。毎回Power Queryを手動操作するよりも効率的です。

Excelの行数上限と超過時の挙動

対処法がわかったところで、そもそもExcelの行数上限がどう設定されているか、超えたときに何が起きるかを整理しておきましょう。

バージョン別の最大行数

Excelバージョン ファイル形式 最大行数 最大列数
Excel 2003以前 .xls 65,536行 256列
Excel 2007以降 .xlsx 1,048,576行 16,384列

現行バージョン(Excel 2007以降)の最大行数は1,048,576行です。この数字にはヘッダー行(1行目)も含まれるため、データとして格納できるのは実質1,048,575行になります。

古い.xls形式のファイルを使っている場合は上限が65,536行まで下がります。「ファイルの行数が65536行を超えています」というエラーが出る場合は、ファイル形式を.xlsxに変更するだけで解決するケースもあります。

上限を超えたCSVを開いたときに何が起きるか

CSVファイルをダブルクリックで直接開いた場合、Excelは以下の動作をします:

  1. 警告メッセージが表示される: 「このデータセットはExcelグリッドに対して大きすぎます」と表示されます
  2. 先頭から上限行数分だけ読み込まれる: 超過分のデータは単純に切り捨てられます
  3. 超過分はどこにも保存されない: シートに存在しないデータは、Excelのファイルとして保存した場合も失われます

なお、方法2で説明したPower Query経由で開いた場合はこの挙動とは異なります。Power Queryは全行をメモリに読み込んだ上でフィルタ・集計を行うため、シートに展開されるのは処理後のデータだけになります。

問題は、ダブルクリックで開いた際の警告が目立たないことです。一瞬表示されて消えるため、見逃してしまうケースが多くあります。その結果、「全データだと思って分析していたが、実は104万行で切れていた」という事故が起きます。

上限超過のまま保存するとデータが消える

最も危険なのは、104万行で切れた状態のCSVをExcelから上書き保存することです。CSVはテキスト形式なので、Excelが保持している行だけがファイルに書き戻されます。元のCSVに含まれていた超過分の行は、ファイルから完全に消失します。

対策として、大量のCSVを開く前に必ず元ファイルのコピーを取っておきましょう。あるいは元のCSVには一切触れず、別名で保存する習慣をつけることをおすすめします。

分割・集計で正しい結果を出すための注意点

方法3でCSVを分割してExcelで開く場合、集計方法によっては正しい結果が出ないことがあります。

分割ファイルごとの集計値を合算しても正しくならないケース

CSVを50万行ずつに分割し、各ファイルで集計してから結果を合算する方法には落とし穴があります。

分割合算が正しくなる集計:

  • 合計(SUM): 各ファイルの合計を足せばOKです
  • 件数(COUNT): 各ファイルの件数を足せばOKです
  • 最大値(MAX)/ 最小値(MIN): 各ファイルの最大値の最大値 / 最小値の最小値でOKです

分割合算では正しくならない集計:

  • 平均(AVERAGE): 各ファイルの平均を平均しても正しい全体平均にはなりません(行数が均等でない場合)。正しく求めるには「合計÷総件数」が必要です
  • ユニークカウント(DISTINCT COUNT): ファイルAとファイルBに同じIDが含まれている場合、それぞれのユニーク数を足すとダブルカウントになります
  • 中央値(MEDIAN): 分割ファイルごとの中央値からは全体の中央値を求めることはできません

これらの集計が必要な場合は、分割ではなく方法1(オンラインツール)や方法2(Power Query)で全データに対して直接集計してください。

行数だけでなくメモリ不足にも注意する

Excelの行数上限以内であっても、データ量が大きいとメモリ不足でフリーズすることがあります。

目安として:

  • 10万行以上: VLOOKUPやSUMIFSなどの関数が重くなり始めます
  • 50万行以上: ピボットテーブルの更新やソートに数分かかる場合があります
  • 100万行近く: 32ビット版Excelでは開けないケースもあります。64ビット版の使用を推奨します

ご自身のExcelが32ビット版か64ビット版かは、「ファイル」→「アカウント」→「Excelのバージョン情報」で確認できます。表示されるダイアログの上部に「32ビット」または「64ビット」と記載されています。

行数×列数の「セル数」がメモリ消費に直結します。100列×100万行は1億セルになり、Excelの処理限界に近づきます。列数が多いCSVは、必要な列だけに絞ってから読み込むとフリーズを回避できます。

不完全なデータでレポートを作っていないか確認する方法

既にCSVをExcelで開いて作業している場合、データが切れていないか確認する手段は簡単です。

CSVの行数をコマンドで確認(PowerShell):

(Get-Content "large_data.csv" | Measure-Object -Line).Lines

この結果とExcelのシートの行数(ステータスバーの「レコード数」やCtrl+Endで移動した最終行)を比較します。数値が一致していなければ、データが途中で切れています。

メモ帳でCSVを開くと行数の確認ができないため、PowerShellを使うのが確実です。Windowsならスタートメニューから「PowerShell」で起動して上記コマンドを貼り付けるだけで大丈夫です。

大容量CSVの定期業務を効率化する恒久対策

毎月・毎週、大量のCSVをダウンロードして集計する業務では、毎回同じ手作業を繰り返すのは時間の無駄です。

Power Queryの接続を保存して次回から自動処理

Power Queryで一度設定したフィルタ・集計・変換は、「クエリ」としてExcelブックに保存されます。次回は以下の手順だけで済みます:

  1. CSVファイルを同じフォルダに同じファイル名で配置します(前月分を上書き、または命名規則を統一)
  2. Excelブックを開きます
  3. 「データ」タブ→「すべて更新」をクリックします

これだけで、前回と同じフィルタ・集計がかかった最新データがシートに読み込まれます。

ファイル名が毎回変わる場合でも、Power Queryのソース設定でフォルダパスを指定すれば、フォルダ内のCSVすべてを一括取り込みすることもできます。

データ提供元にxlsx形式や集計済みデータを依頼する

CSVの行数上限問題は、そもそもCSV形式でデータを受け取っていることに起因します。データの提供元に対して以下を依頼できないか検討してみてください:

  • xlsx形式でのエクスポート: 行数上限は同じですが、データ型が保持されるため0落ちや文字化けの問題も同時に解消します
  • 集計済みデータの提供: 月次集計など、集計単位が決まっているならローデータではなく集計結果を受け取ります
  • API連携: 技術的に可能なら、必要なデータだけAPIで取得し、Excelに自動読み込みできます

根本から解決するなら、「Excelの行数に収まるデータをどう受け取るか」を設計し直すのが最善です。

ブラウザのCSV分析ツールを定常利用する

Power Queryの操作を覚える余裕がない、あるいはチーム全員にPower Queryを教えるのが現実的でない場合は、ブラウザのCSV分析ツールをチームの標準にする方法もあります。

CSVをブラウザにアップロードし、フィルタ・ピボット集計をかけて、結果だけExcelにエクスポートするワークフローなら、特別なスキルは不要です。「この大きいCSVはこのツールで開く」というルールをチーム内に設ければ、誰かがExcelで直接開いてデータを消してしまう事故も防げます。

まとめ

Excelの行数上限は1,048,576行です。CSVがこの行数を超えていると、ダブルクリックで開いた時点でデータが切れます。最も怖いのは、切れていることに気づかないまま分析を進めてしまうことです。

手軽さで選ぶならオンライン変換ツール、Excelで完結させるならPower Query、完全自動化するならPythonスクリプトがおすすめです。データ規模に応じた方法を選べば、104万行の壁は問題になりません。

まずは手元のCSVの行数をPowerShellで確認するところから始めてみてください。104万行を超えていたら、この記事の方法1〜4のどれかで対処すれば全データを正しく処理できます。