Inputの概要
ファイルからデータを読み取る VBAの予約語 | ||
Input 概要 Input ステートメントは、VBAでファイルからデータを読み取るために使用されます。主に、テキストファイルやCSVファイルのデータを1行ずつ取得し、変数に格納する際に利用されます。 わかりやすく説明 ファイルからデータを1つずつ取り出し、変数に格納する命令。 |
||
|
Inputを使った基本的なファイル読み取り
以下の例では、テキストファイルからデータを読み取ります。
Sub ReadTextFile()
Dim fileNum As Integer
Dim myData As String
' ファイルを開く
fileNum = FreeFile
Open "C:\temp\data.txt" For Input As #fileNum
' 1行ずつ読み取る
Do While Not EOF(fileNum)
Input #fileNum, myData
Debug.Print myData ' 読み取ったデータをイミディエイトウィンドウに表示
Loop
' ファイルを閉じる
Close #fileNum
End Sub
解説:
Open "C:\temp\data.txt" For Input As #fileNum
: ファイルを読み取り専用モードで開く。Do While Not EOF(fileNum)
: ファイルの終端(EOF)に達するまで繰り返す。Input #fileNum, myData
: 1行ずつデータを取得。Close #fileNum
: ファイルを閉じる。
CSVファイルを読み取る
以下の例では、CSVファイルのデータをセルに書き込みます。
Sub ReadCSVFile()
Dim fileNum As Integer
Dim myData As String
Dim rowNum As Integer
rowNum = 1
' ファイルを開く
fileNum = FreeFile
Open "C:\temp\data.csv" For Input As #fileNum
' 1行ずつ読み取る
Do While Not EOF(fileNum)
Input #fileNum, myData
Cells(rowNum, 1).Value = myData ' A列にデータを書き込む
rowNum = rowNum + 1
Loop
' ファイルを閉じる
Close #fileNum
End Sub
解説:
- ファイルの内容をセルA1から順番に書き込む。
- CSVデータを1行ずつ取得し、Excelに反映。
複数の値を取得する
以下の例では、CSVの各フィールド(カンマ区切り)を個別の変数に取得します。
Sub ReadCSVFields()
Dim fileNum As Integer
Dim name As String, age As Integer, city As String
Dim rowNum As Integer
rowNum = 1
' ファイルを開く
fileNum = FreeFile
Open "C:\temp\data.csv" For Input As #fileNum
' 1行ずつ読み取る
Do While Not EOF(fileNum)
Input #fileNum, name, age, city
Cells(rowNum, 1).Value = name
Cells(rowNum, 2).Value = age
Cells(rowNum, 3).Value = city
rowNum = rowNum + 1
Loop
' ファイルを閉じる
Close #fileNum
End Sub
解説:
- ファイルの各フィールド(名前、年齢、都市)を個別の変数に取得。
- セルA列に名前、B列に年齢、C列に都市を格納。
Excel VBAでのInputの活用
以下の例では、ExcelのセルA1にあるファイル名を読み取り、その内容をB列に表示します。
Sub ReadFileFromCell()
Dim fileNum As Integer
Dim filePath As String
Dim myData As String
Dim rowNum As Integer
rowNum = 1
' A1セルからファイルパスを取得
filePath = Range("A1").Value
' ファイルを開く
fileNum = FreeFile
Open filePath For Input As #fileNum
' 1行ずつ読み取る
Do While Not EOF(fileNum)
Input #fileNum, myData
Cells(rowNum, 2).Value = myData ' B列にデータを書き込む
rowNum = rowNum + 1
Loop
' ファイルを閉じる
Close #fileNum
End Sub
解説:
- セルA1にファイルのパスを入力し、その内容をB列に表示。
Inputの注意事項
- ファイルは適切に閉じる:
Close
を忘れると、ファイルがロックされる可能性がある。 - データの型に注意: 読み取るデータの型と変数の型が一致していることを確認する。
- 大きなファイルには適していない: Inputは1行ずつ処理するため、大量のデータには
Line Input
の方が適している。
よくある質問
- Q: Input はどのようなファイルに使用できますか?
- A: テキストファイル(.txt、.csv)などに適しています。バイナリファイルには適していません。
- Q: Input では改行を考慮できますか?
- A: いいえ。改行ごとにデータを取得する場合は
Line Input
を使用してください。 - Q: Input でデータが途中で途切れることがありますが、なぜですか?
- A: データ内にカンマがあると、区切り文字として認識され、複数の変数に分割されます。
まとめ
- Input ステートメントは、ファイルからデータを読み取るために使用される。
- テキストファイルやCSVデータを1行ずつ取得可能。
- Excel VBAでのデータ処理や外部ファイルの読み取りに活用できる。
- データの型やファイルの閉じ忘れに注意する必要がある。