マクロを使用して 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 つのテーブルがあることを前提としています。新しいワークブックを作成し、そのワークブックのシート 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

上記のコードから1004エラーが発生していました。Thorstenのコードから削除しました。この例そして、これが私の場合はうまくいきました:

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 の) アプローチでは、テーブルだけでなくシート全体がエクスポートされるため、大量の空の行が作成されることに注意してください。

関連情報