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
このコードでは、以下の手順で処理を行います:
- シート削除: 指定された
csvSheetName
のシートが既に存在する場合、そのシートを削除します。- シート削除の際に確認メッセージが表示されないように
Application.DisplayAlerts = False
を設定し、削除後に元に戻します。
- シート削除の際に確認メッセージが表示されないように
- シート作成: 指定された
csvSheetName
のシートを作成します。csvSheetNameFormat
が空の場合は新規シートを作成し、指定されている場合はそのシートをコピーして新しいシートを作成します。
- CSVファイルを開く: 指定された CSV ファイルを開きます。
- シートのコピー: 開いた CSV ファイルの内容を新しく作成したシートにコピーします。
- 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」
以下のページも参考にしてください。