【VBA実務例】CSV読込からデータ整形まで自動で完結するマクロ

A子さん

複数CSVを読み込んで別シートに展開
読み込んだデータに対して整形(タイトル追加・列幅調整・不要列削除など)を自動化
読み込みと整形を一括で行う実務的なマクロ

目次

▼実務でよくあるCSVの困りごと

  • ヘッダーがない or 不要な行がある
  • 日付や数値が文字列になっている
  • 列幅が狭すぎて見えない
  • 不要な列が多い

▼処理の流れ

  1. CSVファイルを複数選択
  2. 読み込んで新しいシートにコピー
  3. ヘッダー行を挿入(任意)
  4. 不要な列を削除
  5. 列幅や文字配置を自動で整形
  6. (オプション)読み込み日時を記録

▼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に短縮可能
  • 自動処理の一歩先へ踏み出せる
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

かもろぐ屋へようこそ。

Microsoft製品が大好きな現役社内SEです。
本業では、業務改善・運用・トラブル対応・効率化など、いわゆる「社内の困った」を何でも屋のように対応しています。

このブログでは主に、

VBA
Power Apps
AI

について、実体験ベースで発信しています。

特に最近は、AIを使ったアプリ開発やブログ運営の自動化にハマっています。
「AIがあれば簡単に作れる」と思って始めた結果、普通に壊れたり、詰んだり、課金したりしながら泥臭く進めています。

キラキラした成功談というより、

「実際どうだったのか」
「どこで詰まったのか」
「初心者でも本当にできるのか」

を、できるだけリアルに残すタイプのブログです。

なお、絶賛婚活中です。

コメント

コメントする

CAPTCHA


目次