【VBA入門】FileSystemObjectを使ってテキストファイルを読み込む

【VBA入門】FileSystemObjectを使ってファイルの読み込み

この記事では、ExcelVBAでFileSystemObjectを利用してテキストファイルを読み込みする方法について説明しています。

 

FileSystemObjectは、ファイルの読み込みやフォルダの操作をしたい時に使える便利なライブラリです。

 

FileSystemObjectが持っている「OpenTextFile関数」を使うと、指定したテキストファイルを開くことができます。

 

OpenTextFile関数」でテキストファイルを開くと、「TextStream」オブジェクトを返します。

 

 

この「TextStream」を利用すると、ファイルの読み書きなどのファイルの内容の操作ができます。

 

TextStream」では、以下の3つの方法でファイルの読み込みが可能です。

  1. テキストファイルの全てのデータをまとめて一気に読み込む
  2. テキストファイルデータを1行ずつ読み込む
  3. テキストファイルデータを1文字ずつ読み込む

 

それでは、3つの方法でテキストファイルを読み込む方法について、説明していきます。

 

もくじ

FileSystemObjectで読み込みするテキストファイルを準備する

それでは、読み込みするテキストファイルを用意しましょう。

 

以下のように、文字を入力したテキストファイルを適当なフォルダに名前をつけて保存します。

読み込みするテキストファイル

読み込みするテキストファイル

 

今回はサンプルとして、2行分の文字を入力したテキストファイルを準備しました。

1行目に「ABCDE」、2行目に「FGHIJ」と入力しています。

 

ファイルパスや読み込んだデータを表示させるシートを準備する

次に、読み込むテキストファイルパスを指定したり、読み込んだテキストファイルデータを表示させるシートを用意します。

ファイル読み込みシートを作成する

ファイル読み込みシートを作成する

 

  1. 「ファイル読み込み」という名前のシートを作成します。
  2. A1セルに「読み込むファイルパス」のタイトル行を作成します。
  3. A2セルに「読み込みファイルパス」の入力欄を作成します。
  4. A4セルに「ファイルの全てのデータを読み込む」のタイトル行を作成します。
  5. A7セルに「ファイルのデータを1行ずつ読み込む」のタイトル行を作成します。
  6. A11セルに「ファイルのデータを1文字ずつ読み込む」のタイトル行を作成します。

 

それでは、テキストファイルを読み込む方法を1つずつ説明していきます。

「テキストファイルの全てのデータをまとめて一気に読み込む」機能の作り方

FileSystemObjectを利用して、テキストファイルを読み込む方法の1つ目の「まとめて一気に読み込む」機能を作成します。

「まとめて一気に読み込む」機能は、読み込みテキストファイルのデータが少ない時に使うのが良いです。

1つの変数に読み込んだデータ全てを格納して利用することになります。

 

開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。

Microsoft Visual Basic for Applicationsを起動する

Microsoft Visual Basic for Applicationsを起動する

 

「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。

一気にテキストファイルデータを読み込む機能を作成する

一気にテキストファイルデータを読み込む機能を作成する

標準モジュールを追加して、以下のソースを書きます。

 

最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。

 

「テキストファイルの全てのデータをまとめて一気に読み込む」機能の使い方

それでは、データをまとめて一気に読み込む機能の使い方を説明します。

 

A2セルに読み込むファイルパスを入力します。

データをまとめて一気に読み込む機能の使い方

データをまとめて一気に読み込む機能の使い方

 

次に、開発タブの「マクロ」をクリックします。

マクロボタンを押す

マクロボタンを押す

 

「FileReadAll」を選択して、「実行」ボタンをクリックします。

FileReadAllを実行する

FileReadAllを実行する

 

A5セルにテキストファイルのデータが表示されます。

2行のデータが1つのセルに表示されます。

全てのデータが読み込まれる

全てのデータが読み込まれる

 

「テキストファイルの全てのデータをまとめて一気に読み込む」機能のVBAプログラム(FileReadAll)の説明

まず、共通で利用するファイルオープンモードを指定する変数を作成しておきます。

ファイルオープンモードを指定する値を作成する

まずは、ファイルを開く方法を指定する列挙型変数(Enum)を作ります。

ファイルを開く方法は、以下の3つがあります。

  • 読み取りモード
  • 書き込みモード
  • 追記モード

 

このあとで説明する「全てのデータをまとめて一気に読み込む」機能、「データを1行ずつ読み込む」機能、「データを1文字ずつ読み込む」機能で、ファイルオープンモードは利用します。

 

それでは、VBAプログラム(FileReadAll)を説明します。

①利用するシートを変数に格納する

ここでは、このあとの処理で何度も使う「ファイル読み込み」シートを変数に格納しています。

そうすることにより、入力するプログラムを短くすることができるからです。

何度も「ThisWorkbook.Sheets(“ファイル読み込み”)」と入力するより、「sht」と入力するほうがコードが少なくてよいからです。

 

②FileSystemObjectを変数に格納する

ここでは、ファイル操作に必要な「FileSystemObject」を変数に格納しています。

 

③ファイルパスを変数に格納する

ここでは、読み込むテキストファイルパスを変数に格納しています。

 

④ファイルパスとオープンモードを指定してファイルを開き、ファイル操作オブジェクトを取得する

ここでは、「FileSystemObject」が持っている「OpenTextFile」関数でテキストファイルを開いています。

「OpenTextFile」関数は、テキストファイルを操作可能な「TextStream」オブジェクトを返しますので、変数「ts」に格納しています。。

また、「OpenTextFile」関数にファイルパス(filePath)とオープンモード(読み取りモード)を渡しています。

 

⑤ファイルの全てのデータを読み込む

ここでは、「TextStream」オブジェクトを利用してテキストファイルのデータ全てを変数「readData」に格納しています。

そして、読み込んだデータを「ファイル読み込み」シートのセルA5にセットしています。

 

⑥開いたファイルを閉じる

ここでは、「TextStream」オブジェクトを閉じています。

つまり、開いたテキストファイルを閉じています。

使い終わったテキストファイルは、閉じるようにしましょう。

なぜなら、開いたままにしているとそのテキストファイルに書き込むことができないからです。

 

⑦メモリを開放する

ここでは、使い終わったメモリを開放しています。

 

「テキストファイルデータを1行ずつ読み込む」機能の作り方

続いて、FileSystemObjectを利用して、テキストファイルを読み込む方法の2つ目の「データを1行ずつ読み込む」機能を作成します。

「データを1行ずつ読み込む」機能は、1行ずつ異なった処理を行いたい時に使います。

今回の例で言えば、1行ずつ表示させるセルを変えています。

 

「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。

データを1行ずつ読み込む機能を作成する

データを1行ずつ読み込む機能を作成する

 

以下のソースを書きます。

 

「テキストファイルのデータを1行ずつ読み込む」機能の使い方

それでは、データを1行ずつ読み込む機能の使い方を説明します。

 

A2セルに読み込むファイルパスを入力します。

1行ずつデータを読み込む準備

1行ずつデータを読み込む準備

 

次に、開発タブの「マクロ」をクリックします。

マクロボタンを押す

マクロボタンを押す

 

「FileReadLine」を選択して、「実行」ボタンをクリックします。

FileReadLineを実行する

FileReadLineを実行する

 

A8、A9セルにテキストファイルのデータが表示されます。

1行ずつ別々のセルにデータが表示されます。

1行ずつ別のセルに表示される

1行ずつ別のセルに表示される

 

「テキストファイルのデータを1行ずつ読み込む」機能のVBAプログラム(FileReadLine)の説明

先程の「テキストファイルの全てのデータをまとめて一気に読み込む」機能のVBAプログラム(FileReadAll)と異なる部分だけ説明します。

具体的には、⑤の「ファイルからデータを読み込む部分」だけが「FileReadAll」と違います。

それ以外については、同じです。

⑤ファイルのデータを1行ずつ読み込む

ここでは、「TextStream」オブジェクトの「AtEndOfStream」プロパティを利用して、テキストファイルの最後かを判定しながら繰り返しデータを読み込んでいます。

具体的には、「AtEndOfStream」プロパティがTRUEを返すまでデータを読み込んでいます。

「AtEndOfStream」プロパティがTRUEを返すときは、テキストファイルの最後に到達したときです。

つまり、「もうそれ以上データはないという状態」まで処理を繰り返しています。

 

「TextStream」オブジェクトの「readLine」プロパティで1行分のデータを読み込み、変数「readData」に格納しています。

変数「readData」に格納した1行分のデータを、A8セルから1行ずつ下にセットしています。

具体的には、テキストファイルの1行目のデータをA8セルにセットし、2行目のデータをA9セルにセットし、1行ずつ異なるセルにデータをセットします。

 

「テキストファイルデータを1文字ずつ読み込む」機能の作り方

続いて、FileSystemObjectを利用して、テキストファイルを読み込む方法の3つ目の「データを1文字ずつ読み込む」機能を作成します。

「データを1文字ずつ読み込む」機能は、1文字ずつ異なった処理を行いたい時に使います。

今回の例で言えば、1文字ずつ表示させるセルを変えています。

 

「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。

データを1文字ずつ読み込む機能を作成する

データを1文字ずつ読み込む機能を作成する

 

以下のソースを書きます。

 

「テキストファイルのデータを1文字ずつ読み込む」機能の使い方

それでは、データを1文字ずつ読み込む機能の使い方を説明します。

 

A2セルに読み込むファイルパスを入力します。

データを1文字ずつ読み込む準備

データを1文字ずつ読み込む準備

 

次に、開発タブの「マクロ」をクリックします。

マクロボタンを押す

マクロボタンを押す

 

「FileReadOneMoji」を選択して、「実行」ボタンをクリックします。

「FileReadOneMoji」を実行する

「FileReadOneMoji」を実行する

 

A12セルからA23セルにテキストファイルのデータが表示されます。

1文字ずつ別々のセルにデータが表示されます。

1文字ずつ別のセルに表示される

1文字ずつ別のセルに表示される

 

また、B12セルからB23セルに数字が表示されます。

この数字は、文字コードを表しています。

例えば「A」の文字コードは、65です。

 

しかし、A17セル、A18セルはなにも表示されていませんが、B17セル、B18セルに数字が表示されています。

文字コード「13」は、CR(キャリッジ・リターン)です。

文字コード「10」は、LF(ラインフィード)

つまり、テキストファイルの1行目の最後に改行コード(CRLF)が存在するからです。

 

「テキストファイルのデータを1文字ずつ読み込む」機能のVBAプログラム(FileReadOneMoji)の説明

先程の「テキストファイルの全てのデータをまとめて一気に読み込む」機能のVBAプログラム(FileReadAll)と異なる部分だけ説明します。

具体的には、⑤の「ファイルからデータを読み込む部分」だけが「FileReadAll」と違います。

それ以外については、同じです。

⑤ファイルのデータを1文字ずつ読み込む

ここでは、「TextStream」オブジェクトの「AtEndOfStream」プロパティを利用して、テキストファイルの最後かを判定しながら繰り返しデータを読み込んでいます。

具体的には、「AtEndOfStream」プロパティがTRUEを返すまでデータを読み込んでいます。

 

「TextStream」オブジェクトの「read」プロパティに1を指定して、1文字分のデータを読み込み、変数「readData」に格納しています。

変数「readData」に格納した1文字分のデータを、A12セルから1行ずつ下にセットしています。

また、B12セルから1行ずつ下に、変数「readData」に格納されている文字の文字コードをセットしています。

 

具体的には、テキストファイルの1文字目のデータをA12セルにセットし、2文字目のデータをA13セルにセットし、1行ずつ異なるセルにデータをセットします。

 


 

FileSystemObjectを利用してテキストファイルのデータを読み込む方法を説明しました。

また、データの読み込み方法を3つ(一気に読み込む、1行ずつ読み込む、1文字ずつ読み込む)説明しましたが、やりたい処理によって使い分けるようにしましょう。

 

以上です。

 

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です