テキストファイルを読み込むには Open ステートメントに Input モードを指定します。データを読み込むステートメントには Line Input # と Input # の2つあります。
Input # ステートメントは使用するための条件がいくつかあり、使用場面が限られてきますので、
最初は Line Input # ステートメントを使用する方法を覚えましょう。
使用方法
Openステートメント(Inputモード)
ファイルを開くときに使用するステートメントです。FileNumber は、予め FreeFile 関数を使用して次に使用可能なファイル番号を取得しておく必要があります。
引数名 | 省略 | 説明 |
---|---|---|
PathName | × | 文字列式にはファイル名を指定します。 フォルダ名、またはドライブ名も含めて指定できます。 |
Lock | ○ | 開くファイルに対する、他のプロセスからのアクセスを制御する、次のいずれかのキーワードを指定します。
Shared Lock Read Lock Write Lock Read Write |
FileNumber | × | 1 ~ 511 の範囲で任意のファイル番号を指定します。 予め FreeFile 関数 を使用して次に使用可能なファイル番号を取得しておいてください。 |
Line Input # ステートメント
ファイルを1行ずつ読み込むときに使用するステートメントです。
引数名 | 省略 | 説明 |
---|---|---|
FileNumber | × | ファイルをオープンする際に指定したファイル番号を指定します。 |
VarName | × | ファイルから読み込んだデータを格納するための変数を バリアント型 (Variant) または文字列型 (String) で指定します。 |
Input # ステートメント
CSVファイルなど、カンマ区切りのファイルを読み込むときに使用するステートメントです。
引数名 | 省略 | 説明 |
---|---|---|
FileNumber | × | ファイルをオープンする際に指定したファイル番号を指定します。 |
VarName1 | × | ファイルから読み込んだデータを格納するための変数を、1 つまたは複数指定します。 複数指定するときは、カンマで区切って指定します。 各変数のデータ型は読み込むデータ項目に合わせておく必要があります。 入力データのダブルクォーテーションは自動的に除去されます。 |
VarName2… | ○ |
Closeステートメント
ファイルを閉じるときに使用するステートメントです。
引数名 | 省略 | 説明 |
---|---|---|
FileNumber1… | ○ | ファイルをオープンする際に指定したファイル番号を指定します。 カンマで区切って複数指定することができます。 省略した場合は、Open ステートメントで開いたすべてのファイルが閉じられます。 |
使用例
テキストファイル(CSV形式)を1行ずつ読み込む(その1)
Line Input # ステートメントを使用し、CSV形式のファイルを1行ずつ読み込んでそのデータをシートに表示する例です。
Sub sample_eb092_01()
Dim myPath As String
Dim FileNumber As Integer
Dim textLine As String
Dim var As Variant
Dim myRow As Long
Dim i As Integer
'このマクロが組み込まれたエクセルファイルと
'同じフォルダにある"test_input1.csv"を入力ファイルとします。
myPath = ThisWorkbook.Path & "¥test_input1.csv"
'編集開始行
myRow = 1
'空いているファイル番号を取得します。
FileNumber = FreeFile
'入力ファイルをInputモードで開きます。
Open myPath For Input As #FileNumber
Do While Not EOF(FileNumber)
'ファイルから1行読み込みます。
Line Input #FileNumber, textLine
'読み込んだ文字列をカンマで区切ります。
var = Split(textLine, ",")
With ThisWorkbook.Worksheets(1)
For i = 0 To UBound(var)
If myRow > 1 And i = 0 Then
'[ID]は前ゼロを表示するように表示形式を変更
.Cells(myRow, i + 1).NumberFormatLocal = "@"
End If
'値の編集
.Cells(myRow, i + 1).Value = var(i)
Next i
End With
'編集行を加算します。
myRow = myRow + 1
Loop
'入力ファイルを閉じます。
Close #FileNumber
End Sub
ワークブックの名前とパス セルの表示形式 FreeFile関数
Split関数
LBound,UBound関数
For…Next Do…Loop Withステートメント
テスト用の入力ファイル(CSVファイル)です。
上記サンプルマクロを実行すると、入力ファイルを読み込み、そのデータをシートに表示します。
テキストファイル(CSV形式)を1行ずつ読み込む(その2)
Input # ステートメントを使用し、前述サンプルと同じくCSV形式のファイルを読み込んでシートに表示する例です。Input # ステートメントを使用してデータを読み込むには、入力ファイルが以下の条件を満たしている必要があります。
- 各データ項目がカンマにより区切られている
- 各行におけるデータ項目の数(カンマの数)が決まっている
- 空白行があってはならない(カンマのみはOK)
※Input # ステートメントを使用するとデータ項目がダブルクォーテーションで括られていても、ダブルクォーテーションは自動的に除去されます。
Sub sample_eb092_02()
Dim myPath As String
Dim FileNumber As Integer
Dim strTitle(1 To 3) As String
Dim strID As String
Dim strItem As String
Dim lngPrice As Long
Dim myRow As Long
Dim i As Integer
'このマクロが組み込まれたエクセルファイルと
'同じフォルダにある"test_input1.csv"を入力ファイルとします。
myPath = ThisWorkbook.Path & "\test_input1.csv"
'編集開始行
myRow = 1
'空いているファイル番号を取得します。
FileNumber = FreeFile
'入力ファイルをInputモードで開きます。
Open myPath For Input As #FileNumber
'先頭行(タイトル)を読み込みます。
Input #FileNumber, strTitle(1), strTitle(2), strTitle(3)
'タイトルをワークシートへ編集します。
With ThisWorkbook.Worksheets("Sheet1")
For i = 1 To 3
.Cells(myRow, i).Value = strTitle(i)
Next i
End With
myRow = myRow + 1
Do While Not EOF(FileNumber)
'ファイルから1行読み込みます。
Input #FileNumber, strID, strItem, lngPrice
With ThisWorkbook.Worksheets(1)
'値の編集
With .Cells(myRow, 1)
.NumberFormatLocal = "@"
.Value = strID
End With
.Cells(myRow, 2).Value = strItem
.Cells(myRow, 3).Value = lngPrice
End With
'編集行を加算します。
myRow = myRow + 1
Loop
'入力ファイルを閉じます。
Close #FileNumber
End Sub
ワークブックの名前とパス セルの表示形式 FreeFile関数
For…Next Do…Loop Withステートメント
実行結果は上記 sample_eb092_01 の結果と同じになります。