CSVCSV GUIDE
ホーム›CSV完全ガイド›プログラムで読み書き
Detail Guide 04 · 実装

プログラムでCSVを読み書きする

「python csv 読み込み」「c# csv 読み込み」は、実装者に向けたCSV関連検索の中核です。このページでは各言語の定番コードと、日本語CSV特有のencoding指定を、公式ドキュメントへの出典つきでまとめました。

更新日 2026年10月30日読了時間 約12分出典 公式ドキュメントのみ
結論

基本は「encoding を明示する」こと。Python なら open(path, encoding="cp932")、pandas なら read_csv(encoding=...)、VBA なら TextFilePlatform(65001=UTF-8/932=Shift-JIS)、C# なら Encoding.GetEncoding(932)。引用符で囲まれたカンマに対応するため、split ではなく各言語のCSVライブラリを使ってください。

TOOL実装を補助するツール手順ページで解説している作業を、そのままブラウザで実行できます。
目次
  1. 言語別 早見表
  2. Python(標準 csv)
  3. Python(pandas)
  4. Excel VBA
  5. C#
  6. 書き出し
  7. encoding 早見表
  8. よくある質問
01選択

言語別 早見表

日本語CSVをプログラムで扱うときの最大の関門は文字コードです。どの言語でも「エンコーディングを明示する」が基本です。

言語定番ライブラリ文字コード指定一次情報
Pythoncsv 標準モジュール / pandasencoding= / open(..., encoding=)csv モジュール公式 / read_csv 公式
Excel VBAQueryTables / OpenTextTextFilePlatform(65001 / 932)Microsoft Learn
C#TextFieldParser / CsvHelperEncoding.GetEncoding(932) などMicrosoft Learn
02コード

Python(標準ライブラリ csv)

Python
import csv

# Shift-JIS の CSV を読む。newline="" を忘れると改行が二重になる
with open("sales.csv", encoding="cp932", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["商品名"], row["売上"])

公式ドキュメントの DictReader は1行目をキーに辞書を返すため、列の順番が変わってもコードを直す必要がありません。自前で split(',') すると引用符で囲まれたカンマで列がずれるため、必ずcsvモジュールを使ってください。

出典・参照(2026年10月30日 確認)
03コード

Python(pandas)

Python / pandas
import pandas as pd

df = pd.read_csv("sales.csv", encoding="cp932", dtype={"商品コード": str})
df.to_csv("out.csv", index=False, encoding="utf-8-sig")

read_csv の主なオプション(実務で頻出のもの):

オプション意味使う場面
encoding文字コード指定cp932 / utf-8 / utf-8-sig
dtype列の型を固定商品コード等で先頭0を守る
sep区切り文字TSVは sep="\t"
headerヘッダー行の指定ヘッダーなしCSVは header=None
skiprows先頭行の読み飛ばしタイトル行つきのExcel出力CSV
chunksize分割読み込み巨大ファイル(数百万行)
出典・参照(2026年10月30日 確認)
04コード

Excel VBA

VBA
Sub ReadCsv()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)

With ws.QueryTables.Add(Connection:="TEXT;C:\data\sales.csv", Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001 ' UTF-8。Shift-JIS なら 932
.TextFileColumnDataTypes = Array(2, 1, 1) ' 1列目を文字列に
.Refresh
End With
End Sub

QueryTables.Add(Microsoft Learn) は文字コードと列の型まで制御できるため、Workbooks.OpenText より確実です。TextFilePlatform の値は 65001=UTF-8、932=Shift-JIS です。

05コード

C#

C#
// .NET Core / .NET 5+ では先に CodePages プロバイダを登録する
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using var parser = new TextFieldParser(@"C:\data\sales.csv", Encoding.GetEncoding(932));
parser.SetDelimiters(",");
parser.HasFieldsEnclosedInQuotes = true;

while (!parser.EndOfData)
{
string[] fields = parser.ReadFields()!;
Console.WriteLine(string.Join(" / ", fields));
}

TextFieldParser(Microsoft.VisualBasic.FileIO) は引用符で囲まれたカンマを正しく解釈します。Encoding.GetEncoding(932) を使うには .NET Core 以降で System.Text.Encoding.CodePages パッケージの参照とプロバイダ登録が必要です。実務では CsvHelper(公式サイト) の利用も一般的です。

06コード

書き出し(CSV出力)

  • pandas — df.to_csv(path, index=False, encoding="utf-8-sig")。index=False を忘れると行番号列が増えます(公式)。
  • Python 標準 — csv.writer で writerow()。数値は文字列化して渡します(公式)。
  • VBA — SaveAs FileFormat:=xlCSVUTF8 でUTF-8保存。
  • C# — CsvHelper の WriteRecords() が定番。

書き出し後は、必ず一度テキストエディタで開いて「列数・引用符・文字コード」を確認してから渡してください。

出典・参照(2026年10月30日 確認)
07早見表

encoding 指定 早見表

ファイルの出どころ指定すべき値
Excelの「CSV UTF-8」で保存utf-8-sig
Web・クラウドサービスのエクスポートutf-8
国内業務ソフト(弥生会計・基幹システム等)cp932
古い官公庁データshift_jis(化ける項目があれば cp932)
不明chardet / charset-normalizer で検出してから指定

詳細な修復手順は 文字化けの専用ページ にまとめています。

出典・参照(2026年10月30日 確認)
08FAQ

よくある質問

Q.python csv 読み込みで UnicodeDecodeError が出ます

文字コードの指定と実ファイルが違います。まず utf-8、次に cp932 を試し、判別不明なら chardet で検出してください。詳細は文字化けページの診断手順へ。

Q.read_csv で先頭の0が消えます

dtype={"コード列": str} のように列を文字列型で読み込んでください。既に読んだ後では戻せません。

Q.csv.reader と csv.DictReader の違いは?

reader は下標(0,1,2…)で列にアクセス、DictReader はヘッダー名でアクセスします。列順が変わる可能性があるファイルは DictReader が安全です。

Q.巨大CSV(数百万行)を読むには?

pandas は chunksize で分割、または DuckDB に直接読ませてSQLで集計します。Excelには上限があるため対象外です。

出典・参照(2026年10月30日 確認)