なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

現役インフラエンジニアが教えるVBA講座~FSOでテキストファイルを扱う~

f:id:nazuna_0124:20180609224553p:plain:w150

最近なんだか太ってきました←


食欲の秋ですから仕方ないですねー

食べるの楽しいですし。


お疲れ様です。なずなです。


重要回ですが、めんどくさいのでさらっと


今回ではテキストファイルを扱う操作を覚えます。

方法は実は何種類かあります。 今回はFSOオブジェクトを利用します。

ついでにクラスを使ってオブジェクトを利用する 感覚を身に着けると楽です。

最初に参照設定で Microsoft Scripting Runtimeにチェックをいれます。

テキストファイルを作成する。

Sub CreateTextFile()
    Dim fso As New Scripting.FileSystemObject
    
    Dim path
    Dim fileName
    
    
    path = ThisWorkbook.path & "\"
    fileName = "test.txt"
    
    
    fso.CreateTextFile (path & fileName)
    

End Sub

さらっと作るだけ。

この手の作成や読み込みにはフルパス指定が基本です。

VBAを動かすファイルが存在するフォルダを対象にする方法も

一緒に覚えておきましょう。

引数で存在した場合に上書きするかどうかが選択できます。

変数宣言と同時にNewするかどうかはいろいろ意見があります。


覚えるのが楽なのでとりあえずこちらで。

テキストファイルに書き込む

Sub WriteAppendText()
    Dim fso As New Scripting.FileSystemObject
    
    Dim path
    Dim fileName
    
    
    path = ThisWorkbook.path & "\"
    fileName = "test.txt"
    
    
    Dim str
    
    str = "test" & " " & Now
    
    Dim stream As TextStream
    
    'fso.OpenTextFile(path & fileName, ForAppending, True).WriteLine (str)
    
    Set stream = fso.OpenTextFile(path & fileName, ForAppending, True)
    
    stream.WriteLine (str)
    

End Sub

前回作ったテキストファイルに1行追加します。

コメントアウトしてますが、1行でもさらっと書けます。


いちど変数に格納する方法もよく使うので一緒に覚えておきましょう。



テキストファイルを読み込む

Sub ReadText()
    Dim fso As New Scripting.FileSystemObject
    
    Dim path
    Dim fileName
    
    
    path = ThisWorkbook.path & "\"
    fileName = "test.txt"
    
    
    Dim str
    
    
    str = fso.OpenTextFile(path & fileName, ForReading, False).ReadAll
    
    
    Debug.Print str
    

End Sub

ずばっとテキストファイルの中身を全部読み込む方法です。

ものすごくファイルが大きいときだけ注意。


ほとんどの場合は問題ないので、このあと改行でSplitするなり

いろいろ加工しましょう。



というわけで、オブジェクトの使い方を覚えるにしても、

データの入出力も基本はテキストファイルです。



ここをぎっちり覚えておけば、あとはどうにでもなります


pathやfileNameを引数にしたり、読み込んだ文字を返す

関数にしたりいろいろ工夫してみましょー!