【VBA入門】OpenメソッドでテキストファイルやCSVの読み込み

VBAでファイルを読み込むにはOpenメソッドを使用します。

ファイルを読み込む方法がよくわからない
ファイルを読み込んでデータを取得したい

といった方にむけて、この記事ではExcelブックやテキストファイル、CSVなどファイルを読み込んでデータを取得する方法について解説していきます。

  • Excelブックを開く方法
  • ブックを開く際の注意点
  • ダイアログでフォルダを指定してファイルを選択
  • テキスト、CSVファイルを読み込む

VBAでのデータ読み込み方法を網羅的に解説していますので、ぜひ参考にしてください!

Excelブックを開く方法

Excelブックを開くには、WorkbooksコレクションのOpenメソッドを使用します。

Openメソッドは以下のように記述します。

これだけの引数を設定することができますが、ちょっと多すぎるので使いそうな引数だけ表にしてみました。

引数説明
FileName開くブックのファイル名
ReadOnlyTrueの場合、読み取り専用モード
デフォルト値はFalse
Password読み取りのパスワード
WriteResPassword書き込みのパスワード

ファイルパスを指定して開く

それでは、ファイルパスを指定してブックを開く方法について実際にみていきましょう。VBAを記述しているブックと同じフォルダに存在する”Book1.xlsx”を開くサンプルコードになります。

読み取り専用で開く

読み取り専用でブックを開くには、Openメソッドの引数ReadOnlyをTrueで指定します。

サンプルコードで確認しましょう。

ファイルを開く際の注意点

ブックを開く際には次のことに注意する必要があります。

  • ブックが存在しない場合
  • すでに開いている場合


それぞれの場合について、詳しく見ていきましょう。

ブックが存在しない場合

ブックが存在しない場合は、エラーが発生します。ブックを開く前に、存在するかチェックするようにしましょう。存在するかチェックするには、Dir関数を使います。

Dir関数は引数に指定したファイルが見つからない場合、空文字を返します。Dir関数の戻り値が空文字でない場合に、ファイルを開くようにしましょう。

サンプルコードは以下のようになります。

Dir関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

VBAでファイル名を取得するには?3+1のパターンで速攻理解!
更新日 : 2019年4月25日

すでに開いている場合

Excelのブックはすでに開いていると、Openメソッドではエラーになります。ブックが開いているかチェックするようにしましょう。ブックが開いていれば、Workbooksコレクションのメンバに含まれています。

Workbooksコレクションのメンバの名前をNameプロパティで取得して、開きたいブック名と一致しなければ、Openメソッドで開くことが可能です。

ダイアログでフォルダを指定して選択

ダイアログでブックを選択して開く場合には、ApplicationオブジェクトのGetOpenFilenameメソッドを使用します。

GetOpenFilenameメソッドは以下のように記述します。

いずれの引数も省略することができます。それぞれの引数の説明について表にまとめます。

引数説明
FileFilterファイルフィルター文字列
FilterIndexFileFilterで指定した文字列の中で、
何番目の値をデフォルト値とするか指定
デフォルト値は最初の文字列
Titleダイアログボックスのタイトルを指定
デフォルト値は”ファイルを開く”
ButtonTextMacでのみ指定可能
MultiSelectTrueの場合、複数のファイルを選択可能
Falseの場合、1つのファイルのみ選択可能
デフォルト値はFalse

引数FileFilterは以下のように2つをセットで指定します。

“ファイルの種類を説明する任意の文字列, ファイルの拡張子”

それではサンプルコードで確認しましょう。

実行結果:
Open06

GetOpenFilenameメソッドはダイアログでキャンセルボタンが押されるとFalseを返します。ですので、このサンプルコードではFalseが返される場合はMsgBoxを表示するようにしています。

False以外の場合は、Openメソッドを使って返されたファイル名のブックを開くようにしています。

ワイルドカードで開く

拡張子を指定してダイアログに候補を表示する場合に、拡張子の指定にワイルドカードを使うこともできます。Excelには通常の拡張子「xlsx」やマクロ有効ブックの拡張子「xlsm」、Excel2003までの拡張子「xls」などいくつかの拡張子があります。

ですので「xlsx」、「xlsm」、「xls」などの拡張子全てが候補として表示されるように、ワイルドカード文字「?」を使って指定すると便利です。

サンプルコードで確認しましょう。

実行結果:
Open03

ワイルドカードについては、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】Like演算子(ワイルドカード、エスケープ、否定)
更新日 : 2019年4月19日

複数の拡張子を候補として表示する方法

ダイアログで複数の拡張子を候補として表示したい場合もあります。そのような場合は以下のように「;」(セミコロン)で区切ります。

