VBA văn bản thành cột

Hướng dẫn này sẽ chỉ cho bạn cách chuyển đổi chuỗi văn bản trong một ô thành nhiều cột bằng cách sử dụng phương pháp Range TextToColumns trong VBA

Văn bản thành cột

Các Phạm vi.TextToColumns trong VBA là một công cụ mạnh mẽ để dọn dẹp dữ liệu đã được nhập từ các tệp văn bản hoặc tệp csv chẳng hạn.

Hãy xem xét bảng tính sau.

Dữ liệu được đưa vào Excel tất cả trong một cột và được phân tách bằng dấu ngoặc kép.

Bạn có thể sử dụng phương pháp Range TextToColumns để tách dữ liệu này thành các cột.

Cú pháp TextToColumns

biểu hiện.TextToColumns (Điểm đến, Loại dữ liệu, TextQualifier, Dấu liên tiếp, Chuyển hướng, Dấu chấm phẩy, Dấu phẩy, Không gian, Khác, OtherChar, FieldInfo, Phân số thập phân, Hàng nghìn dấu phân tách, TrailingMinusNumbers)

Biểu hiện

Đây là Phạm vi ô bạn muốn tách - ví dụ: Phạm vi (“A1: A23”).

Tất cả các đối số trong phương thức TextToColumns là tùy chọn (chúng có dấu ngoặc vuông xung quanh).

Điểm đến

Nơi bạn muốn kết quả được đặt - thường bạn ghi đè dữ liệu và chia nó ở cùng một vị trí.

Loại dữ liệu

Loại phân tích cú pháp văn bản bạn đang sử dụng - nó có thể là xlDelimited (mặc định nếu bị bỏ qua) hoặc xlFixedWidth.

TextQualifier

Nếu bạn có dấu ngoặc kép (đơn hoặc kép) xung quanh mỗi trường trong văn bản mà bạn đang tách, bạn cần cho biết chúng là đơn hay kép.

ConsequtiveDelimiter

Điều này đúng hoặc sai và yêu cầu VBA xem xét 2 trong số các dấu phân cách giống nhau như thể nó là 1 dấu phân cách.

Chuyển hướng

Đây là một trong hai Thật của Sai, mặc định là Sai - điều này cho VBA biết rằng dữ liệu được phân định bằng Tab.

Dấu chấm phẩy

Đây là một trong haiThật của Sai, mặc định là Sai - điều này cho VBA biết rằng dữ liệu được phân cách bằng dấu chấm phẩy.

Không gian

Đây là một trong hai Thật của Sai, mặc định là Sai - điều này cho VBA biết rằng dữ liệu được phân cách bằng dấu cách.

Khác

Đây là một trong hai Thật của Sai, mặc định là Sai. Nếu bạn đặt giá trị này thành Đúng, thì đối số tiếp theo, OtherChar cần phải được chỉ rõ.

OtherChar

Đây là ký tự mà văn bản được phân tách (ví dụ: hoặc |).

FieldInfo

Đây là một mảng chứa thông tin về loại dữ liệu đang được phân tách. Giá trị đầu tiên trong mảng cho biết số cột trong dữ liệu và giá trị thứ hai cho biết hằng số mà bạn sẽ sử dụng để mô tả kiểu dữ liệu bạn yêu cầu.

Ví dụ về 5 cột có kiểu dữ liệu là văn bản, số và ngày tháng có thể là:

Mảng (Mảng (1, xlTextFormat), Mảng (2, xlTextFormat), Mảng (3, xlGeneralFormat), Mảng (4, xlGeneralFormat), Mảng (5, xlMDYFormat))

Một cách khác để giải quyết vấn đề này là:

Mảng (Mảng (1, 2), Mảng (2, 2), Mảng (3, 1), Mảng (4, 1), Mảng (5, 3))

Các số trong cột thứ hai là giá trị của các hằng số trong đó hằng số xlTextFormat có giá trị là 2, xlGeneralFormat (mặc định) có giá trị là 1 và xlMDYFormat có giá trị là 3.

Phân số thập phân

Bạn có thể chỉ định dấu phân tách thập phân mà VBA phải sử dụng nếu có số trong dữ liệu. Nếu bị bỏ qua, nó sẽ sử dụng cài đặt hệ thống, thường là một khoảng thời gian.

Hàng nghìn dấu phân tách

Bạn có thể chỉ định dấu phân tách hàng nghìn mà VBA phải sử dụng nếu có số trong dữ liệu. Nếu bị bỏ qua, nó sẽ sử dụng cài đặt hệ thống, thường là dấu phẩy.

TrailingMinusNumbers

Đối số này chủ yếu dành cho tính tương thích đối với dữ liệu được tạo từ các hệ thống cũ hơn trong đó dấu trừ thường đứng sau số chứ không phải trước đó. Bạn nên đặt giá trị này thành True nếu các số âm có dấu trừ đằng sau chúng. Mặc định này sai.

Chuyển đổi văn bản thành cột

Quy trình sau đây sẽ chuyển đổi dữ liệu Excel ở trên thành các cột.

12345678910111213141516 Sub TextToCol1 ()Phạm vi ("A1: A25"). TextToColumns _Đích: = Phạm vi ("A1: A25"),DataType: = xlDelimited, _TextQualifier: = xlDoubleQuote, _Dấu liên tiếp: = Đúng, _Tab: = Sai, _Dấu chấm phẩy: = Sai, _Dấu phẩy: = Sai,Dấu cách: = Đúng, _Khác: = Sai, _FieldInfo: = Array (Array (1, 1), Array (2, 1), Array (3, 1), Array (4, 1), Array (5, 1)), _DecimalSeparator: = "." , _Dấu phân tách hàng nghìn: = ",", _TrailingMinusNumbers: = TrueKết thúc Sub

Trong quy trình trên, chúng tôi đã điền vào tất cả các tham số. Tuy nhiên, nhiều tham số được đặt thành false hoặc thành cài đặt mặc định và không cần thiết. Dưới đây là một phiên bản rõ ràng hơn của quy trình trên. Bạn cần sử dụng tên tham số để cho biết chúng tôi đang sử dụng tham số nào.

1234567 Sub TextToCol2 ()Phạm vi ("A1: A25"). TextToColumns _DataType: = xlDelimited, _TextQualifier: = xlDoubleQuote, _Dấu liên tiếp: = Đúng, _Dấu cách: = Đúng,Kết thúc Sub

Chỉ có 4 tham số thực sự được yêu cầu - dữ liệu được phân tách bằng dấu ngoặc kép, bạn muốn các dấu ngoặc kép liên tiếp được coi là một và dữ liệu được phân tách bằng dấu cách!

Đối với một dòng mã nhanh hơn nữa, chúng ta có thể bỏ qua tên tham số, nhưng sau đó chúng ta sẽ cần phải đặt dấu phẩy để lưu vị trí của tham số. Bạn chỉ cần đặt thông tin đến tận tham số cuối cùng mà bạn đang sử dụng - trong trường hợp này là Dấu cách phân tách dữ liệu là tham số thứ 8.

123 Sub TextToCol3 ()Phạm vi ("A1: A25"). TextToColumns, xlDelimited, xlDoubleQuote, True,,,, TrueKết thúc Sub

Khi bạn chạy bất kỳ quy trình nào ở trên, dữ liệu sẽ được phân tách theo hình bên dưới.

wave wave wave wave wave