Dạng câu trong Excel - Thủ thuật Excel

Neethu đã đặt câu hỏi hôm nay trong một bình luận trên YouTube:

Macro có thể thay đổi văn bản thành Dạng câu trong Excel không?

Thật kỳ lạ: Excel biết LÊN, thấp hơn và Đúng, nhưng nó không hỗ trợ các trường hợp khác được hỗ trợ bởi Word: Trường hợp Câu hoặc TOGGLE cASE.

Có thể dễ dàng thay đổi trường hợp văn bản đã chọn trong Microsoft Word bằng cách sử dụng chức năng bên trong được gọi là Thay đổi trường hợp.

Thay đổi tùy chọn lệnh Trường hợp trong Microsoft Word.

Bạn chỉ cần nhấp vào:

  • "Chữ cái đầu câu" để viết hoa chữ cái đầu tiên của câu và để lại tất cả các chữ cái khác là chữ thường.
  • "chữ thường" để loại trừ chữ in hoa khỏi văn bản của bạn.
  • "UPPERCASE" để viết hoa tất cả các chữ cái.
  • "Capitalize Each Word" để viết hoa chữ cái đầu tiên của mỗi từ và để các chữ cái khác viết thường.
  • "tOGGLE cASE" để chuyển giữa hai dạng xem trường hợp.

Mặc dù Excel không phải là một ứng dụng xử lý văn bản, nhưng đôi khi bạn có thể cần phải thay đổi trường hợp của văn bản đã cho. Có ba hàm Excel để cung cấp chức năng tương tự. Các hàm này nhận một đối số duy nhất và biến đổi trường hợp của văn bản được cung cấp hoặc giá trị văn bản của ô được tham chiếu như được giải thích bên dưới.

  1. LOWER() chức năng loại trừ chữ in hoa.
  2. UPPER() chức năng viết hoa tất cả các chữ cái.
  3. PROPER() chức năng viết hoa chữ cái đầu tiên của mỗi từ.

Mặc dù chúng ta sẽ không thảo luận về tùy chọn Tooggle Case trong bài viết này, tùy chọn Câu Case có thể cần thiết để sử dụng trong Excel và điều này có thể đạt được một phần bằng cách kết hợp các hàm hiện có cho một câu như hình dưới đây.

Chọn Triển khai trường hợp với công thức Excel.

Bạn có thể sử dụng các tổ hợp hàm sau để áp dụng Chọn trường hợp cho một câu nhất định trong Excel.

  1. Lấy ký tự đầu tiên của văn bản đã cho bằng cách sử dụng hàm LEFT () và chuyển nó thành chữ hoa bằng cách sử dụng hàm UPPER ():

    =UPPER(LEFT(A1,1))

  2. Và lấy phần còn lại của văn bản bằng cách kết hợp các hàm RIGHT () và LEN () với nhau và chuyển nó thành chữ thường bằng cách sử dụng hàm LOWER ():

    =LOWER(RIGHT(A1,LEN(A1)-1))

  3. Cuối cùng nối hai kết quả này bằng cách sử dụng hàm CONCAT ():

    =CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))

Thao tác này sẽ chuyển văn bản thành dạng câu. Bạn cũng có thể kiểm tra điều này cho tất cả văn bản viết hoa được hiển thị trong ô A2.

Điều gì sẽ xảy ra nếu có nhiều hơn một câu trong một ô mà bạn muốn đổi thành Dạng câu?

Nhiều câu trong một ô.

Một tùy chọn để làm điều này có thể là sử dụng VBA để thực hiện chuyển đổi này.

SENTENCECASE() hàm do người dùng định nghĩa sẽ lấy văn bản đã cho, xử lý văn bản cho ba dấu câu (dấu chấm, dấu chấm hỏi và dấu chấm than) để tìm nhiều câu, viết hoa chữ cái đầu tiên của mỗi câu và trả về kết quả.

Function SENTENCECASE(txt As String) Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant ReDim resArr(0) resArr(0) = txt newArr1 = splitAndTransform(resArr(0), ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If SENTENCECASE = Join(resArr, " ") End Function

SENTENCECASE()hàm sử dụng một hàm trợ giúp được gọi splitAndTransform()để tách các câu và biến đổi trường hợp bằng dấu phân cách đã cho. splitAndTransform()là một hàm VBA có thể tái sử dụng trong dự án này, vì vậy nó được viết như một hàm trợ giúp riêng biệt.

Function splitAndTransform(text, delimiter) Dim tmpArr Dim newArr tmpArr = Split(text, delimiter) If UBound(tmpArr)>= 0 Then ReDim newArr(UBound(tmpArr)) For i = 0 To UBound(tmpArr) If tmpArr(i) "" Then newArr(i) = Trim(tmpArr(i)) newArr(i) = UCase(Left(newArr(i), 1)) & _ LCase(Right(newArr(i), Len(newArr(i)) - 1)) If Not isPuncMarked(newArr(i)) Then newArr(i) = newArr(i) & delimiter End If End If Next i Else ReDim newArr(0) End If splitAndTransform = newArr End Function

splitAndTransform()chức năng trợ giúp sử dụng một chức năng trợ giúp khác được gọi là chức năng isPuncMarked()xác định xem văn bản đã cho có chứa dấu câu ở cuối hay không. Ngay cả khi nó không được sử dụng lại trong mô-đun, hàm isPuncMarked () trả về một giá trị boolean và hàm người gọi chỉ quan tâm đến giá trị mà nó trả về, nhưng nó hoạt động như thế nào. Luôn luôn là một thực tiễn tốt để tách logic này ra để cung cấp khả năng đọc tốt hơn trong các thủ tục phụ thuộc.

Function isPuncMarked(sentence) As Boolean Dim rightMost As String rightMost = Right(sentence, 1) If rightMost = "." Or _ rightMost = "?" Or _ rightMost = "!" Then isPuncMarked = True Else isPuncMarked = False End If End Function

Đây là kết quả.

Kết quả SENTENCECASE UDF.

Tốt nhất, có thể là ý kiến ​​hay khi viết một thủ tục sẽ sử dụng phạm vi đã chọn và thay thế tất cả nội dung bằng cách sử dụng Chữ hoa đầu câu thay vì một hàm do người dùng xác định. Điều này có thể được thực hiện bằng cách thêm thủ tục phụ sau vào dự án sẽ áp dụng chuyển đổi hàng loạt và vĩnh viễn.

Sub doSentenceCase() Dim rng As Range Dim cll As Range Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant Set rng = Selection For Each cll In rng.Cells ReDim resArr(0) resArr(0) = cll.Value newArr1 = splitAndTransform(cll.Value, ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If cll.Value = Join(resArr, " ") Next cll End Sub

thú vị bài viết...