
複数CSVを読み込んで別シートに展開
読み込んだデータに対して整形(タイトル追加・列幅調整・不要列削除など)を自動化
読み込みと整形を一括で行う実務的なマクロ
目次
▼実務でよくあるCSVの困りごと
- ヘッダーがない or 不要な行がある
- 日付や数値が文字列になっている
- 列幅が狭すぎて見えない
- 不要な列が多い
▼処理の流れ
- CSVファイルを複数選択
- 読み込んで新しいシートにコピー
- ヘッダー行を挿入(任意)
- 不要な列を削除
- 列幅や文字配置を自動で整形
- (オプション)読み込み日時を記録
▼VBAコード全文:CSV読込+整形マクロ
Sub ImportAndFormatCSV() Dim csvFiles As Variant Dim i As Long Dim tempWB As Workbook Dim tempWS As Worksheet Dim newWS As Worksheet Dim fileName As String Dim lastCol As Long, lastRow As Long ' ファイル選択 csvFiles = Application.GetOpenFilename("CSVファイル (*.csv),*.csv", _ Title:="CSVファイルを選択(複数可)", _ MultiSelect:=True) If VarType(csvFiles) = vbBoolean Then Exit Sub 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 = Mid(csvFiles(i), InStrRev(csvFiles(i), "\") + 1) Set newWS = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) newWS.Name = Left(fileName, 31) ' データコピー tempWS.UsedRange.Copy Destination:=newWS.Range("A2") tempWB.Close SaveChanges:=False ' 整形処理開始 With newWS lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' 1行目にヘッダー追加(仮名) For c = 1 To lastCol .Cells(1, c).Value = "項目" & c .Cells(1, c).Font.Bold = True .Cells(1, c).Interior.Color = RGB(200, 200, 255) Next c ' 不要な列削除(例:4列目以降を削除) If lastCol > 3 Then .Range(.Cells(1, 4), .Cells(lastRow, lastCol)).Delete End If ' 列幅自動調整 .Columns("A:Z").AutoFit ' 罫線を引く .Range(.Cells(1, 1), .Cells(lastRow, 3)).Borders.LineStyle = xlContinuous ' センタリング .Range(.Cells(1, 1), .Cells(lastRow, 3)).HorizontalAlignment = xlCenter End With Next i Application.ScreenUpdating = True MsgBox "CSV読み込みと整形が完了しました!", vbInformation End Sub
▼主な整形処理の解説
処理内容 | VBAでの対応方法 |
---|---|
ヘッダー追加 | .Cells(1, c).Value = "項目"&c |
不要列の削除 | .Range(.Cells(1, 4), .Cells(lastRow, lastCol)).Delete |
列幅の調整 | .Columns("A:Z").AutoFit |
罫線 | .Borders.LineStyle = xlContinuous |
中央揃え | .HorizontalAlignment = xlCenter |
▼応用アイデア
- ヘッダーをCSVから読み込んで1行目にセットする
- 日付列に対して
.NumberFormat = "yyyy/mm/dd"
を設定 - 複数CSVのログを別シートで管理する
- 列ごとのデータ検証(例:空欄チェック)を追加する
▼まとめ
このマクロを使えば、CSVを読み込んだだけでなく
- 表として読みやすく整形
- 手作業の削減で 作業時間を1/10に短縮可能
- 自動処理の一歩先へ踏み出せる
コメント