【ExcelVBA】CSVデータ取り込み方法(0頭の数字文字列対応!0落ちしない)
ExcelVBAでCSVデータを取り込みたい人向けに書いています。
本記事の内容
ExcelVBA(マクロ)で決められたフォルダのCSVデータを取り込みたいと思ったことはありませんか?
システムやWeb画面から取得したCSVデータを資料にまとめる際のデータ取り込み時に役立つはずです。
ExcelVBAでCSVデータを取り込む方法を紹介します。
ExcelVBAでCSVデータを取り込む方法
ExcelVBA参照設定
本方法では以下のVBAの参照設定が必要になります。
①メニュータブの「ツール」をクリックし、参照設定をクリックする
②「Microsoft ActiveX Data Objects 6.1 Library」をチェックする
③「Microsoft Scripting Runtime」をチェックする
④OKボタンをクリックする
ExcelVBA(マクロ)でCSVデータを取り込むプログラム
以下がExcelVBAでCSVデータを取り込むプログラムです。
0頭の数字文字列に対応して0落ちしないようにセルの書式設定を文字列にして入力するようにしています。(53行目)
- '*****************************************
- '* CSVデータ取得
- '*****************************************
- Sub CSV_DATA_GET()
- Dim InputPath As String
- Dim fs As Scripting.FileSystemObject
- Dim basefolder As Scripting.folder
- Dim mysubfiles As Scripting.Files
- Dim mysubfile As Scripting.file
- Dim str As String
- Dim strNumber As Long
- Dim strArray As Variant
- Dim rowNumber As Long
- Dim columNumber As Long
- Dim adoSt As Object
- Dim Rec_Items As Long
-
- '1レコード項目数
- Rec_Items = 5
-
- 'インプットシートクリア
- ThisWorkbook.Worksheets("Sheet2").Cells.Clear
-
- 'インプットデータのパス
- InputPath = ThisWorkbook.Path & "\CSVデータ"
-
- Set fs = New Scripting.FileSystemObject
- Set basefolder = fs.GetFolder(InputPath)
- Set mysubfiles = basefolder.Files
-
- 'ADODB.Streamオブジェクトを生成
- Set adoSt = CreateObject("ADODB.Stream")
-
- rowNumber = 1
- For Each mysubfile In mysubfiles
- If fs.GetExtensionName(mysubfile) = "csv" Then
- With adoSt
-
- .Charset = "Shift-Jis" 'Streamで扱う文字コート設定
- .Open 'Streamをオープン
- .LoadFromFile (mysubfile) 'ファイルからStreamにデータを読み込む
-
- str = .ReadText 'Streamから取り込み
- str = Replace(str, vbLf, ",") '文字変換vbLf→,
- strArray = Split(str, ",") '文字分割
-
- 'シートへ入力
- columNumber = 1
- For strNumber = 0 To UBound(strArray)
- Worksheets("Sheet2").Cells(rowNumber, columNumber).NumberFormatLocal = "@" 'セル書式文字列化
- Worksheets("Sheet2").Cells(rowNumber, columNumber).Value = strArray(strNumber) 'データ入力
- columNumber = columNumber + 1
-
- '次行へ移動
- If columNumber Mod (Rec_Items + 1) = 0 Then
- rowNumber = rowNumber + 1 '次行へ
- columNumber = 1 'レコード項目1へ
- End If
-
- Next
-
- .Close
-
- End With
- End If
-
- Next
-
- Set adoSt = Nothing
- Set fs = Nothing
- End Sub
20行目:CSVデータの1レコードの項目数
26行目:取り込み対象のCSVデータのパス
38行目:取り込み対象ファイルの拡張子を設定
42行目:文字コード設定 ※UTF-8の文字コードも取り込めます
実装例
以下が実装した例です。
インプットCSVデータ
以下がインプットしたCSVデータです。
取り込みExcelシート
以下がCSVデータをExcelシートに取り込んだ結果です。
まとめ
ExcelVBAでCSVデータを取り込む方法を紹介しました。
仕事の業務でCSVデータを加工して資料を作成することはあると思います。
資料作成の自動化に役立てていただけたらと思います。
最後までご覧いただきありがとうございました。
「【ExcelVBA】ExcelシートデータをCSVファイルに出力する方法」
「【ExcelVBA】Excelシートを上部から順次処理する方法」
「【VBA】Application.GetOpenFilename メソッド後ステップ実行できない対策」
も紹介していますので、もしよろしければこちらも御覧ください。
最近のコメント