アクセス上位ページ
 
最近の更新内容
(2)-e.FSOによるファイル削除 ⇐ [PREV]
[NEXT] ⇒ (2)-g.OpenTextFile メソッド

Excel VBA ≫ 3.FSO - FSOによるファイル操作(2)-f.CreateTextFile メソッド

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

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



  • CreateTextFile ・・・ 主にテキストファイルを新規作成する場合に使用
  • OpenTextFile ・・・ 主に既存テキストファイルを読み書きする場合に使用
  • OpenAsTextStream ・・・ 主に既存テキストファイルを読み書きする場合に使用

各メソッドで可能な操作
メソッド 新規作成 読み込み 書き込み
(新規)
書き込み
(追加)
○・・・可能、×・・・不可能
CreateTextFile
(対象:fso、folder)
× ×
OpenTextFile
(対象:fso)
OpenAsTextStream
(対象:file)
×


上記メソッドのうち、当ページでは CreateTextFile メソッドを使用してテキストファイルを操作する方法を説明します。
管理人から一言・・・ CreateTextFile メソッドの必要性
上記の表を見ていただければわかるように CreateTextFile メソッドの機能は OpenTextFile メソッドで代用することが可能なため、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.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
  • 開いているテキストファイルを閉じます。

  • テキストファイルの出力例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
    

    <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
    

    <処理対象フォルダ内のファイル> 処理対象フォルダ内のファイル <sample_fs026_02 実行後> sample_fs026_02実行後 <sample_fs026_02 実行後> sample_fs026_03実行後 <実行結果(イミディエイトウィンドウ)>
    行 = 1 位置 = 1 値 = 1
    行 = 2 位置 = 1 値 = 2
    行 = 3 位置 = 1 値 = 3
    行 = 6 位置 = 1 値 = 4
    行 = 7 位置 = 1 値 = 5
    

カテゴリ内ページ



Page
Top