「Excelのデータを一つずつメモ帳に貼り付けて保存する作業、もう100回目なんだけど。指がつりそう……」
そんな経験はありませんか?
私も昔システムに取り込むためのテキストファイルを毎日手動で作っていました。
実は、Excel VBAを使えば、そんな「100回のコピペ」を「ボタン一回、わずか3秒」で終わらせることができます。
今回は、初心者の方が最初につまずきやすい「テキストファイルへの書き込み」について、特に混乱しやすいPrintとWriteの違いを中心に解説します。
1. テキスト出力の3ステップ
VBAでテキストファイルにデータを書き込みたいときには、必ずセットで使う3つの手順があります。
- Open:ファイルという名の「ノート」を開く
- Print / Write:中身を「書く」
- Close:ノートを「閉じる」
特にCloseを忘れてしまうと、パソコンが「ずっと書き込み中」だと思い込んでしまい、ファイルが削除できなくなるなどのトラブルの原因になります。
2. 似ているようで全然違う!PrintとWriteの比較
ここが今回の一番の重要ポイントになります。書き込みには2つの方法がありますが、その使い道はハッキリと分かれています。
① Print:見たままを書き込む「自由帳」
Printは、私たちが普段メモ帳に文字を入力するのと同じ感覚で使えます。
- 特徴: 指定した文字をそのまま書き込みます。
- 用途: 人が見るためのレポート、動作ログ、メールの下書きなど。
② Write:データを守る「整理棚」
Writeは、少しお節介で幾帳面な性格をしています。
- 特徴: 文字を自動的に「” “(ダブルクォーテーション)」で囲んだり、データの区切りに「,(カンマ)」を挿入したりします。
- 用途: 別のシステムやExcelで再度読み込ませるための「CSV形式」のようなデータ保存に適しています。
3. コピペで動く!自動化サンプルコード
まずは、一番よく使う「Print」を使ったコードを見てみましょう。
マクロを実行すると、このExcelと同じフォルダに「sample.txt」というファイルが作られて文字が書き込まれます。
Sub SaveAsText()
' 変数の宣言
Dim filePath As String
Dim fileNumber As Integer
' 保存する場所を指定(このExcelと同じフォルダに保存します)
filePath = ThisWorkbook.Path & "\sample.txt"
' 空いているファイル番号を取得(1番とか2番とか、PCが管理するための番号)
fileNumber = FreeFile
' 【手順1】ファイルを開く(Outputは「新しく作る・上書きする」という意味)
Open filePath For Output As #fileNumber
' 【手順2】中身を書き込む
Print #fileNumber, "こんにちは!VBAの世界へようこそ。"
Print #fileNumber, "1行ずつ自動で書き込めます。"
Print #fileNumber, 12345 ' 数字もそのまま書けます
' 【手順3】ファイルを閉じる
Close #fileNumber
MsgBox "作成完了!"
End Sub
▼sample.txtの記述
こんにちは!VBAの世界へようこそ。
1行ずつ自動で書き込めます。
12345
もし「Write」を使ったらどうなる?
先ほどのコードの「Print」の部分を「Write」に変えるだけで、保存されるテキストの中身は次のように変化します。
"こんにちは!VBAの世界へようこそ。"
"1行ずつ自動で書き込めます。"
12345
このように、文字列の前後に自動で「” “」が付くのがWriteの大きな特徴になります。
実は今回の仕組みを応用すると、VBAのログ(処理履歴)を自動で外部に記録する際にも非常に便利になります。
これまでは「Debug.Print」を使ってVBE(開発画面)上だけで確認していた内容を、テキストファイルとして手元に残し、蓄積していくことができるようになります。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント