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