Neethu je današnje pitanje postavio u komentaru na YouTubeu:
Može li makronaredba u Excelu promijeniti tekst u Slučaj rečenice?
Čudno je: Excel poznaje GORNJE, niže i pravilno, ali ne podržava ostale slučajeve podržane u programu Word: Sentence Case ili tOGGLE cASE.
Odabrani slučaj teksta lako se može promijeniti u programu Microsoft Word pomoću interne funkcije koja se naziva Promjena slova.

Možete jednostavno kliknuti:
- "Slučaj rečenice" kako bi se prvo slovo rečenice pisalo velikim slovom, a sva ostala slova ostavila malim slovima.
- "malim slovima" kako biste iz teksta izuzeli velika slova.
- "GLAVNO" za pisanje velikih slova velikim slovima.
- "Kapitalizirajte svaku riječ" da biste napisali veliko slovo svake riječi, a ostala slova ostavili malim slovima.
- "tOGGLE cASE" za pomicanje između dva prikaza slučaja.
Iako Excel nije aplikacija za obradu teksta, ponekad ćete možda trebati promijeniti slučaj datog teksta. Postoje tri Excel funkcije koje pružaju slične funkcije. Te funkcije uzimaju jedan argument i transformiraju slučaj navedenog teksta ili tekstualne vrijednosti referencirane ćelije kako je objašnjeno u nastavku.
LOWER()
funkcija za isključivanje velikih slova.UPPER()
funkcija za pisanje velikih slova velikim slovima.PROPER()
funkcija za pisanje velikih slova svake riječi.
Iako u ovom članku ne bismo raspravljali o opciji Tooggle Case, možda će biti potrebna rečenica Case Case za upotrebu u programu Excel, a to se djelomično može postići kombiniranjem postojećih funkcija za jednu rečenicu kao što je prikazano u nastavku.

Možete koristiti sljedeće kombinacije funkcija da biste primijenili Select Case na zadanu rečenicu u Excelu.
- Uzmite prvo slovo datog teksta upotrebom funkcije LIJEVO () i transformirajte ga u velika slova pomoću funkcije UPPER ():
=UPPER(LEFT(A1,1))
- I uzmite ostatak teksta kombinirajući zajedno funkcije DESNO () i LEN () i transformirajte ga u mala slova pomoću funkcije LOWER ():
=LOWER(RIGHT(A1,LEN(A1)-1))
- Napokon spojite ova dva rezultata pomoću funkcije CONCAT ():
=CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))
Ovo će transformirati tekst u velika i mala slova. To možete i testirati za sav velik tekst koji je prikazan u A2 ćeliji.
Što ako se u ćeliji nalazi više od jedne rečenice koju biste željeli promijeniti u Slučaj rečenice?

Jedna od mogućnosti za to mogla bi biti upotreba VBA za ovu transformaciju.
SENTENCECASE()
korisnički definirana funkcija uzima zadani tekst, obrađuje tekst za tri interpunkcijska znaka (točka, upitnik i uskličnik) kako bi pronašla više rečenica, napisala veliko slovo svake rečenice i vratila rezultat.
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()
funkcija koristi pomoćnu funkciju pozvanu splitAndTransform()
za razdvajanje rečenica i transformiranje slučaja prema zadanom graničniku. splitAndTransform()
je VBA funkcija za višekratnu upotrebu u ovom projektu, pa je napisana kao zasebna pomoćna funkcija.
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()
pomoćna funkcija koristi drugu pomoćnu funkciju isPuncMarked()
koja definira sadrži li zadani tekst interpunkcijski znak na kraju. Čak i ako se u modulu ne koristi ponovno, funkcija isPuncMarked () vraća logičku vrijednost, a funkcija pozivatelja tiče se samo vrijednosti koju vraća, već i načina na koji funkcionira. Uvijek je dobra praksa također razdvojiti ovu logiku kako bi se osigurala bolja čitljivost u ovisnim postupcima.
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
Evo rezultata.

U idealnom bi slučaju bilo dobro da napišete postupak koji će uzeti odabrani raspon i zamijeniti sav sadržaj upotrebom Sentence Case umjesto korisnički definirane funkcije. To se može učiniti dodavanjem sljedećeg potpostupka u projekt koji će primijeniti masnu i trajnu transformaciju.
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