CreateTextFileメソッドによるテキストファイル操作

ファイルシステムオブジェクトを使用してテキストファイルを操作するには、まず、操作対象ファイルを表すテキストストリームオブジェクトを取得する必要があります。

スポンサーリンク

テキストストリームオブジェクトの取得

テキストストリームオブジェクトを取得するには以下3つのメソッドのいずれかを使用します。どのメソッドを使用するのかは、テキストファイルに対する操作や処理内容により判断します。

  • CreateTextFile ・・・ 主にテキストファイルを新規作成する場合に使用
  • OpenTextFile ・・・ 主に既存テキストファイルを読み書きする場合に使用
  • OpenAsTextStream ・・・ 主に既存テキストファイルを読み書きする場合に使用
各メソッドで可能な操作
メソッド 新規
作成
読込 書込
(新規)
書込
(追加)
○・・・可能、×・・・不可能
fso.CreateTextFile
folder.CreateTextFile
× ×
fso.OpenTextFile
file.OpenAsTextStream ×

このページでは上記メソッドのうち、CreateTextFile メソッドを使用してテキストファイルを操作する方法を説明します。

CreateTextFileメソッドの使用方法

CreateTextFile メソッドは ファイルシステムオブジェクトとフォルダオブジェクトのメンバーメソッドです。そのときの処理に応じて使いやすいオブジェクトを選択します。CreateTextFile メソッドにより取得したテキストストリームオブジェクトは自動的に新規書き込みモードとなります。

構文
fso.CreateTextFile(FileName [, Overwrite] [, Unicode])
folder.CreateTextFile(FileName [, Overwrite] [, Unicode])
引数名 省略 説明
FileName × 作成するファイルのパスを表す文字列を指定します。 親オブジェクトがファイルシステムオブジェクトの場合は絶対パス、相対パスともに指定可能ですが、 フォルダオブジェクトの場合は相対パスのみ指定可能です。
Overwrite 既にあるファイルを上書きする場合は True 、上書きしない場合は False を指定します。 既定値は True(上書きする)です。
Unicode Unicode で作成されたファイルの場合は True 、ASCII で作成されたファイルの場合は False を指定します。 既定値は False (ASCII)です。

引数 FileName は同一メソッドでも親オブジェクトによって指定できるパスの種類と相対パスの基準が異なりますので注意してください。

  • fso.CreateTextFile
    ・・・ 絶対パス、相対パスともに指定可能。 相対パスの基準は カレントフォルダ
  • folder.CreateTextFile
    ・・・ 相対パスのみ指定可能。相対パスの基準はフォルダオブジェクト。

出力に関する主なプロパティ・メソッド

書き込みモードでテキストストリームオブジェクト(表中、tsoと記載)を取得した後、以下のプロパティおよびメソッドを使用することで文字列の出力や出力行数の取得などが可能になります。

内容 tso のプロパティ
/メソッド
ファイルポインタ位置(行数)取得 tso.Line
行のカラム位置取得
(行頭からの文字位置)
tso.Column
文字列書き込み tso.Write
空白行書き込み tso.WriteBlankLines
文字列書き込み
(自動的に改行)
tso.WriteLine
ファイルクローズ tso.Close
  • tso.Line
    現在のファイルポインタ(行)を取得します。先頭行は 1 となります。 tso.WriteLine メソッドなどを使用すると文字列はこの行へ出力されます。
     
  • tso.Column
    現在のカラム位置(行頭からの文字位置)を取得します。 行頭は 1 となります。tso.Write メソッドを使用すると文字列はこの位置へ出力されます。
     
  • tso.Write ( String )
    引数 String (省略不可)にはファイルに出力する文字列を指定します。 文字列の後ろに改行文字は付与されません。
     
  • tso.WriteBlankLines ( Lines )
    引数 Lines (省略不可)にはファイルに出力する改行文字の数を指定します。
     
  • tso.WriteLine ( [String] )
    引数 String (省略可)にはファイルに出力する文字列を指定します。 文字列の後ろに改行文字が自動的に付与されます。この引数を省略すると改行文字だけが出力されます。
     
  • tso.Close
    開いているテキストファイルを閉じます。
     

CreateTextFileメソッドの使用例

