Prípad vety v programe Excel - Tipy pre Excel

Neethu položil dnešnú otázku v komentári na YouTube:

Môže makro zmeniť text na prípad vety v programe Excel?

Je to zvláštne: Excel vie, že je HORNÝ, nižší a správny, ale nepodporuje ďalšie prípady podporované programom Word: Prípad vety alebo tOGGLE cASE.

Vybraný textový prípad je možné v aplikácii Microsoft Word ľahko zmeniť pomocou internej funkcie s názvom Zmeniť veľké a malé písmená.

Zmeňte možnosti príkazov veľkých a malých písmen v programe Microsoft Word.

Môžete jednoducho kliknúť na:

  • „Rozsudok vety“ slúži na veľké začiatočné písmeno vety a všetky ostatné písmená ponecháva ako malé.
  • „malé písmená“, aby ste z textu vylúčili veľké písmená.
  • „VEĽKÁ PÍSMENA“ na použitie veľkých písmen všetkých písmen.
  • „Veľké písmená každého slova“ slúži na veľké začiatočné písmeno každého slova a ostatné písmená ponecháva malým písmenom.
  • „TOGGLE CASE“ na prepínanie medzi dvoma zobrazeniami veľkých a malých písmen.

Aj keď Excel nie je aplikácia na spracovanie textu, niekedy bude možno potrebné zmeniť veľkosť a veľkosť písma daného textu. Existujú tri funkcie programu Excel, ktoré poskytujú podobné funkcie. Tieto funkcie majú jediný argument a transformujú veľkosť písmen poskytnutého textu alebo textovej hodnoty odkazovanej bunky, ako je vysvetlené nižšie.

  1. LOWER() funkcia na vylúčenie veľkých písmen.
  2. UPPER() funkcia písania všetkých písmen na veľké písmená.
  3. PROPER() funkcia písania veľkých písmen prvého písmena každého slova.

Aj keď by sme v tomto článku nehovorili o možnosti Tooggle Case, je možné, že bude potrebné použiť možnosť Sentence Case v Exceli, čo sa dá čiastočne dosiahnuť kombináciou existujúcich funkcií pre jednu vetu, ako je uvedené nižšie.

Vyberte implementáciu prípadu pomocou vzorcov programu Excel.

Pomocou nasledujúcich kombinácií funkcií môžete na danú vetu v programe Excel použiť výber prípadov.

  1. Vezmite prvé písmeno daného textu pomocou funkcie LEFT () a pomocou funkcie UPPER () ho transformujte na veľké písmená:

    =UPPER(LEFT(A1,1))

  2. A vezmite zvyšok textu kombináciou funkcií RIGHT () a LEN () dohromady a pomocou funkcie LOWER () ho transformujte na malé písmená:

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

  3. Nakoniec zreťazte tieto dva výsledky pomocou funkcie CONCAT ():

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

Týmto sa text transformuje na malé a veľké písmená. Môžete to tiež otestovať na všetok veľký text, ktorý sa zobrazuje v bunke A2.

Čo ak je v bunke viac ako jedna veta, ktorú by ste chceli zmeniť na Sentence Case?

Viaceré vety v bunke.

Jednou z možností, ako to urobiť, môže byť použitie VBA na vykonanie tejto transformácie.

SENTENCECASE() používateľom definovaná funkcia vezme daný text, spracuje text pre tri interpunkčné znamienka (bodka, otáznik a výkričník), aby vyhľadala viac viet, napísala prvé písmeno každej vety veľkými písmenami a vrátila výsledok.

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()funkcia používa pomocnú funkciu volanú splitAndTransform()na rozdelenie viet a transformáciu prípadu daným oddeľovačom. splitAndTransform()je v tomto projekte opakovane použiteľnou funkciou VBA, preto je napísaná ako samostatná pomocná funkcia.

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á funkcia používa inú volanú pomocnú funkciu, isPuncMarked()ktorá definuje, či daný text na konci obsahuje interpunkčné znamienko. Aj keď sa modul opakovane nepoužíva, funkcia isPuncMarked () vráti boolovskú hodnotu a funkcia volajúceho sa týka iba hodnoty, ktorú vráti, ale toho, ako funguje. Je vždy dobrým zvykom túto logiku tiež oddeliť, aby sa zabezpečila lepšia čitateľnosť v závislých postupoch.

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 výsledok.

Výsledok UDF SENTENCECASE.

V ideálnom prípade by bolo dobré napísať procedúru, ktorá zaberie vybraný rozsah a nahradí všetok obsah namiesto prípadu definovaného používateľom pomocou Sentence Case. To je možné dosiahnuť pridaním nasledujúceho čiastkového postupu do projektu, ktorý použije hromadnú a trvalú transformáciu.

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

Zaujímavé články...