VBA テキストファイルをパソコン内部で開く方法

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

テキストファイルをパソコン内部で開く方法

新しいブックを開かずにテキストファイルをパソコン内部で
開くには、Openステートメントを使用します。

テキストファイルの内容を入出力するためにパソコン内部で
ファイルを開くため、その内容が画面に表示されることはありません。

開いたファイルはCloseステートメントで閉じるまでの間
引数Filenumberに指定したファイル番号を使用して参照します。

Openステートメントの書式

[]内は省略可能です。
Open
pathname
For mode [Access access] [lock] As [#]filenumber[ Len=reclength]


設定値(引数)の説明

  • PathName 【パスネーム】(必須)
    開きたいテキストファイルの名前を含むパスを
    ダブルクォーテーションで囲んで指定します。

    ファイル名だけを指定した場合はカレントフォルダーのファイルが対象となります。
    指定したファイルが存在しない場合、引数ModeにInput以外のモードが指定されていると
    指定されたファイルが新規作成されます。
  • Mode【モード】(必須)
    ファイルを開くときのモードを以下のキーワードで指定します。
キーワードモード
Inputシーケンシャル入力モード
Outputシーケンシャル出力モード
Append追加モード
Binaryバイナリモード
Randomランダムアクセスモード(既定値)

※シーケンシャルモードとは、規則的に継続している形式という意味です。
※バイナリモードとは、画像などのデータ形式を表します。

  • access【アクセス】(省略可)
    開くファイルに対する処理を示す、次のキーワードのうちいずれかを指定します。
キーワード内容
Readリード 読み込み
Writeライト 書き込み
Read Writeリードライト読み書き込み
  • lock【ロック】(省略可)
    開かれたファイルに対する他のプロセスからの操作の制限を表す
    次のキーワードのうちいずれかを指定します。
キーワード内容
Sharedシェアード 共用
Lock Readロックリード読み込みロック
Lock Writeロックライト書き込みロック
Lock Read Writeロックリード読み書き込みロック
  • filenumber【ファイルナンバー】(必須)
    開いたファイルに番号を割り当てます。1~511の値を指定します。
  • reclength【レクレングス】(省略可)
    32,767 バイト以下の数値。
    ランダム アクセス用に開かれたファイルでは、この値はレコード長です。
    シーケンシャル ファイルでは、この値はバッファリングされる文字数です。

※引数filenumberで、すでに使用しているファイル番号を指定するとエラーになります。
このエラーを防ぐ方法として
Freefile【フリーファイル】関数 でファイル番号を取得する方法があります。

※シーケンシャルモード、追加モードの場合開いているファイルを
異なるファイル番号で同時に開こうとするとエラーになります。
これらのモードで再度ファイルを開くときは、開いているファイルを
Closeステートメントで閉じてから開いてください。
シーケンシャルモード、バイナリモード、ランダムアクセスモードの
場合は、一つのファイルを異なるファイル番号で開くことができます。

カンマ区切り単位でテキストファイルを読み込む方法

Openステートメントによって、シーケンシャル入力モード(Input)で
開かれたテキストデータをカンマで区切られた単位で変数に格納するには
Input #【インプットハッシュ】ステートメントを使用します。

Input #【インプットハッシュ】ステートメント

Input #【インプットハッシュ】ステートメントの書式

Input #Filenumber,Varlist,・・・・


設定値(引数)の説明

  • Filenumber【ファイルナンバー】(必須)
    Openステートメントで割り当てたファイル番号を指定します。
  • Varlist【バーリスト】(必須)
    テキストファイルの内容を格納する変数を指定します。
    複数指定する場合は、カンマで区切って指定し、テキストファイル内のデータ項目の個数と
    順番を一致させます。

※ファイルの末尾を超えて次のデータを読み込もうとするとエラーが発生します。
このエラーを防ぐために EOF【イーオーエフ】関数 を使用して、ファイルの末尾に達したら
ファイルの読み込みを終了させます。
※Input #ステートメントで読み込んだデータをテキストファイルに書き込むときは
Write #【ライトハッシュ】ステートメントを使用します。

パソコン内部で開いたテキストファイルを閉じる方法

Open【オープン】ステートメントで開いたファイルを閉じるには
Close #【クローズハッシュ】ステートメントを使用します。
Close #【クローズハッシュ】ステートメントを実行すると
ファイルに割り当てられていたファイル番号が解放されます。

Close #【クローズハッシュ】ステートメント

Close #【クローズハッシュ】ステートメントの書式

[]内は省略可能です。
Close #[Filenumber]


設定値(引数)の説明

  • Filenumber【ファイルナンバー】(省略可)
    Openステートメントで割り当てたファイル番号を指定します。
    複数指定する場合は、カンマで区切って指定します。
    省略するとすべてのファイルを閉じます。

同じフォルダー内のテキストファイルをシートに読み込むコード例

Sub テキストファイルの読み込み()
Dim ファイルNO As Integer
Dim データ(3) As String
Dim i As Integer
Dim j As Integer
Worksheets(1).Activate
ファイルNO = FreeFile
Open ThisWorkbook.Path & "¥売上データ.txt" For Input As #ファイルNO
i = 1
Do Until EOF(ファイルNO)
Input #ファイルNO, データ(0), データ(1), データ(2), データ(3)
For j = 0 To 3
Cells(i, j + 1).Value = データ(j)
Next j
i = i + 1
Loop
Close #ファイルNO
End Sub

コードの解説

このマクロが記述されたブックと同じフォルダーにある
テキストファイルを読み込みます。
例では、「売上データ.txt」ファイルを読み込みます。
4項目(4列)のデータを想定しています。
2行目
【Dim ファイルNO As Integer】
Openステートメントで使用するファイルのナンバーを
格納する変数「ファイルNO」を宣言しています。


3行目
【Dim データ(3) As String】
Input #ステートメントで読み込むテキストファイルの
データを格納する配列変数「データ()」の宣言をしています。


4行目
【Dim i As Integer】
Do Loopステートメントで利用される
カウンタ―変数iの宣言です。


5行目
【Worksheets(1).Activate】
マクロが記述されているワークシートを
アクティブにしています。


6行目
【ファイルNO = FreeFile】
使用可能なファイル番号を取得してファイルNOに格納しています。


7行目
【Open ThisWorkbook.Path & “¥売上データ.txt” For Input As #ファイルNO】
このブックと同じフォルダーにある「売上データ.txt」ファイルを
ファイルNOに格納されているNOでパソコン内部で開きます。


8行目
【i = 1】
カウンタ―変数iに1を代入します。


9行目
【Do Until EOF(ファイルNO)】
EOF関数がTrueを返すまで(データが無くなるまで)処理を繰り返します。


10行目
【Input #ファイルNO, データ(0), データ(1), データ(2), データ(3)】
変数ファイルNOに格納した番号のファイル内のデータを配列変数データに
Input #ステートメントで読み込んで書き込みます


11行目
【For j = 0 To 3】
for文で繰り返し処理の始まりです。
カウンタ―変数jに0~3になるまで以下の処理を繰り返します。


12行目
【Cells(i, j + 1).Value = データ(j)】
i行目、i+1列目のセルに配列変数データのj番目要素に格納した値を代入します。


16行目
【Close #ファイルNO】
ファイルを閉じて、変数ファイルNOに格納されている番号のファイルを解放します。


以上で
テキストファイルをパソコン内部で開く方法についての解説を終了します。
ありがとうございました。

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

フォローする

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