Excel VBAのテキストまたはCSVを読み込むサンプルです。
| 確認環境 ・Excel 2013/2010 |
目次
CSVを読み込むサンプル(QueryTableを使用)
QueryTableを使用してCSVを読み込むサンプルです。
テキストとしてCSVを読み込む方法より速いです。
11行目は、選択中のブックにCSVを読み込みます。
12,13行目は、コメントにしています。CSVを読み込む先のファイルを指定できます。
15-24行目は、CSVの読み込みを行っています。
18行目はカンマ区切りの指定です。
19行目は、列のデータ形式の指定です。2は文字列を表します。2が7つあるのはテストデータの列が7個あったためです。
20行目は、上書きする指定です。
21行目は、文字コードの指定です。
23行目は、切断しています。マクロの記録で作成した場合(後述)は生成されません。
Option Explicit
Sub test1()
Dim csvFileName As String 'CSVファイル
Dim excelFileName As String 'Excelファイル
Dim sheetName As String 'シート名
excelFileName = "D:\test1\test1.xlsx"
csvFileName = "D:\test1\test1.csv"
sheetName = "Sheet2"
ThisWorkbook.Worksheets(sheetName).Activate
'Workbooks.Open excelFileName
'Worksheets(sheetName).Activate
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & csvFileName, _
Destination:=Range("A1"))
.TextFileCommaDelimiter = True '区切り文字はカンマ
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2) '2=列のデータ形式は文字列
.RefreshStyle = xlOverwriteCells '上書きする
.TextFilePlatform = 932 '文字コードはShift=Jis
.Refresh '実行
.Delete '切断
End With
End Sub
以下は、Microsoft Excel VBAのTextFileCommaDelimiterのリンクです。
https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/querytable-textfilecommadelimiter-property-excel
以下は、Microsoft Excel VBAのTextFileColumnDataTypesのリンクです。
https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/querytable-textfilecolumndatatypes-property-excel
以下は、Microsoft Excel VBAのRefreshStyleのリンクです。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/querytable-refreshstyle-property-excel
以下は、Microsoft Excel VBAのTextFilePlatformのリンクです。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/querytable-textfileplatform-property-excel
以下は、Microsoft Excel VBAのRefrashのリンクです。
https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/querytable-refresh-method-excel
以下は、Microsoft Excel VBAのDeleteのリンクです。
https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/querytable-delete-method-excel
QueryTableの元ネタのコード
QueryTableの元ネタのコードをマクロの記録から作成できます。
1.「開発」>「マクロの記録」でマクロの記録を開始します。

2.「データ」>「テキストファイル」をクリックして取り込むCSVを指定します。

3.「テキストファイルウィザード」で読み込み行ってマクロの記録を終了します。
マクロのコードにQueryTableのコードが生成されています。

テキストを読み込むサンプル
テキストを読み込むサンプルです。
9行目は、選択中のブックと同じフォルダにあるファイルを読み込みます。
10行目は、コメントです。ファイルの読込先を指定しています。
13行目は、ファイル番号を取得しています。
16行目は、対象のファイルをInputモードで開いています。
20-24行目は、ファイルの末尾に到達するまで繰り返します。
27行目は、closeでテキストファイルを閉じています。
ファイルの文字コードはShift_JISです。UTF-8の場合は文字化けします。
Option Explicit
Sub test1()
Dim fileName As String 'ファイル
Dim text As String '読み込んだ行
Dim lineNo As Long '行
Dim fileNumber As Integer 'ファイル番号
'1 読み込むファイルの場所
fileName = ActiveWorkbook.Path & "\test1.txt"
'fileName = "d:\test1\test1.txt"
'2 ファイル番号の取得
fileNumber = FreeFile
'3 対象のファイルを開く
Open fileName For Input As #fileNumber
'4 ファイルの値をセルに出力する
lineNo = 1
Do Until EOF(fileNumber)
Line Input #fileNumber, text
Cells(lineNo, 1) = text
lineNo = lineNo + 1
Loop
'5 対象のファイルを閉じる
Close #fileNumber
End Sub
テキストとしてCSVを読み込むサンプル
テキストとしてCSVを読み込むサンプルです。
データが大量にあると遅くなります。上記のQueryTableを使用したほうが速いです。
11行目は、選択中のブックと同じフォルダにあるファイルを読み込みます。
12行目は、コメントです。ファイルの読込先を指定しています。
15行目は、ファイル番号を取得しています。
18行目は、対象のファイルをInputモードで開いています。
22-32行目は、ファイルの末尾に到達するまで繰り返します。
25行目は、カンマ区切りにして配列に格納しています。
28-30行目は、カンマ区切りにした数分、セルにセットしています。
35行目は、closeでテキストファイルを閉じています。
ファイルの文字コードはShift_JISです。UTF-8の場合は文字化けします。
Option Explicit
Sub test1()
Dim fileName As String 'ファイル
Dim text As String '読み込んだ行
Dim lineNo As Long '行数
Dim ary As Variant '列の値(配列)
Dim fileNumber As Integer 'ファイル番号
Dim i As Long 'ループ用変数
'1 読み込むファイルの場所
fileName = ActiveWorkbook.Path & "\test1.csv"
'fileName = "d:\test1\test1.csv"
'2 ファイル番号の取得
fileNumber = FreeFile
'3 対象のファイルを開く
Open fileName For Input As #fileNumber
'4 ファイルの値をセルに出力する
lineNo = 1
Do Until EOF(fileNumber)
Line Input #fileNumber, text
ary = Split(text, ",") 'カンマ区切り
'ary = Split(text, vbTab) 'タブ区切り
For i = 0 To UBound(ary)
Cells(lineNo, i + 1) = ary(i)
Next
lineNo = lineNo + 1
Loop
'5 対象のファイルを閉じる
Close #fileNumber
End Sub
関連の記事
Excel VBAのIF文のサンプル
Excel VBAのSelect Case文のサンプル
Excel VBAのFor文のサンプル
Excel VBAのDo Loop文のサンプル
Excel VBAのFor Each文のサンプル
Excel VBAの変数の宣言を強制するサンプル
Excel VBAのデータ型
Excel VBA セルを指定して値を設定/取得するサンプル
Excel VBA セルの値をテキストに出力するサンプル