バージョン
マイクロソフト365
エクセルでファイルを読み込んでエクセルのセルに書き込む方法を4つご紹介したいと思います。
それではいってみましょう!
Menu
ファイルを読み込みセルに1行ずつ書込む(Line Input)
Line Inputステートメントを使用した例です。
繰り返し処理のLoopを利用して、下記のようにファイルを1行ずつ読込んで、1行ずつセルに書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Sub LinInput() Dim i, f As Integer Dim str As String Range("a:a").ClearContents 'A列を消去する f = FreeFile ' ファイル番号の取得 Open "C:\test\sample.txt" For Input As #f '① i = 1 While EOF(f) = False 'EOFがFalseの間 ② Line Input #f, str '1行読込んで次の行に移行 ③ Cells(i, 1) = str 'A1セルから書き込む ④ i = i + 1 '⑤ Wend Close #f End Sub |
①Openステートメントでフルパスで読み込むファイルを指定します。
②EOF関数がFalseの間、処理はループし続け、ファイルの最後EOF(End Of File)までポインタが到達したらTrueに切り替わるのでループから抜けて終了します。
③ファイルを1行読み込むとファイルポインタが次の行へ移動します。
④エクセルのセルに読み込んだ値を書き込みます。
⑤ループするごとに変数iは1増加するのでセルが1行下に移動することになります。
ファイルを読み込みセルに1行ずつ書込む(ReadLine)
TextStreamObjectのReadLineメソッドを使用した例です。
繰り返し処理のLoopを利用して、下記のようにファイルを1行ずつ読込ん、1行ずつセルに書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Sub ReadLineFSO() '1行ずつ読込む Dim fso, ts Dim i As Integer 'オブジェクトを生成 ① Set fso = CreateObject("Scripting.FileSystemObject") 'TextStreamオブジェクトを取得。ここでフルパスを指定します。 ② Set ts = fso.OpenTextFile("C:\test\sample.txt") Range("a:a").ClearContents i = 1 Do Until ts.AtEndOfStream ' AtEndOfStreamプロパティでEOF判断③ Cells(i, 1) = ts.ReadLine ' 1行読込みセルに書き込む④ i = i + 1 '⑤ Loop End Sub |
①FileSystemObjectを生成します。
②FileSystemObjectのOpenTextFilメソッドでTextStreamオブジェクトを取得。ここでフルパスを指定します。
③TextStreamオブジェクトのAtEndOfStreamプロパティでファイルの最後EOF(End Of File)に到達したら(true)ループから抜けます。
④TextStreamオブジェクトのReadLineメソッドで1行読込みセルに書き込みます。
⑤Loopするごとに変数iは1増加するのでセルが1行下に移動することになります。
ファイルを読み込みセルに一気に書出し(ReadAll)
TextStreamオブジェクトのReadAllメソッドを使用した例です。
下記のようにループ処理は行わずに、ファイルを一気にすべて読込、セルA1に一気に書出します。
ファイルを全選択コピーしてセルA1に張り付けると一緒のイメージです。
1 2 3 4 5 6 7 8 9 | Sub allFSO() '全て読込む Dim fso, rs Set fso = CreateObject("Scripting.FileSystemObject") Set rs = fso.OpenTextFile("C:\test\sample.txt") Cells(1, "A") = rs.ReadAll End Sub |
CSVファイルを読み込みセルに書込む(split関数)
Split関数を使用して、カンマ区切りのファイルを1行ずつ読込、セルに1行1列ずつ書き出すサンプルです。
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 27 28 29 30 31 32 33 34 35 36 | Sub csv_sample() 'CSVファイルを1行ずつ読込、セルに1行ずつ書き込む Dim fNum, rowNum, colNum As Integer Dim tmp, spAry() As String 'ファイル番号の取得 fNum = FreeFile '①読み込むファイルを指定 Open "C:\test.csv" For Input As #fNum '行番号 rowNum = 1 '②ファイルの最終行まで処理(EOFがFalseの間) While EOF(fNum) = False '③1行読込 Line Input #fNum, tmp '④ファイルデータを配列に格納 spAry = Split(tmp, ",") '⑤列から書込み For colNum = 0 To UBound(spAry) 'セルに書き込む Cells(rowNum, colNum + 1) = spAry(colNum) Next '⑥次の行に移動する処理 rowNum = rowNum + 1 Wend 'ファイルを閉じる Close #fNum End Sub |
①Openステートメントでフルパスで読み込むファイルを指定します。
②EOF関数がFalseの間、処理をループし続けるようにして、ファイルの最後EOF(End Of File)までポインタが到達したらTrueに切り替わるのでループから抜ける処理を行います。
③ファイルを1行読み込むとファイルポインタが次の行へ移動します。
➃Split関数でファイルのカンマで区切られてるデータを配列に格納します。
⑤For文で配列に格納されてる値を、エクセルの列に書き込んでいきます。
➅ループするごとに変数iは1増加するのでセルが1行下に移動します。
まとめ
ファイルをセルに書き出す際は参考にしてもらえたら幸いです。
以上です。