大容量CSV · 実践ガイド
大容量CSVを分割する方法
Excelで開けない、動作が重い、共有しづらいCSVは、目的に合った方法で小さく分けると扱いやすくなります。ここではExcel、Power Query、Python、LocaCSVの違いと、列の値ごとに安全に分割する手順を解説します。
結論:目的に合う分割方法を選ぶ
まず結論です。50MiB以下のCSVなら、LocaCSVで列の値ごと、指定したデータ行数ごと、または目標ファイルサイズを目安に、ブラウザ内だけで最大100ファイルへ分割できます。
50MiBを超えるファイル、複数列を組み合わせた分割、定期的な自動実行にはPythonなどのローカルスクリプトが柔軟です。Excelだけで大容量CSVを直接開いて手作業で分ける方法は、行数上限やメモリ、誤操作の影響を受けやすいため、大きなファイルほど勧めにくくなります。
大容量CSVを開けない主な原因
CSVは単純なテキスト形式ですが、開くアプリ側には上限があります。Excelのワークシートは最大1,048,576行です。これを超える行は1枚のシートへ収まりません。上限未満でも、列数、長いセル、数式化、文字コード判定などにより読み込みが重くなることがあります。
- Excelの行数上限を超えている。
- ファイルを一度にメモリへ展開するため、端末の空きメモリが不足する。
- 区切り文字を誤認し、1行が極端に多い列として解析される。
- 引用符内の改行やカンマを単純分割し、行や列が崩れる。
- UTF-8、Shift_JIS(CP932)などの文字コードが合わず、文字化けや読込エラーになる。
- Excelが商品コードや先頭ゼロ、長い数値、日付らしい文字列を自動変換する。
Excel、Power Query、Python、LocaCSVの比較
最適な方法は、分割条件、ファイルサイズ、繰り返し頻度、コードを書けるかどうかで変わります。次の表では、よくある実務上の違いをまとめます。
| 方法 | 向いている場面 | 長所 | 注意点 |
|---|---|---|---|
| Excel | 小さめのCSVを目で確認しながら一度だけ分ける | 使い慣れた画面で確認しやすい | 1,048,576行の上限。大きいCSVは重く、手作業で欠落や重複が起きやすい |
| Power Query | Excel内で読込・変換を再利用したい | 元データを直接編集せず、手順を更新できる | 読み込み先がシートなら行上限が残る。値別に複数CSVを書き出すには追加設計が必要 |
| Python | 50MiB超、行数・容量指定、定期バッチなど自由度が必要 | ストリーム処理や命名規則を細かく制御できる | 実行環境、コード、テスト、文字コード指定を自分で管理する |
| LocaCSV | 50MiB以下を値・行数・目標サイズですぐ分けたい | 登録・インストール不要。ブラウザ内で処理し、ZIPで受け取れる | 最大100出力。値別分割で選べる列は1つ |
import csv
from pathlib import Path
source = Path("large.csv")
output_dir = Path("split")
output_dir.mkdir(exist_ok=True)
handles = {}
writers = {}
try:
with source.open("r", encoding="utf-8-sig", newline="") as input_file:
reader = csv.DictReader(input_file)
key_column = "department"
for row in reader:
key = row.get(key_column, "") or "(blank)"
if key not in writers:
output = output_dir / f"group-{len(writers) + 1:03d}.csv"
handle = output.open("w", encoding="utf-8-sig", newline="")
writer = csv.DictWriter(handle, fieldnames=reader.fieldnames)
writer.writeheader()
handles[key] = handle
writers[key] = writer
writers[key].writerow(row)
finally:
for handle in handles.values():
handle.close()LocaCSVを使った分割手順
CSVのカンマ、ダブルクォート、セル内改行はCSVの規則に従って解析されます。処理前のプレビューで列がずれていないことを確認するのが、失敗を防ぐ最も重要な手順です。
- CSV分割画面を開き、分割したいCSVを1ファイル選択します。
- ヘッダーの有無、入力文字コード、区切り文字を確認します。プレビューが崩れている場合は処理を始めません。
- 分割方法から「列の値ごと」「行数ごと」「目標サイズ」のいずれかを選びます。
- 値別では列と空欄の扱い、行数別では1ファイルのデータ行数、サイズ別では1ファイルの目標MiBを指定します。
- 出力文字コード、UTF-8のBOM有無、区切り文字を確認して分割を実行します。
- 入力件数と出力・除外件数、出力ファイル数、警告を確認し、ZIPをダウンロードします。
列の値ごとに分割する方法
値別分割は、店舗、部門、取引先、年月など、1列の分類値ごとに別ファイルを作る方法です。たとえば「店舗」列に東京・大阪・福岡があれば、同じ値を持つ行がそれぞれ同じCSVへ入り、3つの出力になります。
ヘッダー名が重複している、ヘッダーがない、列名に余分な空白がある場合は、プレビューと1始まりの列番号で対象列を確認してください。分割値にWindowsで使えない文字や予約語が含まれていても、LocaCSVは出力ファイル名を安全な形へ変換します。
- 同じ値の行は同じ出力ファイルへ入ります。
- 空欄値は、除外または空欄用ファイルへの出力を選べます。
- 分割に使える列は1回につき1列です。
- ユニーク値が100を超える場合は停止し、部分的なZIPは公開しません。
- 処理後に「入力件数 = 出力件数 + 除外件数」を検証します。
行数・ファイルサイズに関する注意点
CSVの扱いやすさはファイルサイズだけでは決まりません。同じ50MiBでも、数百万の短い行、数千の非常に長いセル、引用符内改行が多いデータでは、必要なメモリと処理時間が異なります。
LocaCSV Free版の単一入力上限は1ファイル50MiBです。端末性能、ブラウザ、CSVの構造、分割後の出力量によっては、上限以下でも処理が難しい場合があります。50MiBを超える入力を、名前だけ変更したりZIPのまま渡したりして回避することはできません。
- 行数指定はヘッダーを数えず、指定したデータ行数ごとに分割します。
- 目標サイズは出力文字コード、BOM、各ファイルに付くヘッダーを含む実際のバイト数で判定します。1行だけで目標を超える場合は、その行を壊さず単独ファイルへ出力します。
- どの方式も出力ファイル数は最大100です。値別ではユニーク値数、行数別では想定ファイル数を事前に確認してください。
- 元ファイルを上書きせず、出力ZIPを別名で保存して件数を確認してください。
- Excelへ読み込む目的なら、各出力が1,048,576行未満になるかも確認してください。
文字コードと文字化けへの対処
日本の業務CSVではUTF-8だけでなく、Shift_JISまたはWindows向け拡張を含むCP932がよく使われます。LocaCSVはUTF-8とShift_JISを自動判定候補にし、プレビューを表示します。自動判定が曖昧な場合は、文字が正しく見える方を手動で選びます。
Excelで開く用途では、UTF-8のBOM付きが文字コードを認識されやすい場合があります。既存システムがShift_JISを要求する場合はShift_JISを選べますが、Shift_JISで表現できない文字が含まれると処理は停止します。文字を「?」へ黙って置換しないため、情報欠落を見逃しにくくなります。
- プレビューで氏名、住所、記号、丸数字など代表的な列を確認する。
- 区切り文字の誤りを文字化けと混同しない。列がずれる場合はカンマ、セミコロン、タブ、パイプを確認する。
- 元ファイルの文字コードが不明なら、作成元システムの出力設定を確認する。
- 文字化けした状態で保存し直さず、必ず元ファイルからやり直す。
セキュリティとローカル処理
LocaCSVのCSV処理はWeb Workerを使い、利用者のブラウザ内で実行します。CSV本体、ファイル名、ヘッダー、セル値、分割値は処理のために外部サーバーへアップロードしません。処理結果もブラウザ内で作成され、ダウンロードまたは解放後に保持参照を破棄します。
公開サイトではページ表示を把握するためCloudflare Web Analyticsを使用しています。CSV処理画面は広告・解析SDKを読み込まず、機能名、容量帯、時間帯、固定エラーコードなどに限定した識別子なしの最小利用イベントだけをファーストパーティの専用送信先へ送ります。CSV内容、ファイル名、正確な容量、行数はイベントに含めません。送信に失敗しても処理やダウンロードは継続します。
機密CSVを扱う場合でも、組織の規程、端末管理、ブラウザ拡張、ダウンロード先の権限は別途確認してください。「ブラウザ内処理」は端末全体が自動的に安全になるという意味ではありません。
大容量CSV分割のFAQ
Excelで開けないCSVでも分割できますか?
CSVが50MiB以下で、対応する文字コードと区切り文字を指定でき、出力が100ファイル以下ならLocaCSVで分割できます。Excelの行数上限を超えていてもCSV自体は読み込めますが、端末性能やCSV構造によって処理可能範囲は変わります。
10万行ごと、または10MBごとに分割できますか?
はい。行数ごとではヘッダーを除くデータ行数を指定でき、目標サイズでは0.1〜50MiBを指定できます。ヘッダーと出力文字コードを含む実サイズで区切りますが、1行だけで目標を超える場合はその行を単独で出力します。
50MiBを超えるCSVは使えますか?
通常公開中のFree版では、単一入力機能は1ファイル最大50MiBです。50MiBを超えるCSVを利用可能とは案内していません。事前にローカル環境で小さく分ける必要があります。
Shift_JISのCSVをUTF-8で出力できますか?
はい。入力をShift_JISとして読み込み、出力をUTF-8のBOM付きまたはBOMなしに指定できます。プレビューで文字化けがないことを確認してから実行してください。
CSVファイルはサーバーへ送信されますか?
CSV本体、ファイル名、ヘッダー、セル値、分割値は処理のために外部サーバーへアップロードしません。分割処理とZIP作成はブラウザ内で行います。