LoginSignup
0
0

More than 5 years have passed since last update.

カレントフォルダにあるCSVをExcelシートに読み込む

Posted at

概要

カレントフォルダに置かれているCSVファイルを、Excelの各シートへ読み込みたい時に書いたマクロ。

背景

予め別のマクロを組み込んであるレポーティング用のExcelファイルに、元になるデータをCSVエクスポートしたCSVを読み込ませたかった。

レポーティング周りは他のBIツールとかを使ったほうがいいよねという話はもちろんあるが、すでにあるExcelマクロの資産を使うべきだと思うということで。

そのため、報告用のシートは残しつつ、データの部分だけCSV_という接頭辞をつけた状態で毎回削除し、読み込めるようにしている。

コード



Option Explicit


Sub readCsvListToWorksheet()
    Dim newSheet As Worksheet
    Dim sheetName As String
    Dim tmpSheet As Worksheet
    Dim textFile As String
    Dim preFix As String
    preFix = "CSV_"
    ' preFix で始まるシートは全消し
    Application.DisplayAlerts = False 'データの入っているシート削除の警告を一時抑止
    For Each tmpSheet In Worksheets
        If Left(tmpSheet.name, Len(preFix)) = preFix Then
            tmpSheet.Delete
        End If
    Next tmpSheet
    Application.DisplayAlerts = True



    ' カレントのCSVファイルを全件読んでいく
    textFile = Dir(ActiveWorkbook.Path & "\*.csv")
    Dim tmp As String
    Do While textFile <> ""
        sheetName = "CSV_" & Left(textFile, 20)

        Set newSheet = ActiveWorkbook.Worksheets.Add
        newSheet.name = sheetName

        tmp = ActiveWorkbook.Path & "\" & textFile
        Call readCsv(newSheet, newSheet.name, "TEXT;" & tmp)


        textFile = Dir()
    Loop
End Sub

Sub readCsv(newSheet As Worksheet, name As String, textFile As String)
    With newSheet.QueryTables.Add( _
        Connection:=textFile, _
        Destination:=Range("$A$1"))
        .name = name
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932 'SJISの意味
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)    'CSVのフィールドの分を収める長さで定義しないといけないのでここが汎用的ではない
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

End Sub
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0