Excel'de Cümle Düzeni - Excel İpuçları

Neethu bugünün sorusunu YouTube'a yaptığı bir yorumda sordu:

Bir makro, metni Excel'de Cümle Durumuna değiştirebilir mi?

Tuhaf: Excel BÜYÜK, daha düşük ve Düzgün biliyor, ancak Word tarafından desteklenen diğer durumları desteklemiyor: Cümle Düzeni veya tOGGLE CASE.

Seçili metin durumu, Büyük / Küçük Harf Değiştir adlı dahili işlev kullanılarak Microsoft Word'de kolayca değiştirilebilir.

Microsoft Word'de Büyük / Küçük Harf komutu seçeneklerini değiştirin.

Basitçe tıklayabilirsiniz:

  • Bir cümlenin ilk harfini büyük yapmak ve diğer tüm harfleri küçük harf olarak bırakmak için "Cümle Düzeni".
  • Metninizden büyük harfleri çıkarmak için "küçük harf".
  • Tüm harfleri büyük harf yapmak için "BÜYÜK HARF".
  • Her bir kelimenin ilk harfini büyük yapmak ve diğer harfleri küçük bırakmak için "Her Kelimeyi Büyük Harf Yap".
  • İki durum görünümü arasında geçiş yapmak için "tOGGLE case".

Excel bir kelime işlemci uygulaması olmasa da, bazen verilen metnin büyük / küçük harf durumunu değiştirmeniz gerekebilir. Benzer işlevsellik sağlamak için üç Excel işlevi vardır. Bu işlevler tek bağımsız değişken alır ve sağlanan metnin veya başvurulan hücrenin metin değerinin durumunu aşağıda açıklandığı gibi dönüştürür.

  1. LOWER() büyük harfleri hariç tutma işlevi.
  2. UPPER() tüm harfleri büyük harfle yazma işlevi.
  3. PROPER() her kelimenin ilk harfini büyük harfle yazma işlevi.

Bu makalede Geçiş Durumu seçeneğini tartışmasak da, Cümle Düzeni seçeneğinin Excel'de kullanılması gerekli olabilir ve bu, mevcut işlevlerin aşağıda gösterildiği gibi tek bir cümle için birleştirilmesiyle kısmen sağlanabilir.

Excel formülleriyle Vaka uygulamasını seçin.

Excel'de belirli bir cümleye Seçme Örneği uygulamak için aşağıdaki işlev kombinasyonlarını kullanabilirsiniz.

  1. LEFT () işlevini kullanarak verilen metnin ilk harfini alın ve UPPER () işlevini kullanarak onu büyük harfe dönüştürün:

    =UPPER(LEFT(A1,1))

  2. Ve RIGHT () ve LEN () işlevlerini bir araya getirerek metnin geri kalanını alın ve LOWER () işlevini kullanarak onu küçük harfe dönüştürün:

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

  3. Son olarak CONCAT () işlevini kullanarak bu iki sonucu birleştirin:

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

Bu, metni cümle durumuna dönüştürecektir. Bunu, A2 hücresinde gösterilen tüm büyük harfli metin için de test edebilirsiniz.

Ya bir hücrede Cümle Düzeni olarak değiştirmek istediğiniz birden fazla cümle varsa?

Bir hücrede birden çok cümle.

Bunu yapmanın bir yolu, bu dönüşümü yapmak için VBA kullanmak olabilir.

SENTENCECASE() kullanıcı tanımlı işlev, verilen metni alır, metni üç noktalama işareti (nokta, soru işareti ve ünlem işareti) için işler, birden çok cümleyi bulmak, her cümlenin ilk harfini büyük harfle yazmak ve sonucu döndürmek.

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()işlev, splitAndTransform()cümleleri bölmek ve durumu verilen sınırlayıcıyla dönüştürmek için çağrılan bir yardımcı işlevi kullanır . splitAndTransform()bu projede yeniden kullanılabilir bir VBA işlevidir, bu nedenle ayrı bir yardımcı işlev olarak yazılır.

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()helper işlevi isPuncMarked(), verilen metnin sonunda bir noktalama işareti içerip içermediğini tanımlayan başka bir yardımcı işlevi kullanır . Modülde tekrar kullanılmasa bile, isPuncMarked () işlevi bir boole değeri döndürür ve çağıran işlevi yalnızca döndürdüğü değerle, ancak nasıl çalıştığı ile ilgilidir. Bağımlı prosedürlerde daha iyi okunabilirlik sağlamak için bu mantığı ayırmak da her zaman iyi bir uygulamadır.

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

İşte sonuç.

SENTENCECASE UDF sonucu.

İdeal olarak, seçilen aralığı alacak bir prosedür yazmak ve tüm içeriği kullanıcı tanımlı bir işlev yerine Cümle Düzeni kullanarak değiştirmek iyi bir fikir olabilir. Bu, kütle ve kalıcı dönüşümü uygulayacak projeye aşağıdaki alt prosedür eklenerek yapılabilir.

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

Ilginç makaleler...