지난 포스트에서는 엑셀의 워크시트들을 각각의 csv 파일로 내보내는 방법에 대해 살펴 보았습니다. [여기]
이번 포스트에서는 csv파일을 엑셀의 워크시트로 읽어오는(import) VBA 스크립트를 살펴 보도록 하겠습니다.
VBA 스크립트 - import csv
- Alt + F11로 VBAProject 창을 띄웁니다.
- '모듈 > 삽입 > 모듈' 을 선택해 프로젝트에 모듈을 추가 합니다
- 모듈의 이름을 'Import'로 변경합니다. 원하신다면 다른 이름으로 해도 상관 없습니다.
※ 이름을 변경하기 위해 F2를 눌러도 아무런 소용이 없습니다. 추가 하신 모듈을 선택 하고 속성창에서 직접 변경 해줘야 합니다.
- 아래 코드를 복사해서 붙여 넣습니다.
Sub OpenDialog()
Dim fd As FileDialog
Dim csvFile As Variant
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Please select csv file"
.Filters.Add "CSV files", "*.csv"
.AllowMultiSelect = True
.Show
If .SelectedItems.Count > 0 Then
For Each csvFile In .SelectedItems
ImportCsv (csvFile)
Next
End If
End With
End Sub
Private Sub ImportCsv(FileName As String)
Application.ScreenUpdating = False 'speed up macro
Application.DisplayAlerts = False 'no error messages, take default answers
On Error Resume Next
'Set wbCSV = Workbooks.Open(ThisWorkbook.Path & "\" & FileName) 'open a CSV file
'파일 다이얼로그로 부터 패스를 넘겨 받게 되면 절대 경로이므로 위 처럼 ThisWorkbook의 패스를 얻을 필요가 없다
Set wbCSV = Workbooks.Open(FileName)
ThisWorkbook.Sheets(ActiveSheet.Name).Delete 'delete sheet if it exists
ActiveSheet.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 'move new sheet into Mstr
Columns.AutoFit 'clean up display
Application.ScreenUpdating = True
Application.DisplayAlerts = True 'no error messages, take default answers
End Sub
- 저장 후 엑셀로 돌아가 Alt + F8 또는 '보기 > 매크로 > 매크로 보기'를 선택하여 현재 실행 가능한 매크로 목록을 확인합니다.
- OpenDialog 매크로를 실행하면 파일 대화상자가 뜨고, 워크시트로 읽어 들이고자 하는 csv파일을 선택합니다.
NOTE - 엑셀 파일을 저장 하실 땐 'Excel 매크로 사용 통합 문서 (*.xlsm)' 으로 저장하셔야 매크로와 함께 저장이 됩니다.
부록 1. 같이 읽으면 좋은 글
- [Excel] VBA - 여러 시트를 csv로 한번에 내보내기(export하기)
- [Excel] VBA - 파일 다이얼로그
- [Excel] Visual Basic for Application(VBA)