Feroz có một loạt các giá trị văn bản trong cột A. Các giá trị này được định dạng bằng hai màu phông chữ khác nhau trong mỗi ô. (Phần đầu tiên của văn bản là một màu và phần thứ hai là một màu khác.) Anh ấy muốn chia các giá trị văn bản này thành các cột B và C, sao cho bất kỳ thứ gì có màu đầu tiên nằm trong cột B và bất kỳ thứ gì có màu thứ hai là trong cột C. Anh ấy lưu ý rằng công cụ Text to Columns sẽ không xử lý điều này, vì vậy anh ấy tự hỏi liệu nó có thể được thực hiện hay không.

Có, nó có thể được thực hiện. Một cách là sử dụng khả năng Flash Fill tích hợp của Excel. (Công cụ này chỉ khả dụng trong Excel 2013 hoặc các phiên bản mới hơn.) Giả sử bạn đang bắt đầu với dữ liệu giống như sau:

(Xem Hình 1.)

image

Hình 1. Dữ liệu nhiều màu của bạn.

Lưu ý rằng dữ liệu thử nghiệm của tôi bao gồm, trong cột E, một số đặc điểm của dữ liệu trong cột A. Tại thời điểm này, tất cả những gì bạn cần làm là cung cấp cho Flash Fill thứ gì đó mà nó có thể hoạt động. Tôi làm điều này bằng cách tách văn bản theo cách thủ công ở hàng 2 và 3, như được hiển thị ở đây: (Xem Hình 2)

image

Hình 2. Thiết lập các ví dụ.

Điều quan trọng là các ví dụ bạn tạo trong B2: C3 phải chính xác — chúng phải bao gồm bất kỳ thứ gì có màu bất kỳ (bao gồm cả dấu cách ở đầu hoặc cuối) và cả chính tả và viết hoa đều phải đúng.

Bây giờ chọn ô B4 và nhấn Ctrl + E. Điều này làm cho Flash Fill bắt đầu hoạt động và bạn sẽ thấy văn bản xuất hiện trong phần còn lại của cột B. Thực hiện tương tự trong cột C — chọn ô C4 và nhấn Ctrl + E. Kết quả của bạn sẽ giống như sau: (Xem Hình 3.)

image

Hình 3. Sau khi sử dụng Flash Điền vào cả hai cột.

Tôi nên lưu ý rằng thành công của bạn với Flash Fill phần lớn sẽ phụ thuộc vào các đặc điểm của dữ liệu trong cột A. Trong hầu hết các trường hợp, nó sẽ thực hiện phần lớn công việc và nó có thể hoàn thành nhiệm vụ rất nhiều. Có thể có một số trường hợp kỳ lạ trong đó Flash Fill không thể phân biệt nó sẽ tách dữ liệu của bạn như thế nào. Bạn có thể thấy điều này trong hình trước, nơi các ô A7, A9 và A11 không được tách ra một cách chính xác. Bạn sẽ muốn kiểm tra kết quả của mình một cách cẩn thận để đảm bảo rằng chúng có ý nghĩa.

Nếu Flash Fill không phù hợp với bạn, thì bạn sẽ muốn tạo macro để thực hiện công việc. Có thể tạo ra một macro sẽ hoạt động trên tất cả các ô trong cột A và kéo văn bản vào cột B và C (như Feroz cần), nhưng linh hoạt hơn khi tạo một hàm do người dùng xác định sẽ trả về bất kỳ thứ gì bị truy nã khỏi phòng giam. Đây là một ví dụ:

Function SplitColors(r As Range, Optional iWanted As Integer = 1) _   As String     Dim sTemp As String     Dim J As Integer     Dim K As Integer     Dim iColors(9) As Integer

sTemp = ""

If r.Cells.Count = 1 Then         For J = 1 To 9             iColors(J) = 0         Next J

' Determine where colors change         ' Remember there will always be at least one color         K = 1         iColors(K) = 1         For J = 2 To Len(r.Text)

If r.Characters(J,1).Font.Color <> _               r.Characters(J-1,1).Font.Color Then                 K = K + 1                 iColors(K) = J             End If         Next J

' Check if wanted color is less than total colors         If iWanted <= K Then             J = iColors(iWanted + 1)

If J = 0 Then J = Len(r.Text) + 1             J = J - iColors(iWanted)

sTemp = Mid(r.Text, iColors(iWanted), J)

End If     End If     SplitColors = sTemp End Function

Hàm SplitColors yêu cầu một tham số (một phạm vi để hoạt động)

và tham số thứ hai, tùy chọn (màu nào từ phạm vi bạn muốn).

Trước tiên, hàm kiểm tra xem nó có được chuyển qua một ô đơn hay không. Nếu vậy, nó xác định có bao nhiêu màu trong ô đó và các số ký tự nơi xảy ra thay đổi màu. Sau đó, nếu màu mong muốn (được truyền trong tham số thứ hai tùy chọn) ít hơn số màu trong ô, các ký tự sử dụng màu đó sẽ được trả về.

Vì vậy, ví dụ: nếu bạn muốn trả về các ô sử dụng màu đầu tiên trong ô A2, bạn có thể sử dụng một trong hai cách sau trong trang tính của mình:

=SplitColors(A2, 1)

=SplitColors(A2)

Lời gọi thứ hai hoạt động vì tham số thứ hai là tùy chọn. Nếu bạn không bao gồm nó, thì hàm giả sử bạn muốn làm việc với màu đầu tiên. Nếu bạn muốn trả về văn bản bằng cách sử dụng màu thứ hai trong ô, thì thao tác sau sẽ hoạt động:

=SplitColors(A2, 2)

Chức năng SplitColors sẽ hoạt động với tối đa 9 màu trong bất kỳ ô nào bạn đang kiểm tra. Nếu bạn chỉ định tham số thứ hai là 9 hoặc lớn hơn, thì bạn sẽ gặp lỗi.

_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 (13605) áp dụng cho Microsoft Excel 2013, 2016, 2019 và Excel trong Office 365.