本ページには広告が含まれています。

VBA Input 関数 ファイルから指定数の文字列を取得する

Excel VBA Input 関数 ファイルから指定数の文字列を取得する

Excel VBAの「Input 関数」について解説します。

スポンサーリンク

Input 関数とは

Excel VBA の Input 関数は、Open ステートメントで開かれたファイルから指定した文字数の文字列を取得して返します。

Open ステートメントはシーケンシャルモード (Input) かバイナリモード (Binary) で開いている必要があります。開いたファイルのファイル番号からデータを取得します。

Input 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

Input 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

Input(number, [#]filenumber)

引数

引数 説明
number【必須】取得する文字数を指定します
filenumber
(Variant)
【必須】開いたファイルの番号を指定します
※ ナンバー記号「#」の付加は任意です

戻り値

戻り値説明
文字列
(String)
指定した文字数分の文字列を返します

※ 改行(vbCrLf)は vbCr と vbLf の 2 文字として扱われます。

解説(使用例)

Input 関数の使い方について、サンプルを使って解説します。

Input 関数サンプル

Input 関数の基本的な使い方をサンプルで確認します。

ファイルから指定文字数を読み込む例

Input 関数を使用してテキストファイルにから指定文字数をを読み込む例です。

'■Input関数サンプル1(指定文字数を取得する例)
Sub Input_Sample01()
    Dim str As String
    
    ' Open...Outputモードでファイルに文字列を書き込む
    Open "c:\VBA_Sample\test.txt" For Output As #1
        Print #1, "12345" & vbCrLf & "67890"
    Close #1  ' ファイルを閉じる
    
    ' OpenステートメントInputモードでファイルを開く
    Open "c:\VBA_Sample\test.txt" For Input As #1
        ' 最初の3文字を読み込む
        str = Input(3, 1)
        MsgBox str
        ' 残りの7文字を読み込む
        str = Input(7, 1)
        MsgBox str
    Close #1  ' ファイルを閉じる
End Sub

コードの前半部分は、指定パスの test.txt に Openステートメントの Output モードで文字列を改行文字を含めて書き込んでいます。開いたファイルは閉じておきます。

次に、シーケンシャル入力 (Input) モードでファイルをファイル番号(#1)で開きます。
開いたファイルから、Input 関数で取得文字数を3文字に指定して読み込み、変数に格納して表示します。

Input_Sample01 最初に表示されるMsgBox画像

画像のとおり先頭からの3文字分の「123」を取得して常時されました。

次に、ファイルは閉じすに再度 Input 関数でファイル内の文字を読み込む場合、先に読み込んだ文字数の次の位置から読み込みます。7文字分読み込むように指定した結果が次の MsgBox です。

Input_Sample01 次に表示されるMsgBox画像

途中に改行文字(vbCr + vbLf)が入っているので 2文字分消費されているのがわかります。

最後にファイルを閉じて終了です。

では次は、読み込み位置が順に移動していくことを利用して文字列全部を取得する例を紹介します。

ファイル内の文字列をすべて取得する例

Input 関数を使って先ほど使用したファイル内のすべての文字を読み取って表示する例です。

'■Input関数サンプル2(全文字列を取得する例)
Sub Input_Sample02()
    Dim str As String
    ' OpenステートメントInputモードで先程と同じファイルを開く
    Open "c:\VBA_Sample\test.txt" For Input As #1
    Do While Not EOF(1)
        ' 1文字づつ読み込みつなげていく
        str = str & Input(1, 1)
    Loop
    ' 全ての文字列を表示
    MsgBox str
    Close #1  ' ファイルを閉じる
End Sub

シーケンシャル入力 (Input) モードでファイルをファイル番号(#1)で開きます。

開いたファイルから、Input 関数で1文字づつ取得して変数に格納していきます。

Do While Not EOF(1) でファイルの終焉までループしながら1文字づつ変数に追加していきます。

ループ完了後に MsgBox に取得した文字列が次のように表示されました。

Input_Sample02 最終結果で表示されるMsgBox画像

最後にファイルを閉じて終了です。

【注意点】
・エラー処理をしていないので、ファイルが存在しない場合 Open ステートメントでエラーが発生します。
・ファイルの終わりを確認する EOF 関数を使わない場合、無限ループに陥る可能性があります!

おわりに

Excel VBA の Input 関数は、ファイルから文字列データを読み取るために使用されます。

構文 Input(number, [#]filenumber) の number に指定した文字数分のデータを読み取ります。
ファイルを閉じる前に、再度 Input 関数を使用すると、直前に取得したデータ以降から取得します。

サンプルでは、全データ取得するために Input 関数で1文字づつループ処理しながら取得していますが、次の記事内のサンプルのように Line Input ステートメントを使用して、1行ずつ読み込む方法などもあります。
VBA EOF 関数 ファイルの終端に到達したらTrueを返す
Excel VBA の EOF 関数は、ファイルの読み取り処理の際にファイルの終端に到達したかどうかを判断するための関数です。終端に到達したらTrueを返します。関数の構文や戻り値についてサンプルコードを使って具体的な使い方を解説します。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!