更新日:、 作成日:

VBA ファイルの作成

はじめに

Excel VBA マクロでファイルを作成する方法を紹介します。

CreateTextFile や OpenTextFile 関数を使ってファイルを作成できます。

ここで紹介するのはファイルそのものを作成する方法で、データを書き込む方法ではありません。

ファイルにデータを書き込むには「ファイルの書き込み」をご覧ください。
フォルダを作成するには「フォルダの作成」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

FileSystemObject では UTF-16 と Shift_JIS のファイルしか扱えません。UTF-8 のファイルを読み込むと文字化けします。Unicode 文字を入力するには「文字コードを変換や判定する」をご覧ください。

ファイルの作成

ファイルを作成するには CreateTextFile 関数と OpenTextFile 関数の 2 種類があります。どちらも引数の指定方法が違うだけで同じように作成できます。

CreateTextFile 関数を使う

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim ts As TextStream
Set ts = fso.CreateTextFile("D:\UTF-16.txt", Overwrite:=True, Unicode:=True)     ' UTF-16 で作成
Set ts = fso.CreateTextFile("D:\Shift_JIS.txt", Overwrite:=True, Unicode:=False) ' Shift_JIS で作成

' 書き込み処理

ts.Close ' ファイルを閉じる

' 後始末
Set ts = Nothing
Set fso = Nothing

fso.CreateTextFile 関数で指定したパスのファイルを作成します。戻り値で TextStream オブジェクトを取得します。

第 2 (Overwrite) 引数に True を指定すると、必ず新規ファイルで上書きして作成します。False または省略すると既にファイルが存在するときはエラーが発生します。

第 3 (Unicode) 引数に True を指定するとファイルを UTF-16 で作成します。False または省略すると Shift_JIS で作成します。

OpenTextFile 関数を使う

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim ts As TextStream
Set ts = fso.OpenTextFile("D:\Tips.txt", ForWriting, True)   ' 新規ファイルを作成
Set ts = fso.OpenTextFile("D:\Tips.txt", ForAppending, True) ' 既存のファイルに追記

' 書き込み処理

ts.Close ' ファイルを閉じる

' 後始末
Set ts = Nothing
Set fso = Nothing

fso.OpenTextFile 関数で指定したパスのファイルを作成します。戻り値で TextStream オブジェクトを取得します。

第 2 引数に ForWriting (2) を指定すると、必ず新規ファイルで作成します。ForAppending (8) を指定すると、既にファイルが存在するときは、その最後に追記します。

第 3 引数に True を指定するとファイルが存在しないときに自動で作成します。

Set ts = fso.OpenTextFile("D:\Tips.txt", ForAppending, True, TristateTrue)  ' UTF-16 で読み込む
Set ts = fso.OpenTextFile("D:\Tips.txt", ForAppending, True, TristateFalse) ' Shift_JIS で読み込む

第 4 引数に TristateTrue を指定すると UTF-16 でファイルを作成または開きます。TristateFalse または省略すると、Shift_JIS でファイルを作成または開きます。

データの書き込み

ファイルにデータを書き込むには、取得した TextStream オブジェクトに対して Write・・・ 関数を使用します。

Set ts = fso.OpenTextFile("D:\Tips.txt", ForWriting, True) ' 指定したパスにファイルを作成する

ts.Write ("文字列")       ' 文字列の書き込み
ts.WriteLine ("改行付き") ' 最後に改行を付けて書き込み
ts.WriteBlankLines (3)    ' 空行を指定の数だけ書き込み

ts.Close ' ファイルを閉じる

詳しくは「ファイルの書き込み」をご覧ください。