Kes Ayat dalam Excel - Petua Excel

Neethu mengemukakan soalan hari ini dalam komen di YouTube:

Bolehkah makro menukar teks ke Kalimat Kalimat di Excel?

Peliknya: Excel mengetahui UPPER, lebih rendah dan Proper, tetapi tidak menyokong kes lain yang disokong oleh Word: Sentence Case atau tOGGLE cASE.

Casing teks yang dipilih dapat diubah dengan mudah di Microsoft Word dengan menggunakan fungsi internal yang disebut Change Case.

Tukar pilihan arahan Kes dalam Microsoft Word.

Anda hanya boleh mengklik:

  • "Kes Kalimat" untuk menggunakan huruf besar dari kalimat pertama dan meninggalkan semua huruf lain sebagai huruf kecil.
  • "huruf kecil" untuk mengecualikan huruf besar dari teks anda.
  • "UPPERCASE" untuk menggunakan huruf besar semua huruf.
  • "Huruf Besar Setiap Kata" untuk menggunakan huruf besar setiap kata dan tinggalkan huruf kecil yang lain.
  • "TOGGLE cASE" untuk beralih antara dua paparan kes.

Walaupun Excel bukan aplikasi pemprosesan kata, kadang-kadang anda mungkin perlu mengubah huruf teks yang diberikan. Terdapat tiga fungsi Excel untuk memberikan fungsi yang serupa. Fungsi-fungsi ini mengambil argumen tunggal, dan mengubah huruf teks yang disediakan atau nilai teks sel yang dirujuk seperti yang dijelaskan di bawah.

  1. LOWER() berfungsi untuk mengecualikan huruf besar.
  2. UPPER() berfungsi untuk menggunakan huruf besar semua huruf.
  3. PROPER() berfungsi untuk menggunakan huruf besar setiap perkataan.

Walaupun kita tidak akan membincangkan pilihan Kes Tooggle dalam artikel ini, pilihan Kes Kalimat mungkin diperlukan untuk digunakan di Excel, dan ini dapat dicapai sebagian dengan menggabungkan fungsi yang ada untuk satu kalimat seperti yang ditunjukkan di bawah.

Pilih Pelaksanaan kes dengan formula Excel.

Anda boleh menggunakan kombinasi fungsi berikut untuk menerapkan Select Case pada ayat tertentu di Excel.

  1. Ambil huruf pertama teks yang diberikan dengan menggunakan fungsi LEFT (), dan ubah menjadi huruf besar dengan menggunakan fungsi UPPER ():

    =UPPER(LEFT(A1,1))

  2. Dan ambil sisa teks dengan menggabungkan fungsi KANAN () dan LEN () bersama-sama, dan ubah menjadi huruf kecil dengan menggunakan fungsi LOWER ()

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

  3. Akhirnya menggabungkan kedua-dua hasil ini dengan menggunakan fungsi CONCAT ():

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

Ini akan mengubah teks menjadi kes ayat. Anda juga boleh menguji ini untuk semua teks huruf besar yang ditunjukkan dalam sel A2.

Bagaimana jika terdapat lebih daripada satu ayat dalam sel yang ingin anda ubah menjadi Kes Hukuman?

Pelbagai ayat dalam sel.

Salah satu pilihan untuk melakukan ini ialah menggunakan VBA untuk melakukan transformasi ini.

SENTENCECASE() fungsi yang ditentukan pengguna mengambil teks yang diberikan, memproses teks untuk tiga tanda baca (noktah, tanda tanya, dan tanda seru) untuk mencari beberapa ayat, memanfaatkan huruf pertama setiap ayat, dan mengembalikan hasilnya.

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()fungsi menggunakan fungsi pembantu yang dipanggil splitAndTransform()untuk membagi ayat, dan mengubah kes oleh pembatas yang diberikan. splitAndTransform()adalah fungsi VBA yang dapat digunakan semula dalam projek ini, jadi ia ditulis sebagai fungsi pembantu yang berasingan.

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()fungsi penolong menggunakan fungsi penolong lain yang disebut isPuncMarked()yang menentukan jika teks yang diberikan mengandungi tanda baca di akhir. Walaupun tidak digunakan kembali dalam modul, fungsi isPuncMarked () mengembalikan nilai boolean, dan fungsi pemanggil hanya berkenaan dengan nilai yang dikembalikannya, tetapi bagaimana ia berfungsi. Selalu menjadi amalan yang baik untuk memisahkan logik ini untuk memberikan keterbacaan yang lebih baik dalam prosedur bergantung.

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

Inilah hasilnya.

Hasil SENTENCECASE UDF.

Sebaiknya, adalah idea yang baik untuk menulis prosedur yang akan mengambil julat yang dipilih, dan mengganti semua kandungan dengan menggunakan Sentence Case, bukan fungsi yang ditentukan pengguna. Ini dapat dilakukan dengan menambahkan sub prosedur berikut ke dalam projek yang akan menerapkan jisim dan transformasi kekal.

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

Artikel menarik...