Chỉ định Dấu phân cách khi Lưu tệp CSV trong Macro (Microsoft Excel)
Khi sử dụng các công cụ có sẵn từ dải băng để xuất trang tính, dưới dạng tệp CSV, Arkadiusz lưu ý rằng anh ta có thể chỉ định rằng anh ta muốn sử dụng dấu chấm phẩy (;) làm dấu phân cách trường. Tuy nhiên, nếu anh ta lưu tệp CSV bằng macro (FileFormat: = xlCSV hoặc xlCSVWindows), thì anh ta không thể chỉ định dấu chấm phẩy làm dấu phân cách.
Điều này hoạt động theo cách này bởi thiết kế trong VBA. Việc triển khai Excel các quy trình xuất cho VBA luôn sử dụng bất kỳ cài đặt khu vực nào của Windows để xác định cách các mục trong CSV nên được phân tách.
Cụ thể, quy trình này sẽ xem xét trường Dấu phân tách danh sách cho dấu phân cách. Điều này có nghĩa là bạn có thể, nếu muốn, thay đổi dấu phân cách thành dấu chấm phẩy bằng cách thay đổi cài đặt Dấu phân cách danh sách trong cấu hình cài đặt khu vực của bạn.
Nếu bạn không muốn thay đổi cài đặt khu vực, thay vào đó bạn có thể viết macro của riêng mình để xuất tệp theo bất kỳ cách nào bạn muốn.
Hãy xem xét, trong giây lát, macro sau, sẽ xuất ra tệp:
Sub CreateFile() Dim sFName As String Dim Rows As Long Dim Cols As Long Dim J As Long Dim K As Long Dim sTemp As String Dim sSep As String sSep = ";" 'Specify the separator to be used sFName = ActiveWorkbook.FullName If Right(sFName, 5) = ".xlsx" Then sFName = Mid(sFName, 1, Len(sFName) - 5) sFName = sFName & ".txt" Open sFName For Output As 1 With ActiveSheet 'Number of rows to export is based on the contents 'of column B. If it should be based on a different 'column, change the following line to reflect the 'column desired. Rows = .Cells(.Rows.Count, "B").End(xlUp).Row For J = 1 To Rows sTemp = "" Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column For K = 2 To Cols sTemp = sTemp & .Cells(J, K).Value If K < Cols Then sTemp = sTemp & sSep Next Print #1, sTemp Next J End With Close 1 sTemp = "There were " & Rows & " rows of data written " sTemp = sTemp & "to this file:" & vbCrLf & sFName Else sTemp = "This macro needs to be run on a workbook " sTemp = sTemp & "stored in the XLSX format." End If MsgBox sTemp End Sub
Macro này mở một tệp văn bản có cùng tên với sổ làm việc của bạn. Sau đó, nó bước qua từng hàng và bắt đầu kết hợp một chuỗi nội dung ô. (Điều này được đưa vào biến sTemp.) Mỗi ô có một dấu chấm phẩy đặt giữa nó, như được định nghĩa bởi biến sSep. Các giá trị được nối của mỗi hàng được lưu trữ trong tệp văn bản và khi hoàn thành, tệp văn bản sẽ được đóng. Quy trình này rất nhanh chóng và khi hoàn tất, nó sẽ hiển thị một thông báo cho biết có bao nhiêu hàng đã được xuất sang tệp.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (9243) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: