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: