ExcelVBAでファイル読み書き

みなさん、こんにちは。ぷもんです。 今回はExcelで外部ファイル(テキスト)を読み込む方法を学びます。


| VBA拡張機能を利用する

今回説明する外部ファイルの読み込みでは、VBA標準機能にはない 拡張機能である、ActiveXライブラリ(Microsoft社のソフトウェア)を使います。 このライブラリを使えば、ファイルシステムに対する操作を 実現することができ、ファイルの読み書きやフォルダの制御もできるようになります。

VBAからActiveXライブラリの拡張機能を利用する方法には次の2つの方式があります。


1. 事前バインディング

VBA開発環境(VBE:Visual Basic Editor)から必要なライブラリを設定する方法
[ツール]→[参照設定]で開かれる「参照設定ダイアログ」で設定します。

VBE参照設定

参照したいライブラリにチェックボックスを入れると参照できるようになります。


2. 実行時バインディング

CreateObject()でActiveXオブジェクトを生成して利用する方法。
この関数を利用すると参照可能なライブラリであるActiveXオブジェクトが返却されます。 「CreateObject("アプリケーション名.クラス名")」の形で利用します。

実行時バインディングは、事前バインディングに比べ、パフォーマンスが低下し、 VBEのコーディング支援機能も得られませんが、事前に参照設定することなく 利用できるため、配布してすぐに利用できる点が良い点です。 詳細は、次の利用方法で詳しく記載します。

今回は、「2」の実行時バインディングによる方法を記載します。


| ファイルを読み込む

ファイルを読み込むには、FileSystemObjectを利用します。

上記の例は、テキストの内容をすべて一度に読み込む方法です。 生成したActiveXオブジェクトは、メモリリークを避けるために、Nothingを設定してクリアします。


次の例は、1行ずつ上から順番にファイルの内容を読み込みます。


OpenTextFile()を実行したときに、オープンするファイルが 存在しない場合、参照するストリームオブジェクトを取得することができず、 エラーになってしまう場合があります。

そのような場合には、次のようにエラーを判断することもできます

(オープンする前にDir()を使って開こうとしているファイルが存在するかを確認する方がよいですが、 それは別の機会にご紹介します)


| ファイルを書き込む

ファイルを書き込みも同様に、FileSystemObjectを利用します。


| ファイルパスや拡張子を取得する

FileSystemObjectを利用すると操作するファイルのパスや拡張子を取得することもできます。


外部ファイルの読み書きがVBAでできるようになれば、様々な応用が利く自動化処理が実行できますね。

コメントを残す

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