VBA でテキスト ファイルを 1 行ずつ読み取る

Bilal Shahid 2023年6月21日
  1. Open を使用して、VBA でテキスト ファイルを 1 行ずつ読み取る
  2. FileSystemObjectTextStream と共に使用して、VBA でテキスト ファイルを 1 行ずつ読み取る
  3. まとめ
VBA でテキスト ファイルを 1 行ずつ読み取る

さらに処理するために、ファイルに保存されているすべての電子メールを Microsoft Excel に転送しますか? または、最終選考に残った候補者の情報をファイルに保存しますか?

簡単な自動化プログラムを使用して、これらすべてのタスクを効率的に実行できます。

プログラムでテキスト ファイルを読み取ることは、当然のことです。 他のほとんどすべてのコードでは、ファイルからの入力またはファイルへの出力が必要です。 したがって、ファイル全体を行単位、文字単位などで読み取る方法を理解することが不可欠です。

この記事では、テキスト ファイルを 1 行ずつ読むことに重点を置いています。 テキスト ファイルを読み取るさまざまな方法を検討し、要件に従ってそれらを実装することができます。

Open を使用して、VBA でテキスト ファイルを 1 行ずつ読み取る

ファイルを開いたり閉じたりするための VBA オプションはいくつかあります。 ワークブック、ファイル、またはフォルダーを開いたり閉じたりするために使用できるコマンドはごくわずかです。

以下は、ファイルを開き、ファイル全体を 1 行ずつ読み取るコード スニペットです。

Sub example()

    Dim FileNumber As Integer
    Dim Data As String

    FileNumber = FreeFile()
    Open "Filename" For Input As #FileNumber

    While Not EOF(1)
        Line Input #FileNumber, Data
        //Read a data line from the file
        //Perform any required actions on the file
    Wend

    Close #FileNumber
End Sub

上記のプログラムは、ファイルを開き、ファイルからデータを読み取り、ファイルを閉じることができる単純なコード スニペットです。 コード全体で FileNumber および Data 変数を宣言します。

FileNumber を取得するには、FreeFile() 関数が使用されます。 FreeFile() 関数は、ファイルを開くために次に利用可能なファイル番号を返します。

FreeFile() 関数によって返される FileNumber は、ファイルを開き、ファイルから読み取り、閉じるためにプログラム全体で使用されます。

注: プログラム全体で開いているすべてのファイルを閉じることが重要です。

FileNumberFreeFile() 関数によって返された後、Open ステートメントを使用してファイルを開きます。 Input または Output のファイル名を受け取り、次に利用可能な FileNumber を使用します。

ファイルは、ファイルの終わりに到達しないまで、While ループ内で 1 行ずつ読み取られます: While Not EOF(FileNumber)。 ループはデータを 1 行ずつ読み取り、データ ストリームを Data 変数に格納します。

データに対して何らかのアクションを実行する場合は、While ループ内にコード ステートメントを追加できます。

このプログラムでは、Input 用にファイルが開かれているため、While ループ内でそこからデータが読み取られます。 ユーザーが Output モードでデータを開く場合、次のステートメントを使用してデータをファイルに書き込むことができます。

Write #FileNumber, "This is a sample data"

上記のコマンドを使用して、ステートメント "This is a sample data" がファイルに書き込まれます。

FileSystemObjectTextStream と共に使用して、VBA でテキスト ファイルを 1 行ずつ読み取る

2 番目のソリューションでは、Microsoft Scripting Runtime への参照が必要です。 FileSystemObject データ型が使用され、ファイルを読み取ることができます。

以下は、ファイルを 1 行ずつ読み取るためのコード スニペットです。

Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)

Do While Not txtStream.AtEndOfStream
    txtStream.ReadLine
Loop

txtStream.Close

fso という名前の FileSystemObject が宣言され、最初の行で設定されます。 txtStream 変数は、ファイルが読み取り用に開かれたときに返される TextStream オブジェクトです。

TextStream オブジェクトを使用すると、ユーザーはファイルを読み取り、書き込み、または追加モードで開くことができます。

Do While ループを使用して、ファイルを 1 行ずつ解析します。 ファイルの終わりは txtStream.AtEndOfStream によってチェックされ、ファイルは ReadLine コマンドを使用して読み取られます。

コード スニペットには、ファイルを 1 行ずつ最後まで読み取る方法が記載されています。 ファイルに行を書き込みたい場合は、TextStreamObject.WriteLine を使用してテキストをファイルに出力します。

プログラムの最後に、読み取り用に開かれたファイルが閉じられます。

注: ファイルは一度に 1つのモードで開くことができます。 ユーザーは、同じファイル オブジェクトに対して書き込みと読み取りを行うことはできません。 異なるモードでファイルを開くには、異なるオブジェクトを作成する必要があります。

まとめ

簡単な VBA ステートメントを使用して、ファイルを簡単に開き、ファイルから読み取り、ファイルに書き込み、ファイルを閉じることができます。 マクロを使用して、異なるファイルに対して同じタスクを実行できます。 したがって、Microsoft Office が提供する自動化機能は信じられないほど高く、称賛に値します。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - VBA File