Veličnik v Excelu - nasveti za Excel

Neethu je današnje vprašanje postavil v komentarju na YouTubu:

Ali lahko makro spremeni besedilo v Veličnik v Excelu?

Nenavadno je: Excel pozna GORNJO, nižjo in pravilno, ne podpira pa drugih primerov, ki jih podpira Word: Primer stavka ali tOGGLE cASE.

Izbrane črke besedila lahko v programu Microsoft Word enostavno spremenite z uporabo notranje funkcije, imenovane Spremeni črko.

Spremenite možnosti ukaza velike črke v programu Microsoft Word.

Lahko preprosto kliknete:

  • "Sentence Case", da se prva črka stavka uporabi z velikimi črkami, vse druge črke pa pustijo z malimi črkami.
  • "male črke", da iz besedila izključite velike črke.
  • "UPPERCASE" za uporabo velikih črk.
  • "Zapiši vsako besedo z veliko začetnico", da bo prva črka vsake besede napisana z velikimi črkami, ostale črke pa bodo ostale male.
  • "tOGGLE cASE" za prehod med dvema pogledoma primerov.

Čeprav Excel ni aplikacija za obdelavo besedil, boste včasih morda morali spremeniti velikost besedila. Obstajajo tri Excelove funkcije za zagotavljanje podobnih funkcij. Te funkcije zavzamejo en argument in pretvorijo velikost besedila ali vrednosti besedila referenčne celice, kot je razloženo spodaj.

  1. LOWER() funkcija za izključitev velikih črk.
  2. UPPER() funkcija za uporabo velikih črk.
  3. PROPER() funkcija za uporabo velike črke v vsaki besedi.

Čeprav v tem članku ne bi razpravljali o možnosti Tooggle Case, bo morda v Excelu potrebna možnost Case Sentence Case, kar lahko delno dosežemo s kombiniranjem obstoječih funkcij za en stavek, kot je prikazano spodaj.

Izberite Izvajanje primera z Excelovimi formulami.

Uporabite lahko naslednje kombinacije funkcij, če želite uporabiti Select Case za dani stavek v Excelu.

  1. Vzemite prvo črko danega besedila s funkcijo LEFT () in jo spremenite v velike črke s funkcijo UPPER ():

    =UPPER(LEFT(A1,1))

  2. Preostanek besedila vzemite tako, da združite funkciji RIGHT () in LEN () ter ga spremenite v male črke s funkcijo LOWER ():

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

  3. Končno združite ta dva rezultata z uporabo funkcije CONCAT ():

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

To bo besedilo spremenilo v stavek. To lahko preizkusite tudi za besedilo z veliko začetnico, ki je prikazano v celici A2.

Kaj pa, če je v celici več kot en stavek, ki bi ga radi spremenili v Primer stavka?

Več stavkov v celici.

Ena od možnosti za to je lahko uporaba VBA za izvedbo te preobrazbe.

SENTENCECASE() uporabniško določena funkcija vzame dano besedilo, obdela besedilo za tri ločila (piko, vprašaj in klicaj), da najde več stavkov, uporabi veliko črko vsake povedi in vrne 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 uporablja pomožno funkcijo, imenovano splitAndTransform()za razdelitev stavkov, in pretvorbo črke z dano ločilo. splitAndTransform()je v tem projektu večkrat uporabljena funkcija VBA, zato je zapisana kot ločena 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 uporablja drugo pomožno funkcijo, ki imenuje isPuncMarked()ta, ki določa, ali dano besedilo na koncu vsebuje ločila. Tudi v modulu ni ponovno uporabljena, funkcija isPuncMarked () vrne logično vrednost, funkcija klicatelja pa zadeva le vrednost, ki jo vrne, ampak kako deluje. Vedno je dobra praksa tudi ločiti to logiko, da zagotovimo boljšo berljivost v odvisnih postopkih.

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

Tu je rezultat.

Rezultat obsodbe UDF.

V idealnem primeru bi bilo dobro, da napišete postopek, ki bo zajemal izbrani obseg, in nadomestite vso vsebino z uporabo Sentence Case namesto z uporabniško določeno funkcijo. To lahko storite tako, da v projekt dodate naslednji podproces, ki bo uporabil masno in trajno preoblikovanje.

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

Zanimive Članki...