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

Excelの行数上限を超えるCSVは、ダブルクリックで開くとデータが切れます。そのまま保存すると、超過分は永久に消えます。

Excelの最大行数は1,048,576行(約104万行)です。業務システムやGoogle Analyticsからエクスポートした大量CSVがこの上限を超えていると、Excelは超過分を読み込みません。警告は一瞬で消えるため、見逃したまま不完全なデータで分析を進めてしまう事故が頻繁に起きています。

「Excelがダメならスプレッドシートで」と考える方も多いですが、Google スプレッドシートにもセル数の上限があります。1つのスプレッドシートに格納できるのは1,000万セルまで。50列のCSVなら20万行でこの天井に到達します。Excelの104万行よりも先にフリーズするケースは珍しくありません。加えて、Google スプレッドシートはファイルをGoogleのサーバーにアップロードして処理するため、機密性の高いCSVではセキュリティポリシー上の制約が生じる場合もあります。

たとえば200万行の売上CSVをExcelでダブルクリックすると、先頭104万行だけが読み込まれ、残りの96万行は無言で捨てられます。その状態で上書き保存すれば、元のCSVから96万行が消えます。

ExcelもGoogle スプレッドシートも「大きいCSVをそのまま開く」用途には向いていません。この記事で紹介する5つの方法のうち、自分の用途と手軽さに合うものを選んでください。

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

方法手軽度対応行数プログラミングおすすめシーン
方法1: オンライン変換ツール★★★数百万行不要今すぐCSVを確認・集計したい
方法2: Power Query★★☆数百万行不要Excelで完結させたい・定期業務
方法3: CSV分割★★☆無制限不要データの中身を閲覧したいだけ
方法4: Python / PowerShell★☆☆無制限必要数千万行の定期集計を自動化したい
方法5: SQLデータベース★☆☆無制限必要同じCSVに繰り返しクエリを実行したい
Excelに読み込む前にどの方法を選ぶかで、作業効率が大きく変わります。

まず中身を確認したい場合:テキストエディタで開く

CSVをどう処理するか決める前に、テキストエディタで中身を確認するのが最善の初手です。

テキストエディタはCSVを「表」ではなく「テキスト」として開くため、Excelの行数制限には引っかかりません。列の並び・区切り文字・文字コード・おおよその行数が分かれば、次にどの方法を使うべきか判断できます。セルの値が勝手に変換されることもありません。

Windows — EmEditor: 巨大ファイルの扱いに特化したエディタです。1GBを超えるCSVでも数秒で開けます。CSVモードでは列が揃って表示され、ソートやフィルタも可能です。有料ですが、巨大CSVを日常的に扱う業務なら投資に見合います。

Windows — Notepad++(無料): 2GB程度のファイルまで開けます。EmEditorほど高速ではありませんが、検索や正規表現置換が使えるので、特定の行を探す用途には十分です。

Mac / Linux — ターミナル:

# 先頭100行を表示
head -100 large_file.csv

# 総行数を確認
wc -l large_file.csv

テキストエディタの役割は「確認」に留めてください。列名や行数を把握したら、フィルタや集計で分析に入れる方法1〜5に進みましょう。

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

ブラウザ上のCSV分析ツールを使えば、Power Queryの操作を覚えなくても大きいCSVをすぐに開いて集計できます。5つの方法のなかで最も手軽です。

Excelの設定変更もプログラミングも不要だからです。ブラウザにCSVをドラッグ&ドロップするだけで読み込みが始まり、フィルタやピボット集計で行数を圧縮し、結果をExcel形式でダウンロードできます。

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

ブラウザからCSVファイルをそのままアップロードできます。インストールやアカウント登録は不要です:

LeapRows landing page with the CSV upload button

読み込んだら「Analyze」タブでピボットテーブルを作成し、数百万行のデータを集計表に圧縮できます:

Pivot table analysis with keyword configuration panel

集計結果はCSV・Excel・Parquet形式でワンクリックでエクスポートできます:

Export dropdown with CSV, Excel, and Parquet options

「CSVが大きくて開けない」という状況に遭遇して、今すぐ中身を確認したい場合は、まずこの方法を試してください。Power Queryの学習やPythonの環境構築に進むのは、それからでも遅くありません。

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

Excelだけで完結させたいなら、Power Queryが最適です。104万行を超えるCSVでもメモリ上で全行を読み取り、フィルタや集計で行数を減らしてからシートに載せられます。

