Neethu esitas tänase küsimuse YouTube'i kommentaaris:
Kas makro saab Excelis teksti Lausejuhtumiks muuta?
See on kummaline: Excel teab UPPER, madalamat ja Proper, kuid see ei toeta teisi Wordi toetatud juhtumeid: lausejuhtum või tOGGLE case.
Valitud tekst- ja väiketähti saab Microsoft Wordis hõlpsasti muuta, kasutades sisemist funktsiooni nimega Muuda juhtumit.

Võite lihtsalt klõpsata:
- "Lausejuhtum", et lause algustäht suurtähtedega kirjutada ja kõik ülejäänud tähed jätta väiketähtedeks.
- "väikesed tähed", et oma tekstist suurtähti välistada.
- Kõigi tähtede suurtähtedega kirjutamine „TÄPP”.
- "Suurtähtedega iga sõna" suurendab iga sõna esimest tähte ja jätab ülejäänud tähed väiketäheks.
- "TOGGLE CASE" kahe juhtumivaate vahel vahetamiseks.
Kuigi Excel ei ole tekstitöötlusrakendus, peate mõnikord vajama antud teksti suurtähtede muutmist. Sarnase funktsionaalsuse pakkumiseks on kolm Exceli funktsiooni. Need funktsioonid võtavad ühe argumendi ja muudavad esitatud teksti või viidatud lahtri teksti väärtuse juhtumit, nagu allpool selgitatud.
LOWER()
funktsioon suurtähtede välistamiseks.UPPER()
funktsioon kõigi tähtede suurtähtede sisestamiseks.PROPER()
funktsioon suurte tähtedega iga sõna.
Kuigi me ei arutaks selles artiklis suvandit Tooggle Case, võib Exceli kasutamiseks olla vajalik lause lause juhtum ja seda saab osaliselt saavutada, kombineerides olemasolevad funktsioonid ühe lause jaoks, nagu allpool näidatud.

Valikjuhtumi rakendamiseks Excelis antud lausele saate kasutada järgmisi funktsioonikombinatsioone.
- Võtke antud teksti esimene täht funktsiooni LEFT () abil ja teisendage see suureks, kasutades funktsiooni UPPER ():
=UPPER(LEFT(A1,1))
- Ja võtke ülejäänud tekst, ühendades funktsioonid PAREM () ja LEN () ning teisendage see väiketähtedeks, kasutades funktsiooni LOWER ():
=LOWER(RIGHT(A1,LEN(A1)-1))
- Lõpuks ühendage need kaks tulemust funktsiooni CONCAT () abil:
=CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))
See muudab teksti lause- ja väiketäheks. Seda saab testida ka kogu suurtähega tekstiga, mis on näidatud lahtris A2.
Mis siis, kui lahtris on rohkem kui üks lause, mille soovite muuta lausejuhtumiks?

Üks võimalus selleks võib olla VBA kasutamine selle teisenduse tegemiseks.
SENTENCECASE()
kasutaja määratud funktsioon võtab antud teksti, töötleb teksti kolme kirjavahemärgi (punkt, küsimärk ja hüüumärk) leidmiseks mitme lause leidmiseks, iga lause esimese tähe suurtäheks muutmiseks ja tulemuse tagastamiseks.
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()
funktsioon kasutab abifunktsiooni, mida nimetatakse splitAndTransform()
lausete jagamiseks ja juhtude teisendamiseks antud eraldaja abil. splitAndTransform()
on selles projektis korduvkasutatav VBA funktsioon, seega on see kirjutatud eraldi abifunktsioonina.
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-funktsioon kasutab teist abistajafunktsiooni, mida nimetatakse, isPuncMarked()
mis määrab, kas antud teksti lõpus on kirjavahemärk. Isegi seda ei kasutata moodulis uuesti, funktsioon isPuncMarked () tagastab tõeväärtuse ja helistajafunktsioon puudutab ainult selle väärtust, mille see tagastab, vaid selle toimimist. Alati on hea tava ka see loogika eraldada, et tagada parem loetavus sõltuvates protseduurides.
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
Siin on tulemus.

Ideaalis võiks olla hea kirjutada protseduur, mis võtab valitud vahemiku, ja asendada kogu sisu, kasutades kasutaja määratud funktsiooni Lausete juhtum. Seda saab teha, lisades projekti järgmise alamprotseduuri, mis rakendab massi ja püsivat teisendamist.
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