
各CSVファイルを 別々のシートに保管 したい
ファイルごとにシート名を付けたい(=探しやすい)
後から編集・確認・印刷などを個別に行いたい
目次
▼完成イメージ
- 複数CSVを選択
- 各CSVの中身が新しいシートに1枚ずつ展開される
- シート名は元のCSVファイル名になる
▼コード全文(そのままコピペOK)
Sub ImportCSVToSeparateSheets() Dim csvFiles As Variant Dim i As Long Dim tempWB As Workbook Dim tempWS As Worksheet Dim newWS As Worksheet Dim fileName As String ' CSVファイルを複数選択 csvFiles = Application.GetOpenFilename("CSVファイル (*.csv),*.csv", _ Title:="CSVファイルを選択(複数可)", _ MultiSelect:=True) If VarType(csvFiles) = vbBoolean Then MsgBox "キャンセルされました。", vbExclamation Exit Sub End If Application.ScreenUpdating = False For i = LBound(csvFiles) To UBound(csvFiles) Set tempWB = Workbooks.Open(Filename:=csvFiles(i), ReadOnly:=True) Set tempWS = tempWB.Sheets(1) ' ファイル名(拡張子抜き)を取得 fileName = VBA.Replace(VBA.Mid(csvFiles(i), InStrRev(csvFiles(i), "\") + 1), ".csv", "") ' シートを追加し、名前をファイル名に Set newWS = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) On Error Resume Next newWS.Name = Left(fileName, 31) ' Excelのシート名上限:31文字 On Error GoTo 0 ' データをコピー tempWS.UsedRange.Copy Destination:=newWS.Range("A1") tempWB.Close SaveChanges:=False Next i Application.ScreenUpdating = True MsgBox "すべてのCSVファイルを読み込みました!", vbInformation End Sub
▼ポイント解説
処理項目 | 内容 |
---|---|
GetOpenFilename | CSVを複数同時に選択可能 |
Workbooks.Open | 一時的にCSVをブックとして開く |
Sheets.Add | 新しいシートを追加 |
UsedRange.Copy | データをすべてコピー |
newWS.Name | シート名をCSVのファイル名に自動で設定(31文字以内) |
▼実務での活用パターン
- 部署別・月別・担当者別のCSV を一括整理
- 毎日分割されて届く帳票 を一括で読み込み
- 個別ファイルの印刷用フォーマット への差し込み展開にも応用可能
▼よくあるカスタマイズ案
カスタマイズ | 方法例 |
---|---|
ヘッダーを除外して読み込みたい | .UsedRange.Offset(1, 0).Resize(...).Copy に変更 |
ファイル名+日付でシート名をつけたい | newWS.Name = Format(Now, "yyyymmdd") & "_" & Left(fileName, 20) |
空シートがあるときに削除 | If WorksheetFunction.CountA(newWS.Cells) = 0 Then newWS.Delete |
▼まとめ
このマクロを使えば、複数のCSVファイルを一気に読み込み、それぞれが独立したシートに自動で展開されます。
データの分類・加工・印刷・保存がしやすくなり、業務効率が格段にアップします。
コメント