Terry thường xuyên sử dụng hàm trang tính PROPER để thay đổi kiểu chữ trong trang tính của mình. Anh ấy tự hỏi liệu có cách nào để hướng dẫn hàm bỏ qua một số từ nhất định để chúng không được bắt đầu bằng chữ in hoa hay không. Không có gì lạ khi anh ta phải quay lại sau khi sử dụng PROPER và thay đổi các từ như “the” hoặc “an” thành tất cả các chữ thường. Nếu PROPER có thể tự động bỏ qua việc thay đổi các từ như vậy, thì đó sẽ là một trợ giúp lớn.

Một cách để tiếp cận điều này là sử dụng hàm trang tính SUBSTITUTE kết hợp với hàm PROPER. Ví dụ: nếu bạn muốn tìm các trường hợp của từ “The” với “the”, bạn có thể sử dụng như sau:

=SUBSTITUTE(PROPER(A1)," The "," the ")

Lưu ý việc bao gồm khoảng trống trước và sau những gì bạn đang tìm kiếm và những gì bạn đang thay thế. Điều này đảm bảo rằng chỉ những từ đầy đủ mới được sửa đổi. Nó cũng đảm bảo rằng không có thay đổi nào được thực hiện ở đầu giá trị ô hoặc ở cuối.

Nếu bạn muốn tìm kiếm các từ khác cần thay thế, bạn chỉ cần tăng số lượng phiên bản của SUBSTITUTE trong công thức:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(PROPER(A1)," The ", " the ")," An "," an ")," And "," and ")

Điều này rõ ràng có thể hơi khó xử nếu bạn có nhiều từ muốn loại trừ khỏi việc sửa đổi. Trong trường hợp đó, bạn sẽ cần sử dụng macro. Macro sau, được viết dưới dạng một hàm do người dùng xác định, có thể được sử dụng để chuyển đổi tất cả các từ trong ô thành chữ hoa ban đầu (giống như PROPER), nhưng hãy đảm bảo rằng một số từ đã xác định là chữ thường.

Function Title(ByVal ref As Range) As String     Dim vaArray As Variant     Dim c As String     Dim i As Integer     Dim J As Integer     Dim vaLCase As Variant     Dim str As String

' Array contains terms that should be lower case     vaLCase = Array("a", "an", "and", "in", "is", _       "of", "or", "the", "to", "with")



c = StrConv(ref, 3)

'split the words into an array     vaArray = Split(c, " ")

For i = 2 To UBound(vaArray)

For J = LBound(vaLCase) To UBound(vaLCase)

' compare each word in the cell against the             ' list of words to remain lowercase. If the             ' Upper versions match then replace the             ' cell word with the lowercase version.

If UCase(vaArray(i)) = UCase(vaLCase(J)) Then                 vaArray(i) = vaLCase(J)

End If         Next J     Next i

' rebuild the sentence     str = ""

For i = 1 To UBound(vaArray)

str = str & " " & vaArray(i)

Next i

Title = Trim(str)

End Function

Để sử dụng macro, tất cả những gì bạn cần làm là sử dụng phần sau trong trang tính của mình:

=Title(A1)

Nếu bạn gặp lỗi khi cố gắng chạy macro này, rất có thể bạn đang sử dụng Excel 97. Chức năng Chia tách không được thêm vào cho đến Excel 2000, vì vậy người dùng Excel 97 sẽ gặp lỗi. Nếu bạn làm như vậy, hãy thêm macro sau để mô phỏng chức năng Split.

Function Split(Raw As String, Delim As String) As Variant     Dim vAry() As String     Dim sTemp As String     Dim J As Integer     Dim Indx As Integer

Indx = 0     sTemp = Raw     J = InStr(sTemp, Delim)

While J > 0         Indx = Indx + 1         ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(Left(sTemp, J))

sTemp = Trim(Mid(sTemp, J, Len(sTemp)))

J = InStr(sTemp, Delim)

Wend     Indx = Indx + 1     ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(sTemp)

Split = vAry()

End Function

Bạn cũng có thể tìm thấy một cách tiếp cận bổ sung để thực hiện chuyển đổi mong muốn tại trang web này:

http://dmcritchie.mvps.org/excel/proper.htm

_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 (10559) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.

Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: