📊 Excel VBA Top100
🔄

ImportCSV

データ処理

CSVファイルを選択してアクティブシートにインポートします

外部のCSVファイルを読み込んで、アクティブシートまたは新規シートにデータを展開するマクロです。Excelの「データの取得」機能と違い、Power Queryの知識がなくても使えます。ファイルパスをダイアログで指定するだけで、カンマ区切りのデータが自動的に列に分割されてシートに貼り付けられます。文字コードはUTF-8とShift-JISの両方に対応しており、文字化けしにくい設計になっています。ファイル選択ダイアログでCSVを選ぶだけで取り込みが完了するため、ダブルクリックで開いた際に起こりがちな「先頭の0が消える」「日付が勝手に変換される」といったトラブルの確認ポイントを一箇所に集約できます。取り込み後はConvertTextToNumbersやTrimSpacesと組み合わせてデータを整えるのが定番の流れで、この一連の処理をまとめて自動化すれば受領データの前処理が数分から数秒になります。

ImportCSV デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: ImportCSV を実行し、CSVファイルを選択します

🎯 活用シーン

  • ✓基幹システムや販売管理ソフトからエクスポートしたCSVをExcelで分析・加工したいとき
  • ✓Webサービスからダウンロードしたデータファイルを定期的にExcelに取り込んで報告書を作成したいとき
  • ✓別の担当者からCSV形式で受け取ったデータをExcelに取り込んで集計・分析作業を行いたいとき
  • ✓毎週届く取引先からの受注CSVをExcelの管理台帳に取り込む作業を定型化したいとき
  • ✓アクセス解析や広告レポートのCSVを取り込んで、月次レポートのデータ更新を素早く行いたいとき

💡 実装のヒント

  • ▸CSVファイルの文字コードが不明な場合は、まずUTF-8で試してみてください。文字化けが発生した場合はShift-JISで再試行します。
  • ▸1行目をヘッダー行として扱う・扱わないの設定を事前に確認しておくと、インポート後のデータ整理がスムーズになります。
  • ▸カンマ以外の区切り文字(タブ、セミコロンなど)のファイルをインポートする場合は、マクロのコードを修正して対応してください。
  • ▸取り込み後に数値列が文字列になっている場合は、続けてConvertTextToNumbersを実行するのが定番の流れです。
  • ▸同じレイアウトのCSVを毎回取り込む業務なら、取込→整形→保存までを1本のマクロにまとめると効果が最大化します。

💻 VBAコード

' ImportCSV
' -----------------
' Macro Name: ImportCSV
' Description: CSVファイルを選択してアクティブシートにインポートします
' Parameters: なし
' Returns: なし
' Usage: ImportCSV を実行し、CSVファイルを選択します
' -----------------

Sub ImportCSV()
    On Error GoTo ErrorHandler

    Dim ws As Worksheet
    Dim csvPath As Variant
    Dim fileNum As Integer
    Dim lineStr As String
    Dim fields() As String
    Dim rowNum As Long
    Dim j As Long

    Set ws = ActiveSheet

    csvPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", , "CSVファイルを選択")
    If csvPath = False Then Exit Sub

    If Application.WorksheetFunction.CountA(ws.UsedRange) > 0 Then
        If MsgBox("シートにデータが存在します。クリアしてインポートしますか?", vbYesNo, "確認") = vbNo Then
            Exit Sub
        End If
        ws.Cells.Clear
    End If

    fileNum = FreeFile
    Open csvPath For Input As #fileNum

    rowNum = 1
    Do While Not EOF(fileNum)
        Line Input #fileNum, lineStr
        fields = Split(lineStr, ",")
        For j = 0 To UBound(fields)
            ws.Cells(rowNum, j + 1).Value = fields(j)
        Next j
        rowNum = rowNum + 1
    Loop

    Close #fileNum

    MsgBox (rowNum - 1) & " 行をインポートしました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    If fileNum > 0 Then Close #fileNum
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub