【2026年8月最新】VBAでテキストファイルを出力する方法|Open・Print・ADODB.Streamまで解説
「ExcelのVBAでテキストファイルを出力したいけど、やり方が分からない」「取引先システムに渡すデータの文字コードがなぜか化ける」——経理・総務・営業事務など、Excelでの業務効率化を担当している方から、こうした相談をよく受けます。
VBAには、テキストファイルを出力する方法がいくつか用意されています。シンプルな方法から、文字コード(UTF-8等)や改行コードまで細かく制御できる方法まで幅を持たせて理解しておくと、社内システムから取引先システムまで、幅広い場面に対応できるようになります。
この記事では、VBAでのテキストファイル出力の基本、応用(追記・保存先選択)、文字コード・改行コードの制御、CSVファイル出力の実践例までを網羅的に解説します。さらに後半では、「VBAのコードを書く」ことの次に来ている、AIにファイル出力の要件を伝えるだけでコードが完成する時代について、AI鬼管理を運営する株式会社GENAIの実例を交えて紹介します。
この記事を読み終える頃には、次のことが明確になっています。
01 BASICS VBAでファイルを扱う前に知っておきたいこと ファイルを開くモードの種類、書き込み方法の違い
VBAでテキストファイルを出力するには、まずOpenステートメントでファイルを開き、PrintまたはWriteステートメントで書き込み、最後にCloseステートメントで閉じるという流れが基本です。
📚 用語解説
ステートメント:VBAにおける命令文の総称。Open(開く)、Print(出力する)、Close(閉じる)のように、特定の処理を行うための構文をステートメントと呼びます。
1-1. ファイルを「開く」モードにはいくつか種類がある
Openステートメントには、どういう目的でファイルを開くかを指定する「モード」があります。代表的なものは以下の3つです。
| モード | 意味 | 既存ファイルがある場合 |
|---|---|---|
| Output | 新規に書き込む(出力専用) | 内容がすべて上書きされる |
| Append | 末尾に追記する | 既存の内容は残り、末尾に追加される |
| Input | 読み込み専用で開く | 書き込みはできず、読み込みのみ |
Outputモードで既存のファイルを開くと、それまでの内容は消えて上書きされます。「追記したいのにOutputモードを使ってしまい、過去のデータが消えた」という事故は実務でも珍しくないため、目的に応じて必ずモードを確認してから実行してください。
1-2. 書き込む方法は2つある:PrintとWrite
ファイルへの書き込みにはPrintステートメントとWriteステートメントの2種類があり、出力される形式が異なります。
| ステートメント | 出力の特徴 | 主な用途 |
|---|---|---|
| 指定した文字列をそのまま出力する | 通常のテキストファイル出力 | |
| Write | 文字列を自動でダブルクォートで囲み、カンマ区切りで出力する | CSVのような区切り形式のデータ出力 |
📚 用語解説
Print文とWrite文の違い:Print文は指定した内容をそのまま書き出すのに対し、Write文は文字列型のデータを自動でダブルクォートで囲み、複数の値をカンマ区切りで出力します。CSVファイルのような形式的なデータ出力にはWrite文が向いていますが、細かい書式を自分で制御したい場合はPrint文の方が扱いやすいこともあります。
1-3. VBAでファイル出力が必要になる代表的な業務シーン
VBAでのテキストファイル出力は、Excel業務の効率化において非常に頻繁に登場します。代表的なのは、会計システムや基幹システムに取り込むための決まった形式のデータファイルを作成する場面です。また、複数の担当者が入力したExcelデータを1つのテキストファイルに集約し、他部署や取引先に共有するといった用途でも活用されます。
1-4. ファイル出力先の存在確認も忘れずに
出力先のフォルダが存在しない場合、Openステートメントの実行時にエラーが発生します。実務でVBAを組む際は、Dir関数などを使ってあらかじめフォルダの存在を確認し、なければMkDirで作成するといった、事前チェックの処理を入れておくと安定した動作につながります。
02 BASIC OUTPUT 一番簡単な方法でテキストファイルを出力する Open・Print・Closeの基本形
2-1. 基本の形を覚える
最もシンプルなテキストファイル出力のコードは、以下のようになります。
Sub OutputTextFile()
Dim filePath As String
filePath = "C:\temp\output.txt"
Open filePath For Output As #1
Print #1, "1行目のテキストです"
Print #1, "2行目のテキストです"
Close #1
End Sub
#1という部分は「ファイル番号」と呼ばれ、開いたファイルを識別するための番号です。複数のファイルを同時に扱う場合は、#2、#3のように別々の番号を割り当てます。
📚 用語解説
ファイル番号:VBAでファイルを開く際に割り当てる識別番号。同時に複数のファイルを開く場合、それぞれ異なる番号を指定することで、どのファイルに対して読み書きするかを区別します。空いている番号を自動取得する場合はFreeFile関数を使うのが安全です。
ファイル番号を固定で#1のように書くと、他の処理と番号が重複してエラーになることがあります。実務では、空いている番号を自動的に取得してくれる「FreeFile関数」を使うのが安全な書き方です。
Dim fileNum As Integer
fileNum = FreeFile
Open filePath For Output As #fileNum
Print #fileNum, "テキスト"
Close #fileNum
2-2. 既存ファイルに追記する
既にあるファイルの内容を残したまま、末尾に追記したい場合はAppendモードを使います。
Open filePath For Append As #1
Print #1, "追記する内容"
Close #1
2-3. 出力先のファイルパスを選べるようにする
ファイルパスをコード内に固定で書く(ハードコーディングする)と、環境が変わるたびにコードの修正が必要になります。実務では、Application.GetSaveAsFilename関数を使い、ユーザーに保存先を選ばせる形にすることが多くあります。
Dim savePath As Variant
savePath = Application.GetSaveAsFilename( _
InitialFileName:="output.txt", _
FileFilter:="テキストファイル (*.txt), *.txt")
If savePath <> False Then
Open savePath For Output As #1
Print #1, "内容"
Close #1
End If
GetSaveAsFilenameは、ユーザーが保存をキャンセルするとFalseを返します。この分岐(If savePath <> False Then)を入れ忘れると、キャンセルしたにもかかわらずエラーが発生したり、意図しないパスにファイルが作られたりする原因になります。
03 ENCODING 文字コード・改行コードを制御する ADODB.Streamを使った応用テクニック
通常のOpenとPrintで出力したテキストファイルは、Windowsの標準的な文字コード(多くの日本語環境ではShift-JIS系)で保存されます。しかし、取引先システムや海外のツールとデータをやり取りする場合、UTF-8での出力を求められることがあります。この場合、標準のOpen/Printだけでは対応できず、ADODB.Streamというオブジェクトを使う必要があります。
📚 用語解説
文字コード:コンピュータ上で文字を数値として扱うための対応表のルール。日本語環境ではShift-JIS系が使われることが多い一方、Web・海外システムとの連携ではUTF-8が標準的に使われます。文字コードが送信側と受信側で一致していないと、文字化けの原因になります。
📚 用語解説
ADODB.Stream:Microsoftが提供する、ファイルやデータのストリーム(連続した流れ)を扱うためのオブジェクト。VBAの標準的なOpen/Printでは指定できない文字コード(UTF-8等)や改行コードを、細かく制御しながらファイルへ出力できます。
3-1. まずは準備から
ADODB.Streamを使うには、あらかじめVBAエディタの「参照設定」から「Microsoft ActiveX Data Objects」ライブラリを有効にしておくか、コード内でCreateObjectを使って呼び出します。実務では環境依存を減らせるCreateObject方式が使われることが多く見られます。
3-2. 文字コードをUTF-8に設定する
Sub OutputUTF8()
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 ' テキストモード
stream.Charset = "UTF-8"
stream.Open
stream.WriteText "UTF-8で出力するテキスト" & vbCrLf
stream.SaveToFile "C:\temp\output_utf8.txt", 2 ' 2=上書き保存
stream.Close
End Sub
Charsetプロパティに"UTF-8"を指定することで、出力される文字コードをUTF-8に変更できます。取引先から「UTF-8で納品してほしい」と依頼された場合は、この方法が定石です。
3-3. 改行コードを制御する
改行コードにも種類があり、VBAの標準的な出力ではWindows標準のCRLFが使われます。Linux/Mac系のシステムや一部のツールではLFという改行コードが求められることがあり、ADODB.StreamのLineSeparatorプロパティで切り替えられます。
📚 用語解説
改行コード(CRLF / LF):文章の改行を表す制御コード。Windowsでは「CRLF」、Linux/Macでは「LF」が標準です。改行コードが想定と異なると、テキストエディタによっては改行が正しく表示されなかったり、システム連携時にエラーになったりすることがあります。
stream.LineSeparator = 10 ' 10 = LF(adLF)
stream.WriteText "1行目", 1 ' 第2引数で改行を付加
stream.WriteText "2行目", 1
改行コードの違いは見た目上分かりにくいため、「取引先システムに取り込めない」という形で初めて問題が発覚することが多くあります。取引先から文字コード・改行コードの仕様を事前に確認しておくと、後戻りを防げます。
仕様を確認
文字コード・
改行コード
出力設定
実際に検証
切り替え
文字コード・改行コードの対応は、一度正しい設定を確立してしまえば、以降は同じテンプレートを使い回せます。初回だけ慎重に検証し、以降の運用を安定させるという進め方が実務的です。
04 CSV OUTPUT ここまでの内容を使ってCSVファイルを出力する 実践的な活用例とよくあるミス
ここまでの内容を組み合わせて、Excelの表データをCSVファイルとして出力する実践例を見てみましょう。
Sub ExportToCSV()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim fileNum As Integer
fileNum = FreeFile
Open "C:\temp\export.csv" For Output As #fileNum
Dim i As Long, lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
Print #fileNum, ws.Cells(i, 1).Value & "," & ws.Cells(i, 2).Value
Next i
Close #fileNum
End Sub
この例では、シートのA列・B列のデータを1行ずつカンマ区切りで結合し、CSVファイルとして出力しています。UTF-8での出力が必要な場合は、この処理を前述のADODB.Streamの書き方に置き換えます。
4-1. よくあるミスとチェックリスト
エラーが発生してプログラムが途中で止まると、Closeが実行されずファイルが開いたままになることがあります。重要な処理では、エラー処理(On Error Goto)と組み合わせて、確実にCloseが呼ばれるようにする設計が推奨されます。
また、データの値そのものにカンマが含まれる場合(住所や商品名など)、単純にカンマで連結すると列がずれてしまいます。このようなケースでは、値をダブルクォートで囲む処理を追加するか、前述のWrite文を活用することで、区切り文字を含むデータも正しく扱えるようになります。
4-2. 大量データを扱う場合の注意点
数万行を超えるような大量データをforループで1行ずつPrint文で書き出す処理は、行数が増えるにつれて処理時間が長くなる傾向があります。実務で大量データを扱う場合は、一度メモリ上で文字列を結合してから、まとめて1回だけファイルに書き込むことで、処理速度を改善できるケースがあります。
「この処理は数百行程度で終わるのか、数万行に及ぶのか」を事前に見積もっておくと、シンプルな実装で十分か、速度を意識した実装が必要かを判断しやすくなります。想定より大幅に時間がかかる場合は、処理方法の見直しを検討しましょう。
05 BEYOND VBA 【独自】「VBAを書く」から「AIにコードを作らせる」時代へ VBAの理解は今も重要。ただし選択肢はもう1つ増えている
ここまで、VBAでのテキストファイル出力を詳しく解説してきました。Excel業務を効率化する担当者にとって、この知識は今も役立ちます。一方で、「VBAのコードを一から書く時間がない」「文字コードの設定でいつも詰まる」という経理・総務・営業事務の方にとっては、もう1つの選択肢が現実的になっています。それが、AIコーディングエージェントにファイル出力のコード作成そのものを任せる方法です。
📚 用語解説
AIコーディングエージェント:人間が「このExcelデータをUTF-8のCSVで出力して」のように日本語で伝えるだけで、AIがVBAコード(またはより適した処理方法)を設計・記述・実行してくれるAI。Anthropic社の「Claude Code」などが代表例です。
5-1. 【GENAI独自データ】Excel業務の自動化をClaude Codeに任せている実例
弊社(株式会社GENAI)では、AIコーディングエージェント「Claude Code」をMax 20xプラン(月額$200・約30,000円)で契約し、請求データのCSV出力、経費データの整形、取引先システム向けのファイル変換といった、従来VBAスクリプトで人力対応していた処理を、AIに指示するだけで完結させています。
| 作業内容 | 従来(自分でVBAを書く) | AIエージェント(Claude Code) |
|---|---|---|
| ファイル出力コードの作成 | Open/Print/Closeの文法を理解する必要 | 「このデータをCSVで出力して」で完了 |
| 文字コード対応 | ADODB.Streamの書き方を調べる必要 | AIが要件に応じて適切な方法を選択 |
| エラー対応 | エラーメッセージを自分で解読 | AIがエラーも解析し修正 |
| 向いている人 | VBAを継続的に使うエンジニア・パワーユーザー | 結果だけ早く欲しい非エンジニア |
5-2. 「仕組みを理解する」ことの価値は変わらない
AIエージェントにコード作成を任せられるようになったとしても、この記事で解説したOpenモードの違いや文字コードの考え方が不要になるわけではありません。AIが生成したコードが要件を満たしているかを確認するための「最低限の目」として、こうした知識は引き続き役立ちます。特に取引先に納品するデータの場合、最終確認は人間が行う体制が安全です。
この記事で紹介した基礎知識を押さえておけば、AIが生成したコードに対しても「文字コードはUTF-8になっているか」「改行コードは指定通りか」といった的確なチェックができるようになります。
06 GETTING STARTED 【独自】非エンジニアの経営者・担当者がAIでファイル出力を任せる3ステップ VBAの文法を覚える必要はない
「Excelの業務データをファイル出力する仕組みが欲しいが、VBAは分からない」という方に向けて、AIエージェントを使ってファイル出力処理を作るまでの3ステップを紹介します。
出力したい
データを見せる
出力形式の
要件を伝える
結果を確認・
取引先で検証
6-1. ステップ1:出力したいデータをそのまま見せる
Excelのシートや、出力したいデータのイメージをそのままAIエージェントに見せます。「どの列を、どんな形式で出力したいか」を専門用語なしで伝えるだけで十分です。
6-2. ステップ2:出力形式の要件を伝える
「取引先からUTF-8で送ってほしいと言われている」「改行コードはLFにしてほしいと指定されている」といった要件をそのまま伝えれば、AIエージェントが適切な実装方法(ADODB.Streamを使うかどうかなど)を判断してコードを組み立ててくれます。文字コードや改行コードの専門用語を正確に覚えている必要はなく、取引先から言われた通りの言葉を伝えるだけで構いません。
6-3. ステップ3:結果を確認し、取引先で検証する
出力されたファイルは、実際に取引先のシステムに取り込めるか、あるいは想定通りのツールで開けるかを確認することが重要です。特に文字コード関連の問題は、実際に取り込んでみて初めて発覚することもあるため、本番運用の前に必ずテストを行いましょう。
07 CONCLUSION まとめ ── VBAでのファイル出力と、AIに任せる選択肢 目的に応じて、構文を学ぶ道と任せる道を使い分ける
この記事では、VBAでのテキストファイル出力の基本、応用(追記・保存先選択)、文字コード・改行コードの制御、CSVファイル出力の実践、そしてAIにコード作成を任せる時代の考え方までを整理しました。最後にポイントを振り返ります。
VBAでのファイル出力を理解して自分でコードを書けるようになることも、AIエージェントに要件を伝えて任せることも、どちらも有効な選択肢です。「今すぐこのファイルを作りたい」なら後者、「継続的に業務効率化のコードに関わる」なら前者の理解も深めておく、という使い分けをおすすめします。
VBAを覚える前に、AIに相談してみませんか
データのファイル出力にVBAの習得は必須ではなくなりつつあります。
AI鬼管理では、Claude Codeを使ったExcel・データ処理の自動化を無料相談で伴走支援しています。
ここから先の進め方は、大きく2つあります。
自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。
覚えるより任せたい方は、AIBPO by AI鬼管理でこの記事のような定型業務を丸ごと預ける道があります。総額はいまの業務コストの70〜80%が目安、月額基本料は0円です。
どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. OpenモードのOutputとAppendはどう使い分ければいいですか?
A. 新規にファイルを作成、または既存の内容をすべて置き換えたい場合はOutputを使います。既存ファイルの内容を残したまま末尾に追記したい場合はAppendを使います。目的を誤ると意図せずデータが消えてしまうため、実行前に必ず確認してください。
Q. Print文とWrite文はどちらを使うべきですか?
A. 自由な書式でテキストを出力したい場合はPrint文、CSVのようにカンマ区切り・ダブルクォート付きで自動整形したい場合はWrite文が向いています。用途に応じて使い分けます。
Q. 通常のOpen/PrintでUTF-8のファイルは出力できますか?
A. 標準のOpen/Printステートメントでは文字コードを直接指定できません。UTF-8での出力が必要な場合は、ADODB.Streamオブジェクトを使い、Charsetプロパティに"UTF-8"を指定する方法が必要です。
Q. 改行コードのCRLFとLFはどう違いますか?
A. CRLFはWindows環境で標準的に使われる改行コード、LFはLinux/Mac系のシステムで標準的に使われる改行コードです。取引先のシステムによって求められる改行コードが異なるため、事前に仕様を確認することが重要です。
Q. CSV出力でデータにカンマが含まれる場合はどうすればいいですか?
A. カンマを含むデータをそのまま単純結合すると、CSVの列がずれてしまいます。該当する値をダブルクォートで囲む処理を追加するか、自動でダブルクォートを付加してくれるWrite文を活用することで対応できます。
Q. VBAが分からなくてもAIにファイル出力の仕組みを作ってもらえますか?
A. 作ってもらえます。Claude CodeのようなAIコーディングエージェントは、「このデータをUTF-8のCSVで出力して」といった日本語の要件から、必要なコードを設計・実行してくれます。文字コードや改行コードの専門用語を正確に覚えている必要はありません。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




