【VBA】CSVファイルをシートへ読み込む【高速】

CSVファイルを…

CSVファイル
CSVファイル


シートへ読み込めます!

CSVファイルを読み込んだシート
CSVファイルを読み込んだシート


CSVファイルに「001」とある場合、
シート上も「001」となるようにします!
※0が消えて「1」とならないようにします。

読み込む際の文字コードは
 ・UTF-8
 ・Shift_JIS
を指定できます!

またこの方法は
 ・1度にまるっと読み込む方法であるため
 ・高速にCSVファイルを読み込む
ことができます!
※繰り返し処理により1行ずつ読み込むのではないため、高速に読み込めます
※他サイトに記載の方法は、繰り返し処理より1行ずつ読み込んでいます。
※そのため他サイトに記載の方法では時間が掛かってしまいます。

PR

VBAコード

ここでは例として
 ・デスクトップ配下のCSVファイル「sample.csv」を
 ・新規作成したシート「csv」へ
 ・文字コード「UTF-8」で読み込み
をします。

CSVファイル。文字コードは「UTF-8」
CSVファイル。文字コードは「UTF-8」
Option Explicit

Sub sample()
    
    Dim csvFile As String
    Dim csvSheetName As String
    Dim sheet As Worksheet
    Dim csvSheet As Worksheet
    Dim i As Long
    Dim n As Variant
    Dim arrDataType(255) As Long
    
    '読み込むCSVファイル
    csvFile = "C:\Users\user\Desktop\sample.csv"
    'CSVファイルを読み込むシート名
    csvSheetName = "csv"
    
    '既にシート「csv」が存在する場合は削除
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.name = csvSheetName Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(csvSheetName).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    
    'シート「csv」を新規作成
    Set csvSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    csvSheet.name = csvSheetName

    '読み込むファイルの形式を【文字列】と指定するための配列を作成
    For i = 0 To 255
        arrDataType(i) = xlTextFormat
    Next
    
    '「QueryTableオブジェクト(=クエリと接続)」を作成
    With csvSheet.QueryTables.Add(Connection:="TEXT;" + csvFile, Destination:=Range("B2"))
        '区切り文字に「カンマ区切り」を指定
        .TextFileCommaDelimiter = True
        '文字コードに「UTF-8」を指定
        .TextFilePlatform = 65001
        '読み込み開始行を指定
        .TextFileStartRow = 1
        '読み込むファイルの形式を指定
        .TextFileColumnDataTypes = arrDataType
        '読み込み実行
        .Refresh BackgroundQuery:=False
        '名前(後続で削除できるように名前を設定)
        .name = "仮テーブル"
        '作成された「QueryTableオブジェクト(=クエリと接続)」を削除
        .Delete
    End With
    
    '上記で作成されてしまう名前定義(仮テーブル)を削除
    For Each n In ActiveWorkbook.Names
        If n.name = csvSheetName & "!" & "仮テーブル" Then
            n.Delete '
        End If
    Next
    
End Sub

「読み込むCSVファイル」を指定します(14行目)。
「CSVファイルを読み込むシート名」を指定します(16行目)。

既にシート「csv」が存在する場合は削除します(19~28行目)。

「Worksheets.Add(After:=Worksheets(Worksheets.Count))」によって、シートの最後(一番右)にシート「csv」を新規作成します(31~32行目)。

「読み込むファイルの形式を【文字列】と指定するための配列」を作成します(35~37行目)。

「QueryTables.Add」で「QueryTableオブジェクト(=クエリと接続)」を作成します(40行目)。
※CSVの読み込みを実行した後に削除(Delete)します。

作成した「QueryTableオブジェクト(=クエリと接続)」に
 ・各種設定をして
 ・読み込みを実行
します(40~55行目)。

「Destination」に「Range(“B2”)」と指定しているため、
 ・読み込んだ内容はセル「B2」から設定
されます(40行目)。

区切り文字を「カンマ区切り」とするために、
 ・「TextFileCommaDelimiter」に「True」
を指定しています(42行目)。

文字コードを「UTF-8」とするために、
 ・「TextFilePlatform」に「65001」
を指定しています(44行目)。
※Shift_JISの場合は「932」を指定します。

「TextFileStartRow」に読み込み開始行を指定します(46行目)。
※CSVファイルを出力したシステム独自のヘッダが存在する場合、そのヘッダを読み込みたくない時は「2」等を指定します。

CSVファイルを読み込むことで作成されてしまう名前定義を削除します(58~62行目)。
※削除できるように「名前」を付けています(52行目)。

PR

実行結果

CSVファイルをシート「csv」へ読み込めました。

CSVファイルを読み込んだシート
CSVファイルを読み込んだシート

列幅は自動で調整されます。

PR

参考①

シート上の表(一連のセル範囲)をテーブル化することで、
 ・スタイルの設定
 ・テーブル化した範囲の名前定義
ができます。

テーブル化
テーブル化


詳細は以下の記事をご確認ください。

PR

参考②

複数のCSVファイルをシートへ読み込むこともできます。

詳細は以下の記事をご確認ください。

PR

参考③

CSVファイルから特定の文字列を含む行のみをシートへ読み込むこともできます。

詳細は以下の記事をご確認ください。

PR

参考④

CSVファイルから特定の列のみをシートへ読み込むこともできます。

詳細は以下の記事をご確認ください。

PR

参考⑤

CSVファイルの読み込み後、データを並び替え(ソート)したほうが良いかもしれません。

データを並び替える(ソートする)方法は、以下の記事をご確認ください。

PR

参考⑥

CSVファイルの読み込み後、不要なデータを削除したほうが良いかもしれません。

オートフィルタを使用して不要なデータを削除できます。

詳細は以下の記事をご確認ください。


PR

参考⑦

シートへ読み込んだデータを、配列へ格納することもできます。

詳細は以下の記事をご確認ください。


PR

参考⑧

Webページ上の表をシートへ取り込む(=読み込む)こともできます。

詳細は以下の記事をご確認ください。

PR

参考⑨

PowerShellでCSVファイルをExcelファイルにすることもできます。

詳細は以下の記事をご確認ください。

PR

参考⑩

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「QueryTables.Add」


●「QueryTableオブジェクト(=クエリと接続)」