Power QueryはExcel 2016以降に標準搭載されたデータ取り込みツールです。ダブルクリックで開く場合と違い、Power Queryはシートに展開する前にデータを処理します。フィルタで不要な行を除外したり、グループ化で集計したりすれば、104万行以下に収まった状態でシートに読み込めます。

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

  1. Excelで新規ブックを開きます
  2. 「データ」タブ→「テキストまたはCSVから」をクリックします

Excel Power Query Get Data menu with From Text/CSV highlighted

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

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

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

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

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

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

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

Power Queryの設定は「クエリ」としてExcelブックに保存されます。毎月同じCSVを処理する業務なら、初回だけ設定すれば次回からは「すべて更新」ボタン1つで済みます。定期業務がある場合は、後述の「恒久対策」セクションも確認してください。

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

フィルタや集計が不要で、CSVの中身をざっと閲覧したいだけなら、ファイルを104万行以下に分割するのが最も直接的な方法です。

分割後の各ファイルはExcelの行数制限内に収まるため、普通にダブルクリックで開けます。特別なツールの学習やプログラミング知識は必要ありません。

分割ツールの例:

  • オンライン分割ツール: ブラウザ上でCSVをアップロードし、行数指定で分割してダウンロードできます
  • Netplanetes(Windows向けフリーソフト): 行数を指定してCSVを分割できます。ただし古いソフトウェアのためWindows 11での動作は事前に確認してください
  • **PowerShellはスクリプトの実行ポリシーを確認してから実行してください。

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の数値を調整してください。

分割ファイルごとに集計して合算する場合、平均やユニークカウントでは正しい結果が出ません(詳細は後述)。集計が目的なら、方法1か方法2を選んでください。分割は「閲覧専用」と割り切って使うのが安全です。

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

プログラミングを使える環境なら、行数制限を一切気にせず数千万行のCSVを処理できます。定期業務の完全自動化も可能です。

PythonのpandasやPowerShellには行数の上限がありません。CSVを読み込み、集計結果だけをExcelに出力すれば、104万行の壁は無関係になります。一度スクリプトを書けば、以降は同じ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を処理しているなら、スクリプトをWindowsのタスクスケジューラやcronに登録して完全自動化することを検討してください。月30分の手作業が、初回のスクリプト作成だけで以降ゼロになります。

【方法5】SQLデータベースにインポートして操作する(★☆☆)

同じCSVに対して、条件を変えながら何度もクエリを試行錯誤したい場合は、SQLデータベースに一度取り込むのが最も効率的です。

Pythonスクリプトでは、クエリ条件を変えるたびにCSVの読み込み処理が走ります。SQLデータベースにインポートすれば、以降の読み込みはスキップされ、SQLの構文で集計・抽出・JOINが自在にできます。行数の制限も事実上ありません。

SQLite(セットアップ最小限):

SQLiteはサーバー不要のファイルベースDBです。Python環境があれば追加インストールなしで使えます。

import sqlite3
import csv

conn = sqlite3.connect('data.db')
cur = conn.cursor()

# テーブル作成(列名はCSVに合わせて変更)
cur.execute('''
    CREATE TABLE IF NOT EXISTS sales (
        date TEXT, region TEXT, product TEXT,
        quantity INTEGER, revenue REAL
    )
''')

