Kasus Kalimat di Excel - Tips Excel

Neethu mengajukan pertanyaan hari ini dalam komentar di YouTube:

Bisakah makro mengubah teks menjadi Kalimat Kalimat di Excel?

Aneh: Excel mengetahui UPPER, lower dan Proper, tetapi tidak mendukung kasus lain yang didukung oleh Word: Sentence Case atau TOGGLE cASE.

Kasus teks yang dipilih dapat dengan mudah diubah di Microsoft Word dengan menggunakan fungsi internal yang disebut Ubah Kasus.

Ubah opsi perintah Kasus di Microsoft Word.

Anda cukup mengklik:

  • "Kalimat Kalimat" untuk menggunakan huruf besar pada huruf pertama dari kalimat dan membiarkan semua huruf lainnya sebagai huruf kecil.
  • "huruf kecil" untuk mengecualikan huruf kapital dari teks Anda.
  • "UPPERCASE" untuk mengubah semua huruf menjadi kapital.
  • "Capitalize Each Word" untuk membuat huruf pertama dari setiap kata menjadi kapital dan membiarkan huruf lainnya menjadi huruf kecil.
  • "TOGGLE cASE" untuk beralih di antara dua tampilan kasus.

Meskipun Excel bukan aplikasi pengolah kata, terkadang Anda mungkin perlu mengubah kapitalisasi teks yang diberikan. Ada tiga fungsi Excel untuk menyediakan fungsionalitas serupa. Fungsi ini mengambil argumen tunggal, dan mengubah kasus teks yang disediakan atau nilai teks sel yang direferensikan seperti yang dijelaskan di bawah ini.

  1. LOWER() berfungsi untuk mengecualikan huruf kapital.
  2. UPPER() berfungsi untuk mengapitalkan semua huruf.
  3. PROPER() berfungsi untuk mengapitalkan huruf pertama dari setiap kata.

Meskipun kami tidak akan membahas opsi Kasus Tooggle dalam artikel ini, opsi Kasus 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 ini.

Pilih implementasi Kasus dengan rumus Excel.

Anda dapat menggunakan kombinasi fungsi berikut untuk menerapkan Select Case ke kalimat tertentu di Excel.

  1. Ambil huruf pertama dari 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 RIGHT () dan LEN () bersama-sama, dan ubah menjadi huruf kecil dengan menggunakan fungsi LOWER ():

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

  3. Akhirnya gabungkan kedua hasil ini dengan menggunakan fungsi CONCAT ():

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

Ini akan mengubah teks menjadi kasus kalimat. Anda juga dapat menguji ini untuk semua teks dengan huruf besar yang ditampilkan di sel A2.

Bagaimana jika ada lebih dari satu kalimat dalam sel yang ingin Anda ubah menjadi Kalimat Kalimat?

Beberapa kalimat dalam satu sel.

Salah satu opsi untuk melakukan ini dapat menggunakan VBA untuk melakukan transformasi ini.

SENTENCECASE() fungsi yang ditentukan pengguna mengambil teks yang diberikan, memproses teks untuk tiga tanda baca (titik, tanda tanya, dan tanda seru) untuk menemukan beberapa kalimat, menggunakan huruf besar pada huruf pertama dari setiap kalimat, 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 memisahkan kalimat, dan mengubah kasus dengan pembatas yang diberikan. splitAndTransform()adalah fungsi VBA yang dapat digunakan kembali dalam proyek ini, sehingga ditulis sebagai fungsi pembantu terpisah.

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 helper menggunakan fungsi helper lain yang disebut isPuncMarked()yang menentukan apakah teks yang diberikan berisi tanda baca di bagian akhir. Meskipun tidak digunakan kembali dalam modul, fungsi isPuncMarked () mengembalikan nilai boolean, dan fungsi pemanggil hanya memperhatikan nilai yang dikembalikannya, tetapi cara kerjanya. Ini selalu merupakan praktik yang baik untuk juga memisahkan logika ini untuk memberikan keterbacaan yang lebih baik dalam prosedur dependen.

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 UDF SENTENCECASE.

Idealnya mungkin ide yang baik untuk menulis prosedur yang akan mengambil rentang yang dipilih, dan mengganti semua konten dengan menggunakan Kasus Kalimat alih-alih fungsi yang ditentukan pengguna. Ini dapat dilakukan dengan menambahkan sub prosedur berikut ke dalam proyek yang akan menerapkan transformasi massa dan permanen.

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 yang menarik...