CSVファイルをExcelで開いて、指定シートへコピペ

タイトルのマクロは、以下です。

'*********************************
'* CSVファイルをExcelで開いて、指定シートへコピペ。20240618
'* csvFile:csvファイル名、フルパス
'* csvSheetName:CSVファイルを読み込むシート名
'* FirstRange:先頭のRange。設定していないときは、"A1"
'* csvSheetNameFormat:ひな形になるシート名。これが設定されていない場合、新規作成
Private Sub csv_to_sheet_Excel(ByVal csvFile As String, _
                        ByVal csvSheetName As String, _
                        Optional ByVal FirstRange As String = "A1", _
                        Optional csvSheetNameFormat As String = "")
    
    Dim Sheet As Worksheet
    Dim csvSheet As Worksheet

    '既にシート csvSheetName が存在する場合は削除
    For Each Sheet In ThisWorkbook.Worksheets
        If Sheet.Name = csvSheetName Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(csvSheetName).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    ' シート作成
    If csvSheetNameFormat = "" Then
        'シート csvSheetName を新規作成
        Set csvSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    Else
        'シート csvSheetNameFormat をコピー
        Worksheets(csvSheetNameFormat).Copy After:=Worksheets(Worksheets.Count)
        Set csvSheet = ActiveSheet
    End If
    ' シート名指定
    csvSheet.Name = csvSheetName

    ' csvファイルを開く
    Dim wb As Workbook
    Set wb = Workbooks.Open(Filename:=csvFile)
    ' シートのコピペ
    wb.ActiveSheet.UsedRange.Copy Destination:=csvSheet.Range(FirstRange)
    ' csvファイルを保存せずに閉じる
    wb.Close SaveChanges:=False
End Sub

このコードでは、以下の手順で処理を行います:

  1. シート削除: 指定された csvSheetName のシートが既に存在する場合、そのシートを削除します。
    • シート削除の際に確認メッセージが表示されないように Application.DisplayAlerts = False を設定し、削除後に元に戻します。
  2. シート作成: 指定された csvSheetName のシートを作成します。
    • csvSheetNameFormat が空の場合は新規シートを作成し、指定されている場合はそのシートをコピーして新しいシートを作成します。
  3. CSVファイルを開く: 指定された CSV ファイルを開きます。
  4. シートのコピー: 開いた CSV ファイルの内容を新しく作成したシートにコピーします。
  5. CSVファイルを閉じる: CSV ファイルを保存せずに閉じます。

このコードをそのまま実行することで、指定した CSV ファイルの内容を指定したシートにコピーすることができます。

以下が使用例です。

Sub テスト、CSVファイルをExcelで開いて、指定シートへコピペ()
    ' csvファイルを、シート「TEST1」にコピペ
    Call csv_to_sheet_Excel(ThisWorkbook.Path & "\sample5.csv", "TEST1")
    ' csvファイルを、シート「TEST2」のB2セルにコピペ
    Call csv_to_sheet_Excel(ThisWorkbook.Path & "\sample5.csv", "TEST2", "B2")
    ' csvファイルを、シート「TEST3」にシート「ひな形」をコピーしてA2セルにコピペ
    Call csv_to_sheet_Excel(ThisWorkbook.Path & "\sample5.csv", "TEST3", "A2", "ひな形")
End Sub

この方法で、csvファイルを開くと、以下のような特徴があります。

メリット

  • 高速
  • 文字コード・区切り文字の指定は不要。ただし、誤変換する場合があります。

デメリット<Excelの自動変換>

  • 数値の頭0が消えてしまう。「001」→「1」
  • 括弧付き( )の数がマイナス表示になってしまう。「(1)」→「-1」
  • 住所の丁目・番・号が日付に書き換えられてしまう。「1-2-3」→「2001/2/3」

以下のページも参考にしてください。

Follow me!