Excel VBA CSV/テキストを読み込むサンプル

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 セルの値をテキストに出力するサンプル

△上に戻る