Muhammad có một danh sách dài các tên công ty trong một trang tính. Tên của mỗi công ty bằng cách nào đó đã bị loại bỏ tất cả các khoảng trắng, để (ví dụ) chúng xuất hiện dưới dạng “AstroPhysics” thay vì “Astro Physics”. Muhammad cần một cách xử lý tất cả các tên công ty để chèn một khoảng trắng giữa bất kỳ sự xuất hiện nào của một chữ cái viết hoa, ngoại trừ chữ cái đầu tiên trong ô. Anh ấy tự hỏi liệu có cách nào dễ dàng để làm điều này không.

Có một số cách mà bạn có thể thực hiện để thêm khoảng trắng. Trước khi đến với các giải pháp dựa trên vĩ mô không thể tránh khỏi, bạn có thể muốn kiểm tra tên công ty. Nó có thể đơn giản là có một ký tự không in giữa mỗi từ trong tên, thay vì một khoảng trắng. Bạn có thể xác định điều này bằng cách chỉnh sửa ô, định vị điểm chèn một vài ký tự trước một chữ cái viết hoa, rồi nhấn vào mũi tên phải nhiều lần. Bạn sẽ thấy điểm chèn di chuyển một khoảng trắng sang bên phải sau mỗi lần nhấn; nếu nó có vẻ “do dự” không gian nên ở đâu, thì có một ký tự không in ở đó.

Trong trường hợp này, giải pháp tốt nhất là thực hiện thao tác Tìm và Thay thế để thay thế ký tự không in bằng một khoảng trống thực. (Bạn có thể chọn ký tự không in — giữ phím Shift khi nhấn vào mũi tên phải qua vị trí bạn tin — và sao chép nó. Sau đó, dán vào hộp Tìm gì để thực hiện tìm kiếm của bạn.)

Giả sử dữ liệu không có bất kỳ ký tự không in nào trong đó, bạn cũng có thể thử sử dụng cách tiếp cận không macro. Có lẽ cách tiếp cận đơn giản nhất là thêm một hoặc hai cột trợ giúp. Trong phần đầu tiên, bạn có thể nhập công thức để tìm ra vị trí của chữ hoa thứ hai trong tên công ty. Giả sử tên công ty nằm trong ô A1, công thức sau đây sẽ được nhập dưới dạng công thức mảng:

=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)

Nếu công thức này được nhập vào ô B1, thì bạn có thể sử dụng cách sau để chèn khoảng trắng vào tên công ty ban đầu:

=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)

Tuy nhiên, có một nhược điểm lớn đối với phương pháp này: Nó giả định rằng dữ liệu gốc của bạn tuân theo một định dạng rất nghiêm ngặt. Nó hoạt động tuyệt vời với tên công ty bắt đầu bằng một chữ cái viết hoa và chỉ cần chèn một khoảng trắng duy nhất. Nếu tên không phù hợp với các thông số này, thì nó sẽ không hoạt động như mong đợi.

Tất nhiên, bạn có thể khắc phục những vấn đề này nếu bạn sử dụng macro để chèn khoảng trắng. Sau đây là một cách tiếp cận đơn giản xem xét từng ký tự trong ô. Nếu ký tự là một chữ cái viết hoa, thì một khoảng trắng sẽ được chèn trước ký tự. Khi macro được thực hiện xong, chuỗi được nhồi trở lại ô.

Function Add_Spaces(ByVal sText As String) As String    Dim CharNum As Long    Dim FixedText As String    Dim CharCode As Long

FixedText = Left(sText, 1)



For CharNum = 2 To Len(sText)

CharCode = Asc(Mid(sText, CharNum, 1))

If CharCode >= 65 And CharCode <= 90 Then          FixedText = FixedText & " " & Mid(sText, CharNum, 1)

Else          FixedText = FixedText & Mid(sText, CharNum, 1)

End If    Next CharNum

Add_Spaces = FixedText End Function

Sử dụng macro rất đơn giản; nếu tên công ty nằm trong ô A1, thì thông tin sau được sử dụng:

=Add_Spaces(A1)

Một cách tiếp cận nhỏ gọn hơn là dựa vào biểu thức chính quy để xác định vị trí các chữ cái viết hoa và chèn một khoảng trắng, như thể hiện trong hình sau:

Function SplitCaps(str As String) As String     Dim objRegex As Object     Set objRegex = CreateObject("vbscript.regexp")



With objRegex         .Global = True         .Pattern = "([a-z])([A-Z])"

SplitCaps = .Replace(str, "$1 $2")

End With End Function

Kỹ thuật macro cụ thể này yêu cầu bạn bật biểu thức chính quy. Bạn thực hiện việc này trong VB Editor bằng cách chọn Tools | Tham chiếu và sau đó cuộn qua các tham chiếu có sẵn để tìm tùy chọn Microsoft VBScript Regular Expressions 5.5. Đảm bảo hộp kiểm bên trái của tham chiếu được chọn, sau đó bấm OK. Sau đó, bạn có thể sử dụng hàm SplitCaps từ bên trong Excel giống như cách bạn có thể sử dụng hàm Add_Spaces.

Tất nhiên, sự phù hợp của bất kỳ cách tiếp cận nào sẽ phụ thuộc phần lớn vào các đặc điểm của dữ liệu bạn đang làm việc. Nếu tên công ty ban đầu của bạn bao gồm nhiều chữ cái viết hoa liên tiếp (chẳng hạn như “ABCCorp.”) Thì bạn sẽ có quá nhiều khoảng trắng trong đầu ra của mình, chẳng hạn như “ABCCorp.” trở thành “A B C Corp.” thay vì “ABC Corp.”. Ngoài ra, các ký tự không phải chữ cái có thể tạo ra một chìa khóa trong tác phẩm như “H&M”

trở thành “H & M” hoặc vẫn là “H&M” (tùy thuộc vào cách tiếp cận macro mà bạn sử dụng).

Trong nỗ lực khắc phục một số tên công ty kỳ quặc này, bạn có thể thử một cách tiếp cận vĩ mô khác để kiểm tra xem có nhiều chữ cái viết hoa tuần tự hay không và điều chỉnh đầu ra cho phù hợp.

Sub AddSpaces()

Dim i As Integer     Dim j As Integer     Dim PriorCap As Boolean     Dim temp As String

j = 1

Do While Cells(j, 2) <> ""

Cells(j, 3) = ""

PriorCap = True         For i = 1 To Len(Cells(j, 2))

Select Case Mid(Cells(j, 2), i, 1)

Case "A" To "Z", "-"

If PriorCap = False Then                         Cells(j, 3) = Cells(j, 3) & " " & _                           Mid(Cells(j, 2), i, 1)

Else                         Cells(j, 3) = Cells(j, 3) & _                           Mid(Cells(j, 2), i, 1)

End If                     PriorCap = True                 Case Else                     Cells(j, 3) = Cells(j, 3) & _                       Mid(Cells(j, 2), i, 1)

PriorCap = False             End Select         Next i         j = j + 1     Loop End Sub

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