テキストファイルの出力例1

fso.CreateTextFile メソッドでテキストストリームオブジェクトを取得後、tso.Write メソッドで同一行に1文字ずつ出力する例です。CreateTextFile メソッドの第2引数 Overwrite を省略しているため、同名のファイルが存在した場合は上書き(前の内容は消去)されます。

Sub sample_fs026_01()
    Dim fso         As Object
    Dim tso         As Object
    Dim strPath     As String
    Dim i           As Integer

    'ファイルシステムオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")
    'テキストストリームオブジェクトの取得
    strPath = "C:\Users\xxxx\Desktop\vba\fs026_01.txt"
    Set tso = fso.CreateTextFile(strPath)

    With tso
        For i = 1 To 5
            'イミディエイトウィンドウへ出力位置と値を表示
            Debug.Print "行 = " & .Line & _
                        " 位置 = " & .Column & _
                        " 値 = " & i
            '文字列出力(改行なし)
            .Write i
        Next i

        .Close  'ファイルのクローズ
    End With

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set tso = Nothing
End Sub

 For…Next Withステートメント  Setステートメント

上記サンプルを実行すると下図のテキストファイルが出力されます。

sample_fs026_01実行後
sample_fs026_01実行後
  • マクロ実行結果(イミディエイトウィンドウ
    行 = 1 位置 = 1 値 = 1
    行 = 1 位置 = 2 値 = 2
    行 = 1 位置 = 3 値 = 3
    行 = 1 位置 = 4 値 = 4
    行 = 1 位置 = 5 値 = 5

テキストファイルの出力例2

folder.CreateTextFile メソッドでテキストストリームオブジェクトを取得後、tso.WriteLine メソッドにより行単位で出力する例です。

以下の例では、指定されたフォルダ内のテキストファイルの数をカウントし、そのカウント + 1 の値を新規作成するファイル名に含めています。また、WriteBlankLines メソッドにより、途中で空白行を2行出力しています。

Sub sample_fs026_02()
    Dim fso         As Object
    Dim folderObj   As Object
    Dim fileObj     As Object
    Dim tso         As Object
    Dim count       As Integer  '初期値はゼロ
    Dim strFile     As String
    Dim i           As Integer

    'ファイルシステムオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")
    'フォルダオブジェクトの取得
    Set folderObj = fso.GetFolder("C:\Users\xxxx\Desktop\vba\")

    For Each fileObj In folderObj.Files
        'テキストファイルの個数をカウント
        If LCase(fileObj.Name) Like "*.txt" Then
            count = count + 1
        End If
    Next

    'ファイル名の設定
    strFile = "text_" & Format(count + 1, "0000") & ".txt"
    'テキストストリームオブジェクトの取得
    Set tso = folderObj.CreateTextFile(strFile)

    With tso
        For i = 1 To 5
            'イミディエイトウィンドウへ出力位置と値を表示
            Debug.Print "行 = " & .Line & _
                        " 位置 = " & .Column & _
                        " 値 = " & i
            '文字列出力(改行あり)
            .WriteLine i
            '空白行の出力
            If i = 3 Then .WriteBlankLines 2
        Next i

        .Close  'ファイルのクローズ
    End With

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set folderObj = Nothing
    Set fileObj = Nothing
    Set tso = Nothing
End Sub

 fso.GetFolder For…Next Withステートメント  Setステートメント
 Like演算子 Format関数

下図はマクロ実行前のテスト用フォルダの状態です。

処理対象フォルダ内のファイル
処理対象フォルダ内のファイル

上記サンプルマクロを実行すると、新規にテキストファイルが作成されます。

sample_fs026_02実行後
sample_fs026_02実行後
sample_fs026_03実行後
sample_fs026_03実行後
  • マクロ実行結果(イミディエイトウィンドウ
    行 = 1 位置 = 1 値 = 1
    行 = 2 位置 = 1 値 = 2
    行 = 3 位置 = 1 値 = 3
    行 = 6 位置 = 1 値 = 4
    行 = 7 位置 = 1 値 = 5

 
ファイルシステムオブジェクトのプロパティ・メソッド
Openステートメントを使用したテキストファイル新規作成

タイトルとURLをコピーしました