更新日:、 作成日:

VBA Input 関数:ファイルを読み込む

はじめに

Excel VBA マクロの Input 関数からファイルを読み込む方法を紹介します。

Input 関数は、ファイルから指定した文字数の文字列を返します。

Open ファイルパス For Input As #1 のようにして、ファイルを開きます。

Input(1, #1) のようにして、1 文字読み込みます。

Line Input #1, 変数 のようにして、1 行読み込みます。

ファイルから一文字ずつや、全データを読み込めます。

バイト単位で読み込むには LineB 関数を使用します。

Input 関数は使用しない

Input 関数より高機能な「FileSystemObject」があります。「ファイルの読み込み」など、すべてのファイル操作ができます。

Input 関数は不便なことが多くあるので使用しません。

Input 関数の引数と戻り値

Input(文字数, ファイル番号)
既に開いているファイル番号のファイルから指定した文字数を読み込みます。

引数「文字数」読み込む文字数を指定します。
引数「ファイル番号」Open ステートメントで開いたファイルの番号を指定します。
戻り値の型文字列型 (String)

解説

Input 関数より高機能な「FileSystemObject」があるので、通常はそちらを使用します。

引数「ファイル番号」には Open ステートメントで開いたファイルの番号を指定します。ファイルはシーケンシャルモード (Input) かバイナリモード (Binary) で開いている必要があります。開いていないファイル番号を指定すると「エラー 52 ファイル名または番号が不正です。」が発生します。

引数「文字数」の数だけ読み込んだ文字列を返します。改行は vbCr と vbLf の 2 文字として扱われます。

Input 関数を呼び出すたびに、続きの文字列が読み込まれます。それをすべて結合して、全データを文字列として読み込めます。

ファイルの文字数を超えて読み込まれたときは「エラー 62 ファイルにこれ以上データがありません。」が発生します。

一行ずつ読み込む

Line Input #ファイル番号, 変数 のように入力して、一行ずつ読み込んだ結果を変数に代入できます。

ファイルを開く

Open ファイルパス For Input As #ファイル番号 のように入力して、ファイルをシーケンシャルモードで開きます。

Open ファイルパス For Binary As #ファイル番号 のように入力して、ファイルをバイナリモードで開きます。

  • ファイルパス:開くファイルのフルパスを指定します。
  • ファイル番号:FreeFile 関数で取得した番号を指定します。

Open で使用したファイル番号を Input 関数の引数「ファイル番号」に指定します。

Close #ファイル番号 のように入力して、ファイルを閉じます。

シーケンシャルモードで開いたファイルを最後まで読み込むには「EOF 関数」を使用します。

バイナリモードで開いたファイルを最後まで読み込むには「LOF 関数」と「Loc 関数」を使用します。

使用例

Input 関数の使用例を紹介します。

ファイルを読み込む

ファイルを読み込みます。

Dim no As Integer  ' ファイル番号
Dim text As String ' ファイルの全データ
Dim s As String

' シーケンシャルモードでファイルを読み込む
no = FreeFile()
Open "D:\Tips.txt" For Input As #no
Do While Not EOF(no)
    s = Input(1, #no)
    Debug.Print(s)
    text = text & s ' 読み込んだ文字を結合
Loop
Close #no

' バイナリモードでファイルを読み込む
no = FreeFile()
Open "D:\Tips.txt" For Binary As #no

Dim length As Long
length = LOF(no)
Dim l As Long
Do While l < length
    s = Input(1, #no)
    l = Loc(no)
    Debug.Print(s)
    text = text & s ' 読み込んだ文字を結合
Loop
Close #no

一行ずつ読み込む

Line Input ステートメントを使用して、一行ずつ読み込めます。

Dim no As Integer ' ファイル番号
Dim s As String

' シーケンシャルモードでファイルを読み込む
no = FreeFile()
Open "D:\Tips.txt" For Input As #no
Do While Not EOF(no)
    Line Input #no, s
    Debug.Print(s)
Loop
Close #no

' バイナリモードでファイルを読み込む
no = FreeFile()
Open "D:\Tips.txt" For Binary As #no

Dim length As Long
length = LOF(no)
Dim l As Long
Do While l < length
    Line Input #no, s
    l = Loc(no)
    Debug.Print(s)
Loop
Close #no