アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

オブジェクトを使用したテキスト形式の読み込み・書き込み

◆オブジェクトを使用したテキスト形式の読み込み・書き込み


  入出力で紹介したテキスト形式の読み込み・書き込みと同じ事が、Fileオブジェクトを
  使用してできます。

  テキスト形式のファイルを1行づつ読んで、新しいファイルに 1行づつ書き込みを行って
  います。

  最後に読み込んだファイルを削除して、新たに作成したファイルに読み込んだ
  ファイルの名前を付けています。

  ファイル番号を気にしなくても良いので、こちらの方が分かりやすいでしょうか?


Sub FileDuplicate()

    Const ForReading = 1
    Dim FileType, Prompt, TempFileNamePath, textline As String
    Dim File_Object_Name As String
    Dim File_Object, Duplicate_Object As Object
    Dim FileNamePath As Variant

    FileType = "すべての ファイル (*.*),*.*"
    Prompt = "File を選択してください"
    '操作したいファイルのパスを取得します
    FileNamePath = SelectFileNamePath(FileType, Prompt)

    If FileNamePath = False Then    'キャンセルボタンが押された
        End
    End If
    
    'リードモードで開く
    Set File_Object = CreateObject("Scripting.FileSystemObject"). _
                      OpenTextFile(FileNamePath, ForReading, False)

    'テンポラリーファイルにユニークな名前をつけます
    TempFileNamePath = FileNamePath & _
                                Format(Now, "yyyymmddhhmmss") & ".txt"
    
    'テンポラリーファイルを作成します
    Set Duplicate_Object = CreateObject("Scripting.FileSystemObject"). _
                           CreateTextFile(TempFileNamePath)

    'ファイルの終端かどうか確認します
    Do While File_Object.AtEndOfStream <> True
    
        '1行読み込みます
        textline = File_Object.ReadLine
    
        'データの書き込みをします
        Duplicate_Object.WriteLine (textline)

    Loop

    'ファイルを閉じます
    File_Object.Close
    Duplicate_Object.Close
    
    
    'リードモードで開いたファイルのファイルオブジェクトを取得
    Set File_Object = CreateObject _
              ("Scripting.FileSystemObject").GetFile(FileNamePath)
    
    'ファイルの名前をSaveします
    File_Object_Name = File_Object.Name
    
    '元のファイルを削除します
    File_Object.Delete
    
    'テンポラリーファイルのファイルオブジェクトを取得
    Set Duplicate_Object = CreateObject _
              ("Scripting.FileSystemObject").GetFile(TempFileNamePath)

    'テンポラリーファイルを元のファイルの名前にします
    Duplicate_Object.Name = File_Object_Name
    
End Sub

Function SelectFileNamePath(FileType, Prompt) As Variant
  SelectFileNamePath = Application.GetOpenFilename(FileType, , Prompt)
End Function


example25 をダウンロードして動作を確認してください。


Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.