Excel VBAでCSVファイルを一括インポート:効率的なデータ統合手法

VBA

この記事では、Excel VBAを使用して複数のCSVファイルを効率的に一つのExcelワークブックに統合するプログラムを提供します。各CSVは独自のワークシートにインポートされ、その名前も自動的に設定されます。さらに、ユーザーが新しいワークブックの名前を自分で指定できるように設計されています。このVBAスクリプトは、データ分析、レポート作成、ビジネスインテリジェンスにおいて非常に役立ちます。

使用技術

  • Excel VBA (Visual Basic for Applications): Excelのマクロプログラミング言語。ワークブックやワークシートの自動操作、データの処理等に使用。
  • QueryTablesオブジェクト: VBA内で外部データ、特にCSVファイルをExcelにインポートする際に使用。

機能

  • フォルダ内のCSV一括取得: 指定したフォルダ内の全てのCSVファイルを自動的に取得。
  • 新しいワークブック作成: 各CSVファイルの内容を保存するための新しいExcelワークブックを作成。
  • CSVファイルのインポート: 各CSVファイルを新しいワークブックの新しいワークシートにインポート。ワークシートの名前は元のCSVファイル名に基づく。
  • ユーザー入力によるファイル名指定: 作成される新しいExcelワークブックの名前をユーザーが自分で入力できる機能。
  • エラーハンドリング機能: エラーが発生した場合の処理も含まれており、ユーザーにエラーメッセージを表示。

ソースコード

VB
Sub ImportAllCSVFilesToNewWorkbook()
    Dim MyFolder As String
    Dim MyFile As String
    Dim newWb As Workbook
    Dim ws As Worksheet
    Dim sheetName As String
    Dim newFileName As String
    
    ' ユーザーに新しいファイル名を入力させる
    newFileName = InputBox("新しいExcelファイルの名前を入力してください(拡張子不要):")
    If newFileName = "" Then Exit Sub ' キャンセルされたまたは何も入力されなかった場合は終了
    
    On Error GoTo ErrorHandler ' エラーハンドリング
    
    ' 現在のExcelファイルと同じフォルダのパスを取得
    If ThisWorkbook.Path = "" Then
        MsgBox "このワークブックはまだ保存されていません。先に保存してください。"
        Exit Sub
    End If
    
    MyFolder = ThisWorkbook.Path & "\"
    
    ' 新しいワークブックを作成
    Set newWb = Workbooks.Add
    
    ' 指定されたフォルダ内の最初のCSVファイルを見つける
    MyFile = Dir(MyFolder & "*.csv")
    
    Do While Len(MyFile) > 0
        ' ファイル名から拡張子を取り除いてワークシート名を作成
        sheetName = Left(MyFile, InStrRev(MyFile, ".") - 1)
        
        ' 名前に使用できない文字を取り除く(オプション)
        sheetName = Replace(sheetName, "\", "")
        sheetName = Replace(sheetName, "/", "")
        sheetName = Replace(sheetName, "?", "")
        sheetName = Replace(sheetName, "*", "")
        sheetName = Replace(sheetName, "[", "")
        sheetName = Replace(sheetName, "]", "")
        
        ' 31文字を超える場合は切り詰める(オプション)
        If Len(sheetName) > 31 Then
            sheetName = Left(sheetName, 31)
        End If
        
        ' 新しいワークシートを追加して名前を設定
        Set ws = newWb.Worksheets.Add
        ws.Name = sheetName
        
        ' CSVファイルを新しいワークシートにインポート
        With ws.QueryTables.Add(Connection:="TEXT;" & MyFolder & MyFile, Destination:=ws.Range("A1"))
            .TextFileParseType = xlDelimited
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .Refresh BackgroundQuery:=False
        End With
        
        ' 次のCSVファイルを見つける
        MyFile = Dir()
    Loop
    
    ' 新しいワークブックを保存
    newWb.SaveAs Filename:=MyFolder & newFileName & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    
    Exit Sub
    
ErrorHandler: ' エラーハンドリング
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

' MIT License
' Copyright (c) 2023 [ANJI]
'
' Permission is hereby granted, free of charge, to any person obtaining a copy
' of this software and associated documentation files (the "Software"), to deal
' in the Software without restriction, including without limitation the rights
' to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the Software is
' furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in all
' copies or substantial portions of the Software.
'
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
' SOFTWARE.

使い方

  1. Excelを開く: Excelアプリケーションを開き、新しいワークブックまたは既存のワークブックを開きます。
  2. VBAエディタを開く: Alt + F11 キーを同時に押すことで、VBAエディタを開きます。
  3. 新しいモジュールを追加: VBAエディタの左側のプロジェクトエクスプローラーで、現在開いているワークブックを右クリックして「挿入」 > 「モジュール」を選択します。
  4. コードのコピー&ペースト: 提供されたVBAコードをコピーし、新しく作成されたモジュールのウィンドウにペーストします。
  5. マクロの実行: VBAエディタ上でカーソルをコード内に置き、F5キーを押すか、上部メニューの実行ボタンをクリックしてマクロを実行します。
  6. 新しいファイル名を入力: ダイアログボックスが表示されたら、新しく作成されるワークブックの名前を入力します。
  7. 結果の確認: マクロの実行が完了したら、新しいExcelワークブックが作成され、指定フォルダ内の全てのCSVファイルが各ワークシートとしてインポートされていることを確認します。
  8. 保存: 必要に応じて、新しいワークブックを適切な場所に保存します。

コメント

タイトルとURLをコピーしました