1行ずつ読み込む
まず、読み込むだけで何も処理をしていないコードです。
基本プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Sample7_14_1() Dim intFP As Integer Dim strBuff As String intFP = FreeFile ' ファイル番号取得 Open "C:\excelmemo\Sample7_14.csv" For Input As #intFP ' ファイルオープン ' Line Loop Do Until EOF(1) Line Input #intFP, strBuff '1行読込 Loop Close #intFP ' ファイルクローズ End Sub |
- FreeFile関数で使用されていないファイル番号を取得します。
- Openステートメントでファイルを開きます。
- Line Input #ステートメントで1 行読み込み、その内容を変数に格納します。
- Closeステートメントでファイルを閉じます。
次に読み込んだCSVファイルをカンマで区切り、それぞれをセルに格納するプログラムです。
実行プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Sub Sample7_14_2() Dim intFP As Integer Dim strBuff As String Dim varArray As Variant Dim i As Integer ' 行カウンター intFP = FreeFile ' ファイル番号取得 i = 1 Open "C:\excelmemo\Sample7_14.csv" For Input As #intFP ' ファイルオープン ' Line Loop Do Until EOF(1) Line Input #intFP, strBuff '1行読込 varArray = Split(strBuff, ",") ' 配列に格納 Range(Cells(i, 1), Cells(i, UBound(varArray) + 1)).Value = varArray ' セルへ i = i + 1 Loop Close #intFP ' ファイルクローズ End Sub |
FileSystemObjectを使ったテキストファイルの読み込み
OpenAsTextStreamメソッドを使うことで、ファイルの内容を一度に読み込むことができます。
実行プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub Sample7_14_3() Dim objFSO As Object Dim strBuff As String Dim objOTS As Object ' TextStreamオブジェクト Set objFSO = CreateObject("Scripting.FileSystemObject") Set objOTS = objFSO.GetFile("C:\excelmemo\Sample7_14.csv").OpenAsTextStream(ForReading) strBuff = objOTS.ReadAll objOTS.Close MsgBox strBuff End Sub |
実行結果
全行を一度に読み込むので、値に対する処理や、セルへの格納は面倒になります。