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