본문 바로가기

진리는어디에/VBA

[VBA] csv 임포트

지난 포스트에서는 엑셀의 워크시트들을 각각의 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. 같이 읽으면 좋은 글

 

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!