Věta Sentence v aplikaci Excel - Excel Tipy

Neethu položil dnešní otázku v komentáři na YouTube:

Může makro změnit text na případ věty v aplikaci Excel?

Je to divné: Excel zná UPPER, lower a Proper, ale nepodporuje ostatní případy podporované Wordem: Sentence Case nebo tOGGLE cASE.

Vybraný textový případ lze v aplikaci Microsoft Word snadno změnit pomocí interní funkce zvané Změnit velikost písmen.

Změňte možnosti příkazu Case v aplikaci Microsoft Word.

Můžete jednoduše kliknout na:

  • „Věta věty“ k použití velkého prvního písmene věty a ponechání všech ostatních písmen malými písmeny.
  • „malá písmena“ pro vyloučení velkých písmen z textu.
  • „UPPERCASE“ pro velká písmena všech písmen.
  • "Velká písmena každého slova" pro velké písmeno prvního slova každého slova a ponechání ostatních písmen malými písmeny.
  • „TOGGLE CASE“ pro přepínání mezi dvěma zobrazeními případu.

Přestože Excel není aplikace pro zpracování textu, někdy budete muset změnit velikost písma daného textu. Existují tři funkce aplikace Excel, které poskytují podobné funkce. Tyto funkce mají jediný argument a transformují velikost zadaného textu nebo textové hodnoty odkazované buňky, jak je vysvětleno níže.

  1. LOWER() funkce k vyloučení velkých písmen.
  2. UPPER() funkce velká písmena všech písmen.
  3. PROPER() funkce velká písmena prvního písmene každého slova.

I když v tomto článku nebudeme diskutovat o možnosti Tooggle Case, může být nutné použít možnost Sentence Case v aplikaci Excel a toho lze částečně dosáhnout kombinací existujících funkcí pro jednu větu, jak je znázorněno níže.

Vyberte implementaci případu pomocí vzorců aplikace Excel.

Následující kombinace funkcí můžete použít k použití funkce Vybrat případ na danou větu v aplikaci Excel.

  1. Vezměte první písmeno daného textu pomocí funkce LEFT () a pomocí funkce UPPER () jej převeďte na velká písmena:

    =UPPER(LEFT(A1,1))

  2. A vezměte zbytek textu kombinací funkcí RIGHT () a LEN () dohromady a pomocí funkce LOWER () jej transformujte na malá písmena:

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

  3. Nakonec spojte tyto dva výsledky pomocí funkce CONCAT ():

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

Tím se text převede na velká a malá písmena. Můžete to také otestovat pro veškerý text s velkými písmeny, který je zobrazen v buňce A2.

Co když je v buňce více než jedna věta, kterou byste chtěli změnit na Věc Sentence?

Více vět v buňce.

Jednou z možností, jak to udělat, může být použití VBA k provedení této transformace.

SENTENCECASE() uživatelsky definovaná funkce převezme daný text, zpracuje text pro tři interpunkční znaménka (tečka, otazník a vykřičník), aby našel více vět, psal první písmeno každé věty velkým písmenem a vrátil výsledek.

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()funkce používá pomocnou funkci volanou splitAndTransform()k rozdělení vět a transformaci případu daným oddělovačem. splitAndTransform()je opakovaně použitelná funkce VBA v tomto projektu, takže je zapsána jako samostatná pomocná funkce.

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()pomocná funkce používá jinou pomocnou funkci s názvem, isPuncMarked()která definuje, zda daný text na konci obsahuje interpunkční znaménko. I když se v modulu znovu nepoužívá, funkce isPuncMarked () vrací logickou hodnotu a funkce volajícího se týká pouze hodnoty, kterou vrací, ale jak funguje. Je vždy dobrým zvykem tuto logiku také oddělit, aby byla zajištěna lepší čitelnost v závislých postupech.

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

Zde je výsledek.

Výsledek UDF SENTENCECASE.

V ideálním případě by mohlo být dobré napsat proceduru, která bude trvat ve vybraném rozsahu, a nahradit veškerý obsah pomocí Sentence Case místo uživatelem definované funkce. To lze provést přidáním následujícího dílčího postupu do projektu, který použije hromadnou a trvalou transformaci.

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

Zajímavé články...