매크로를 사용하여 Office Excel 표를 csv로 내보내기

매크로를 사용하여 Office Excel 표를 csv로 내보내기

Excel 2010에서 Excel 표를 사용하고 있습니다. 이 표의 내용을 *.csv로 빠르게 내보내고 싶습니다.

내 현재 작업 흐름: 1. 테이블을 수동으로 선택합니다. 2. 내용을 새 통합 문서에 복사합니다. 3. 통합 문서를 *.csv 파일로 저장합니다.

원하는 작업 흐름: 1. 테이블을 수동으로 선택합니다. 2. 미리 정의된 파일 이름에 쓰는 매크로를 실행합니다.

테이블에는 고유한 이름(예: CurrentDataTable)이 있으므로 테이블 이름, 대상 파일 및 원하는 출력 형식을 가져와 출력 파일을 작성하는 함수가 있습니까?

답변1

원하는 작업을 수행하는 기본 제공 Excel 명령이나 함수는 없지만 VBA를 사용하여 프로그래밍할 수 있습니다.

다음 코드는 귀하가 찾고 있는 코드와 유사할 수 있습니다.

Sub ExportTable()

    Dim wb As Workbook, wbNew As Workbook
    Dim ws As Worksheet, wsNew As Worksheet
    Dim wbNewName As String


   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Set wbNew = Workbooks.Add

   With wbNew
       Set wsNew = wbNew.Sheets("Sheet1")
       wbNewName = ws.ListObjects(1).Name
       ws.ListObjects(1).Range.Copy
       wsNew.Range("A1").PasteSpecial Paste:=xlPasteAll
       .SaveAs Filename:=wb.Path & "\" & wbNewName & ".csv", _
             FileFormat:=xlCSVMSDOS, CreateBackup:=False
   End With

End Sub

코드에서는 각 워크시트에 하나의 테이블이 있다고 가정합니다. 새 통합 문서를 만들고 해당 통합 문서의 시트 1에 테이블을 복사한 다음 통합 문서를 테이블과 동일한 이름의 CSV 파일로 저장합니다.

답변2

Excel 2013에 대한 chuff의 답변 버전은 다음과 같습니다. 또한 모달 대화 상자도 비활성화됩니다.

Sub ExportCSV()

   Dim wb As Workbook, wbNew As Workbook
   Dim ws As Worksheet, wsNew As Worksheet

   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Set wbNew = Workbooks.Add
   Application.DisplayAlerts = False
   With wbNew
       Set wsNew = wbNew.Sheets("Sheet1")
       ws.Rows.Copy
       wsNew.Paste
       .SaveAs Filename:=ws.name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
       wsNew.Delete
   End With
   Windows(ws.name & ".csv").Activate
   ActiveWindow.Close
   Application.DisplayAlerts = True

End Sub

답변3

동일한 작업을 수행해야 했지만 CSV 파일로 내보내야 하는 테이블을 지정해야 했습니다. 다음과 같이 VBA를 사용하여 'ExportTables'라는 범위를 만들었습니다.

Public Sub Export()
    Dim i       As Integer
    Dim iMax    As Integer
    Dim sTable  As String

    iMax = Range("ExportTables").Rows.Count

    For i = 1 To iMax
        sTable = Range("ExportTables").Cells(i, 1).Value
        Call ExportTable(sTable)
    Next i
End Sub

Public Sub ExportTable(tableName As String)
    Dim wkb         As Workbook
    Dim wkbNew      As Workbook
    Dim wks         As Worksheet
    Dim wksNew      As Worksheet

    Set wkb = ThisWorkbook

    Application.Goto Reference:=tableName
    Set wks = ActiveSheet

    Set wkbNew = Workbooks.Add
    Set wksNew = wkbNew.Sheets(1)

    wks.ListObjects(tableName).Range.Copy
    wksNew.Range("A1").PasteSpecial Paste:=xlPasteValues

    Application.DisplayAlerts = False

    wkbNew.SaveAs Filename:=wkb.Path & "\" & tableName & ".csv", _
        FileFormat:=xlCSV, CreateBackup:=False
    wkbNew.Close SaveChanges:=False

    Application.DisplayAlerts = True

    ' Release object variables.
    Set wkb = Nothing
    Set wkbNew = Nothing
    Set wks = Nothing
    Set wksNew = Nothing
End Sub

답변4

Thorsten의 코드에서 .Delete 위의 코드에서 1004 오류가 발생했습니다. 나는 그것을 병합했다.이 예나에게 맞는 것을 얻었습니다.

Sub ExportCSV2()

   Dim wb As Workbook, wbNew As Workbook
   Dim ws As Worksheet, wsNew As Worksheet

   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Application.DisplayAlerts = False

   ws.Copy
   ActiveWorkbook.SaveAs Filename:=ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
   Windows(ws.Name & ".csv").Activate
   ActiveWorkbook.Close False
   Application.DisplayAlerts = True

End Sub

이 (Thorsten의) 접근 방식은 테이블뿐만 아니라 전체 시트를 내보내므로 많은 빈 행을 얻게 됩니다.

관련 정보