Mondat esete az Excelben - Excel tippek

Neethu a mai kérdést tette fel a YouTube-on kommentben:

Megváltoztathatja-e a makró a szöveget mondat esetre az Excelben?

Furcsa: az Excel ismeri a FELSŐ, az alacsonyabb és a Helyes szót, de nem támogatja a Word által támogatott többi esetet: Mondat eset vagy tOGGLE ügy.

A kiválasztott szöveg- és nagybetűk könnyen megváltoztathatók a Microsoft Wordben a Változtatás nevű belső funkció használatával.

Változtassa meg az eset parancs parancsait a Microsoft Word alkalmazásban.

Egyszerűen kattintson:

  • "Mondat eset": a mondat első betűje nagybetűs írás, és az összes többi betű kisbetűként marad.
  • "kisbetűs" a nagybetűk kizárásához a szövegből.
  • A "FŐBETÉT" az összes betű nagybetűvé tételével.
  • "Minden szót nagybetűvel ír" nagybetűvel írja be az egyes szavakat, és a többi betűt kisbetűvel hagyja.
  • "tOGGLE cASE" a két esetnézet közötti váltáshoz.

Bár az Excel nem szövegszerkesztő alkalmazás, néha előfordulhat, hogy módosítania kell az adott szöveg kis- és nagybetűit. Három Excel funkció létezik hasonló funkciók biztosítására. Ezek a függvények egyetlen argumentumot igényelnek, és átalakítják a megadott szöveg vagy hivatkozott cella szövegértékének esetét az alábbiak szerint.

  1. LOWER() függvény a nagybetűk kizárására.
  2. UPPER() függvény az összes betű nagybetűvé tételéhez.
  3. PROPER() függvény az egyes szavak első betűjének nagybetűs írásához.

Noha ebben a cikkben nem tárgyalnánk a Tooggle Case opciót, előfordulhat, hogy a Mondat eset opcióra szükség lehet az Excelben, és ezt részben úgy lehet elérni, hogy a meglévő függvényeket egyetlen mondatba ötvözi az alábbiak szerint.

Válassza az Eset megvalósítása Excel képletekkel lehetőséget.

A következő függvénykombinációkkal alkalmazhatja a Kiválasztás eset alkalmazását az Excel adott mondatára.

  1. Vegyük az adott szöveg első betűjét a LEFT () függvény segítségével, és alakítsuk nagybetűvé a UPPER () függvény segítségével:

    =UPPER(LEFT(A1,1))

  2. A maradék szöveget vegye a RIGHT () és a LEN () függvények kombinálásával, majd alakítsa át kisbetűvé a LOWER () függvény használatával:

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

  3. Végül összefűzze ezt a két eredményt a CONCAT () függvény használatával:

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

Ez átalakítja a szöveget mondat-esetté. Kipróbálhatja ezt az összes nagybetűs szöveggel is, amely az A2 cellában látható.

Mi van, ha egy cellában egynél több mondat van, amelyet módosítani szeretne mondat esetre?

Több mondat egy cellában.

Ennek egyik lehetősége lehet a VBA használata ennek az átalakításnak a végrehajtására.

SENTENCECASE() A felhasználó által definiált függvény felveszi az adott szöveget, feldolgozza a szöveget három írásjel (pont, kérdőjel és felkiáltójel) segítségével a több mondat megtalálásához, az egyes mondatok első betűjének nagybetűs írásához és az eredmény visszaadásához.

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()függvény egy segítő függvényt használ, amelyet splitAndTransform()a mondatok felosztásához hívnak meg, és az esetet az adott elválasztóval átalakítja. splitAndTransform()egy újrafelhasználható VBA függvény ebben a projektben, ezért külön segítő függvényként van megírva.

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 függvény egy másik helper függvényt használ, isPuncMarked()amely meghatározza, hogy az adott szöveg tartalmaz-e írásjelet a végén. Az isPuncMarked () függvény még akkor sem használja fel újra a modulban, hogy logikai értéket ad vissza, és a hívó függvény csak az általa visszaadott értékre vonatkozik, hanem annak működésére. Mindig jó gyakorlat ezt a logikát is elkülöníteni, hogy jobb olvashatóságot nyújtson a függő eljárásokban.

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

Itt az eredmény.

SENTENCECASE UDF eredmény.

Ideális esetben célszerű olyan eljárást megírni, amely figyelembe veszi a kiválasztott tartományt, és az egész tartalmat a Sentence Case használatával helyettesíti a felhasználó által definiált függvény helyett. Ezt úgy tehetjük meg, hogy hozzáadjuk a következő aleljárást a projekthez, amely a tömeges és állandó átalakítást alkalmazza.

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

érdekes cikkek...