介紹如何在 Excel 中使用 VBA 巨集將表格資料匯出為逗點分隔(csv)檔案。
另存為 CSV 檔案
若要將指定的工作表另存為 CSV 檔案,可以在選擇工作表之後,將工作表先複製到新的活頁簿中,再使用 Workbook.SaveAs
方法將活頁簿另存為 CSV 檔案:
' 選擇工作表 ThisWorkbook.Sheets("工作表1").Activate ' 將目前選擇的工作表複製至新的活頁簿 ActiveSheet.Copy ' 另存新檔 With ActiveWorkbook .SaveAs Filename:=myCSVFileName, FileFormat:=xlCSV, CreateBackup:=False ' 另存新檔 .Saved = True ' 避免出現儲存提示 .Close ' 關閉活頁簿 End With
這裡在另存新檔之前,先把工作表複製一份出來,可以避免在另存新檔之後影響到原本的 Excel 活頁簿。
另存為 UTF8 編碼 CSV 檔案
如果想要將 Excel 工作表匯出為 UTF8 編碼的 CSV 檔案,可以在呼叫 Workbook.SaveAs
方法的時候,將 FileFormat
參數設定為 xlCSVUTF8
:
' 選擇工作表 ThisWorkbook.Sheets("工作表1").Activate ' 將目前選擇的工作表複製至新的活頁簿 ActiveSheet.Copy ' 另存新檔 With ActiveWorkbook .SaveAs Filename:=myCSVFileName, FileFormat:=xlCSVUTF8, CreateBackup:=False ' 另存為 UTF8 編碼的 CSV 檔案 .Saved = True ' 避免出現儲存提示 .Close ' 關閉活頁簿 End With
將所有工作表匯出為 CSV 檔案
若要將 Excel 活頁簿中的所有工作表全部都匯出為 CSV 檔案,可以搭配 For Each
迴圈對每一張工作表逐一匯出:
Dim ws As Worksheet Dim csvFilename As String Dim csvDir As String ' 設定放置匯出 CSV 檔案的目錄 csvDir = ThisWorkbook.Path ' 對每一張工作表逐一處理 For Each ws In ActiveWorkbook.Worksheets ' 將工作表複製至新的活頁簿 ws.Copy ' 設定匯出的 CSV 檔案名稱 csvFilename = csvDir & "\" & ws.Name & ".csv" ' 將目前活頁簿另存為 CSV 檔案 With ActiveWorkbook .SaveAs Filename:=csvFilename, FileFormat:=xlCSV, CreateBackup:=False ' 另存為 CSV 檔案 .Saved = True ' 避免出現儲存提示 .Close ' 關閉活頁簿 End With Next
這段 VBA 巨集程式碼在執行之後,會自動匯出目前 Excel 活頁簿中的每一張工作表,而每個 CSV 檔案則以工作表的名稱命名,儲存在原本 Excel 檔案的目錄中。
多 Excel 檔案批次匯出為 CSV 檔案
如果需要將指定目錄之下的所有 Excel 檔案批次轉換成 CSV 檔案,可以參考以下 VBA 巨集:
Dim oFSO As Object Dim oFolder As Object Dim oFile As Object ' 所有 Excel 檔案放置的目錄 rootFolder = "C:\OfficeGuide\Excel" ' 建立 FileSystemObject 物件 Set oFSO = CreateObject("Scripting.FileSystemObject") ' 建立目錄物件 Set oFolder = oFSO.GetFolder(rootFolder) ' 逐一處理每個 Excel 檔案 For Each oFile In oFolder.Files ' 建立此 Excel 檔案輸出 CSV 檔案的目錄 outputFolder = rootFolder & "\" & oFSO.GetBaseName(oFile.Name) MkDir outputFolder ' 開啟 Excel 檔案 excelFilePath = rootFolder & "\" & oFile.Name Set wb = Workbooks.Open(excelFilePath) ' 對此 Excel 檔案的每一張工作表逐一處理 For Each ws In wb.Worksheets ' 將工作表複製至新的活頁簿 ws.Copy ' 設定匯出的 CSV 檔案名稱 csvFilename = outputFolder & "\" & ws.Name & ".csv" ' 將目前活頁簿另存為 CSV 檔案 With ActiveWorkbook .SaveAs Filename:=csvFilename, FileFormat:=xlCSV, CreateBackup:=False ' 另存為 CSV 檔案 .Saved = True ' 避免出現儲存提示 .Close ' 關閉活頁簿 End With Next ' 關閉 Excel 檔案 wb.Saved = True wb.Close Next oFile