# CSVを読み込んでインサート
with open('large_data.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    next(reader)  # ヘッダーをスキップ
    cur.executemany(
        'INSERT INTO sales VALUES (?,?,?,?,?)', reader
    )
conn.commit()

# 集計クエリの例
for row in cur.execute('''
    SELECT region, SUM(revenue) as total
    FROM sales GROUP BY region ORDER BY total DESC
'''):
    print(row)

conn.close()

一度DBファイル(data.db)に変換すれば、次回からCSVの読み込み処理をスキップできます。WHERE句やGROUP BYを変えるだけで、異なる切り口の集計をすぐに試せます。

PostgreSQL / MySQL: チーム内でデータを共有したい場合や、複数のCSVをJOINして分析したい場合はサーバー型DBが選択肢になります。ただし環境構築にサーバー知識が必要です。

SQLに馴染みがなく、月1回程度の分析であれば、方法1(ブラウザツール)や方法2(Power Query)のほうが現実的です。SQLを選ぶのは「同じデータに繰り返しクエリを打つ」場面に限定してください。

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

Excelの行数上限は、バージョンとファイル形式によって決まります。超過したCSVを開いた場合のデータ消失は、仕組みを知っていれば防げます。

Excel 2007以降の.xlsx形式は最大1,048,576行に対応していますが、それ以前の.xls形式では65,536行が上限です。どちらの形式でも、上限を超えるCSVをダブルクリックで開くとデータが切り捨てられます。

バージョン別の最大行数

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

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

「ファイルの行数が65536行を超えています」というエラーが出る場合、原因はファイルを.xls形式で保存していることかもしれません。.xlsxに変更するだけで上限が65Kから104万行に跳ね上がります。

.xls形式をまだ使っている場合は、まず.xlsxに変換してください。それだけで解決するケースもあります。

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

CSVをダブルクリックで直接開くと、Excelは超過分のデータを黙って捨てます。

Excelの挙動は具体的には3段階です:

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

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

実際にこの警告を見逃す人は多いです。一瞬表示されて消えるため、「全データだと思って分析していたが、実は104万行で切れていた」という事故が後になって発覚します。

大きいCSVをExcelで開く場面では、ダブルクリックではなくPower Query経由(方法2)で開く習慣をつけてください。それだけでデータ消失のリスクが激減します。

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

104万行で切れた状態のCSVをExcelから上書き保存すると、超過分の行はファイルから完全に消失します。

CSVはテキスト形式なので、Excelが保持している行だけがファイルに書き戻されます。元のCSVに含まれていた超過分は、バックアップがなければ復元できません。

200万行のCSVをExcelで開くと104万行だけ読み込まれます。そのまま保存すれば、元のCSVファイルが104万行のファイルに書き替わります。残りの96万行は消えます。

大量のCSVを開く前に、必ず元ファイルのコピーを別フォルダに取ってください。あるいは元CSVは読み取り専用にし、作業用は常に別名で保存するルールを設けましょう。

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

CSVを分割してExcelで開く場合、集計方法によっては正しい結果が出ません。分割前に「安全な集計」と「危険な集計」の区別を把握しておく必要があります。

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

SUM・COUNT・MAX/MINは分割合算しても正しい結果になりますが、AVERAGE・DISTINCT COUNT・MEDIANはなりません。

合計や件数は「足せばいい」性質を持つ集計ですが、平均は行数が均等でないと誤差が出ます。ユニークカウントはファイルをまたいで同じIDが重複するとダブルカウントになります。中央値に至っては、分割ファイルの中央値から全体の中央値を数学的に求める方法自体がありません。

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

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

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

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

平均・ユニークカウント・中央値が必要な場合は、分割ではなく方法1(オンラインツール)や方法2(Power Query)で全データに対して直接集計してください。

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

Excelの行数上限以内であっても、データ量が大きいとメモリ不足でフリーズします。行数ではなく「セル数」がボトルネックです。

行数×列数の「セル数」がメモリ消費に直結します。100列×100万行は1億セルになり、Excelの処理限界に近づきます。特にVLOOKUPやSUMIFSなどの関数を大量に使っている場合、数万行でも重くなります。

目安として:

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

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

列数が多いCSVは、Power Queryで必要な列だけに絞ってから読み込んでください。それだけでフリーズの頻度が大幅に減ります。32ビット版を使っている場合は、64ビット版への切り替えも検討してください。

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

既にCSVをExcelで開いて作業している場合でも、元のCSVの行数とExcel上の行数を比較すれば、データが切れているかどうかすぐに分かります。

CSVはテキストファイルなので、コマンドで正確な行数を取得できます。Excelのシート上の行数と一致しなければ、データが途中で切れています。

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

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

この結果とExcelのシートの行数(ステータスバーの「レコード数」やCtrl+Endで移動した最終行)を比較します。

大きいCSVをExcelで開いた直後に、この行数チェックを必ず実行してください。Windowsならスタートメニューから「PowerShell」で起動して上記コマンドを貼り付けるだけです。不一致が判明した場合は、方法1〜5のいずれかで全データを読み込み直してください。

機密データを含む大きいCSVを安全に扱う

大きいCSVの問題は行数だけではありません。ファイルの中身が機密情報を含んでいる場合、「どこで処理するか」によってセキュリティリスクが変わります。

ブラウザで大きいCSVを開けるサービスの多くは、ファイルをサーバーにアップロードして処理します。便利ですが、社内のデータ取扱規程やGDPR・個人情報保護法に抵触する可能性があります。

クラウドアップロード型ツールのリスク

Google スプレッドシートを含むクラウド型ツールの多くは、CSV処理時にデータをサーバーに送信します。

アップロード先のサーバーにデータが一時保存されること、ツール提供元のプライバシーポリシーに依存すること、これらが主なリスクです。

「AIで分析します」と謳うサービスの場合、アップロードしたデータがモデルの学習に使われるケースもあります。利用規約を確認しないまま社内の顧客リストや売上明細を投入するのは危険です。

外部ツールを使う前に、必ず「データがどこに送信されるか」をFAQやプライバシーポリシーで確認してください。社内ルールで外部アップロードが禁止されている場合は、次のローカル完結型を選びましょう。

ローカル完結処理という選択肢

データをサーバーに送らず、手元の環境だけで処理を完結させる方法があります。

ローカル完結型ならデータがネットワークを経由しないため、社内ルールが厳しい環境でも使えます。最近はWebAssemblyなどの技術により、ブラウザ内で動作しつつデータを一切サーバーに送信しないツールも登場しています。

  • テキストエディタ(EmEditor等):ファイルはローカルのまま処理されます
  • Python / PowerShell:スクリプトもデータもPC上で完結します
  • ブラウザ完結型のローカル処理ツール:ブラウザ上で動作しつつ、データは一切サーバーに送信されない仕組みのツールも存在します

LeapRows(※筆者開発ツール)はこの方式です。CSVファイルはブラウザ内のDuckDB-WASMエンジンで処理され、ネットワークを経由しません。ブラウザのタブを閉じればデータはメモリから消えます。

「ブラウザで動く=サーバーに送信している」とは限りません。ツールを選ぶ際は、「client-side processing」や「ローカル処理」の明記があるかを確認してください。

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

毎月・毎週同じCSVを処理する業務では、毎回手作業を繰り返すのではなく、仕組みで自動化するのが正解です。

一度設定すれば繰り返し使える仕組みにしておけば、操作ミスによるデータ消失も、属人化も防げます。

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

Power Queryで一度設定したフィルタ・集計・変換は、Excelブックに「クエリ」として保存されます。次回は「すべて更新」ボタン1つで同じ処理が走ります。

クエリ定義がブックに残るため、毎回Power Queryエディターを開いてフィルタを設定し直す必要がありません。

次回の手順はこれだけです:

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

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

Power Queryを使い始めたら、最初のフィルタ設定を「次回から使い回す前提」で作成してください。最初の10分の投資が、毎月の30分を消してくれます。

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

CSVの行数上限問題の根本原因は、「Excelに収まらないデータをそのまま受け取っていること」です。提供元に出力形式を変えてもらえれば、自分側の工夫は不要になります。

大量CSVの処理を自分が担い続ける限り、毎月同じ作業が発生します。提供元に「必要なデータだけを出す」仕組みを作ってもらえれば、問題がそもそも発生しなくなります。

データの提供元に対して以下を依頼できないか検討してみてください:

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

次にデータ提供元と打ち合わせる機会があれば、「集計済みデータで出せませんか」と一言聞いてみてください。先方も巨大CSVの生成に時間を取られている場合があり、双方にとって効率化になることがあります。

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

チーム全員にPower Queryを教えるのが現実的でない場合は、ブラウザのCSV分析ツールをチームの標準フローに組み込むのが有効です。

「CSVをブラウザに読み込む → フィルタ・集計 → ExcelでダウンロードUK」というワークフローは、特別なスキルがなくても実行できます。チーム内で「大きいCSVはこのツールで開く」というルールを設ければ、誰かがExcelで直接開いてデータを消す事故も防げます。

ツールが統一されていない場合、人によってExcelで開く人、Google スプレッドシートにアップロードする人、分割ソフトを使う人がバラバラに存在します。結果として「誰がどのデータを見ていたか」が不明瞭になり、レポートの数値が一致しないトラブルが起きます。

チーム内の大きいCSV処理フローを1つに統一してください。ツール自体は何でも構いませんが、「このCSVはこう処理する」という手順が共有されていることが、データ消失とレポート不一致を防ぐ最大の対策です。

まとめ

Excelの行数上限は1,048,576行、Google スプレッドシートはセル数1,000万が上限です。どちらも大きいCSVをそのまま開く用途には向いていません。

上限を超えるCSVをダブルクリックで開くとデータが黙って切り捨てられ、保存すれば消えます。この問題は仕組みを知っていれば防げます。

手軽さで選ぶならオンライン変換ツール(方法1)、Excelで完結させるならPower Query(方法2)、完全自動化するならPythonスクリプト(方法4)、繰り返しクエリを実行するならSQLデータベース(方法5)が適しています。機密データを扱う場合は、ツールがデータをサーバーに送信するかどうかの確認も欠かせません。

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