“ファイルの種類を説明する任意の文字列, *.xls? ; *.csv”

複数の拡張子を登録するには「任意の文字列, 拡張子」のセットを「,」(カンマ)で区切ります。

“ブック, *.xlsx, マクロ, *.xlsm, CSV, *.csv”

サンプルコードで確認しましょう。

実行結果:
Open05

複数ファイルを選択する方法

一つのフォルダから複数のファイルを開きたい場合もあります。

そのような場合はGetOpenFilenameメソッドの第5引数MultiSelectをTrueで指定します。

サンプルコードで確認しましょう。

実行結果:
Open04

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

次は、テキストファイルやCSVファイルを読み込む方法について説明していきます。なお、CSVファイルの拡張子「.csv」はExcelで開くように関連付けしていると、ブックと同じように開くと思われるかもしれません。

しかし、CSVファイルはテキストファイルと同じテキスト形式ですので、これからご紹介する方法でファイル開いて、読み込みます。

ファイルを読み込むには、

  • ファイルを開く
  • データを読み込む
  • ファイルを閉じる

の順で処理を行う必要があります。順に解説していきます。

ファイルを開く

ファイルを開くには、Openステートメントを使います。Openステートメントは以下のように記述します。

「[ ]」内は省略することができます。

引数が多いので表にまとめました。

引数定数説明
pathnameファイルのパス
modeAppend追記の書き込みモード
Binaryバイナリモード
Input読み込みモード
Output上書きの書き込みモード
Randomランダムアクセスモード
accessRead読み込み専用
Write書き込み専用
Read Write読み書き
lockShared他プロセスからの読み書き可
Lock Read他プロセスからの読み込み不可
Lock Write他プロセスからの書き込み不可
Lock Read Write他プロセスからの読み書き不可
fileNumber任意のファイル番号
1~511の数値
FreeFile関数で取得
recLengthRandomモードの場合、レコード長
デフォルト値はバッファ容量
32,767バイト以下の数値

Append、Binary、Output、またはRandomモードで開いた場合、pathnameで指定したファイルが存在しないときは、ファイルが作成されます。ファイルがすでに別のプロセスによって開かれていて、指定した種類のアクセスが許可されない場合は、Open処理は失敗しエラーが発生します。

ファイルを開く方法をサンプルコードで確認しましょう。

このサンプルコードでは、Openステートメントを使って読み込みモードでファイルを開いています。Closeステートメントについては、後ほど詳しく解説します。

テキストデータを読み込む

テキストデータを読み込むには、Line Input #ステートメントを使います。Line Input #ステートメントはファイルから1行読み取って、その内容をString型変数に格納します。

Line Input #ステートメントは以下のように記述します。

引数filenumberはファイル番号を指定します。引数varnameは読み取った内容を格納するString型の変数名です。

サンプルコードで使い方を確認しましょう。なお、読み込む”test.txt”ファイルの内容は以下のとおりです。

test.txt:

実行結果:
Open01

CSVデータを読み込む

カンマ区切りのCSVデータを読み込むには、Input #ステートメントを使う方が便利です。

Input #ステートメントはファイルからデータを読み取り、「,」で区切られたデータをそれぞれの変数へ格納することができます。Input #ステートメントは以下のように記述します。

引数filenumberはファイル番号を指定します。引数var1, var2, ・・・は読み取った値を格納する変数を指定します。

サンプルコードで確認しましょう。なお、読み込む”test1.csv”ファイルの内容は以下のとおりです。

test1.csv:

実行結果:
Open02

上のサンプルでは文字列を入力しましたが、数値を読み込んでセル入力するケースもありますよね。数値の場合は、「001」のようなケースだと「1」と入力されてしまうため、セルの書式を文字列に変更してから入力します。

セルの書式は、NumberFormatを指定することで変更することができます。

test2.csv:

実行結果:
キャプチャ

ファイルを閉じる

ファイルを閉じるには、Closeステートメントを使います。Closeステートメントは以下のように記述します。

「[ ]」内は省略することができます。

filenumberを省略する場合、Openステートメントによって開かれたすべてのファイルが閉じられます。Output、またはAppendで開かれたファイルを閉じると、すべてのバッファー領域が解放されます。

Closeステートメントを実行すると、ファイルとそのファイル番号の関連付けが無効になります。

まとめ

ここでは、ファイルを開く方法について説明しました。

Excelのブックを開くにはWorkbooksコレクションのOpenメソッドを使用します。また、テキストファイルやCSVファイルを開くにはOpenステートメントを使用します。

どちらも使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説