【ExcelVBA】CSVデータ取り込み方法(0頭の数字文字列対応!0落ちしない)

1月 28, 2023

【ExcelVBA】CSVデータ取り込み方法(0頭の数字文字列対応!0落ちしない)

ExcelVBAでCSVデータを取り込みたい人向けに書いています。

本記事の内容

・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行目)

  1. '*****************************************
  2. '* CSVデータ取得
  3. '*****************************************
  4. Sub CSV_DATA_GET()
  5.     Dim InputPath As String
  6.     Dim fs As Scripting.FileSystemObject
  7.     Dim basefolder As Scripting.folder
  8.     Dim mysubfiles As Scripting.Files
  9.     Dim mysubfile As Scripting.file
  10.     Dim str As String
  11.     Dim strNumber As Long
  12.     Dim strArray As Variant
  13.     Dim rowNumber As Long
  14.     Dim columNumber As Long
  15.     Dim adoSt As Object
  16.     Dim Rec_Items As Long
  17.     
  18.     '1レコード項目数
  19.     Rec_Items = 5
  20.     
  21.     'インプットシートクリア
  22.     ThisWorkbook.Worksheets("Sheet2").Cells.Clear
  23.     
  24.     'インプットデータのパス
  25.     InputPath = ThisWorkbook.Path & "\CSVデータ"
  26.     
  27.     Set fs = New Scripting.FileSystemObject
  28.     Set basefolder = fs.GetFolder(InputPath)
  29.     Set mysubfiles = basefolder.Files
  30.     
  31.     'ADODB.Streamオブジェクトを生成
  32.     Set adoSt = CreateObject("ADODB.Stream")
  33.     
  34.     rowNumber = 1
  35.     For Each mysubfile In mysubfiles
  36.         If fs.GetExtensionName(mysubfile) = "csv" Then
  37.             With adoSt
  38.                 
  39.                 .Charset = "Shift-Jis" 'Streamで扱う文字コート設定
  40.                 .Open 'Streamをオープン
  41.                 .LoadFromFile (mysubfile) 'ファイルからStreamにデータを読み込む
  42.     
  43.                 str = .ReadText 'Streamから取り込み
  44.                 str = Replace(str, vbLf, ",") '文字変換vbLf→,
  45.                 strArray = Split(str, ",") '文字分割
  46.                 
  47.                 'シートへ入力
  48.                 columNumber = 1
  49.                 For strNumber = 0 To UBound(strArray)
  50.                     Worksheets("Sheet2").Cells(rowNumber, columNumber).NumberFormatLocal = "@" 'セル書式文字列化
  51.                     Worksheets("Sheet2").Cells(rowNumber, columNumber).Value = strArray(strNumber) 'データ入力
  52.                     columNumber = columNumber + 1
  53.                     
  54.                     '次行へ移動
  55.                     If columNumber Mod (Rec_Items + 1) = 0 Then
  56.                         rowNumber = rowNumber + 1 '次行へ
  57.                         columNumber = 1 'レコード項目1へ
  58.                     End If
  59.     
  60.                 Next
  61.                 
  62.                 .Close
  63.                 
  64.             End With
  65.         End If
  66.         
  67.     Next
  68.     
  69.     Set adoSt = Nothing
  70.     Set fs = Nothing
  71. 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 メソッド後ステップ実行できない対策
も紹介していますので、もしよろしければこちらも御覧ください。

 

¥891 (2023/02/02 12:04時点 | Amazon調べ)
Microsoft Public Affiliate Program (JP)(マイクロソフトアフィリエイトプログラム)