Wielkość liter w zdaniach w programie Excel - porady dotyczące programu Excel

Neethu zadała dzisiejsze pytanie w komentarzu na YouTube:

Czy makro może zmienić tekst na wielkość liter w zdaniu w programie Excel?

To dziwne: Excel zna UPPER, Lower i Right, ale nie obsługuje innych przypadków obsługiwanych przez Word: Sentence Case lub tOGGLE cASE.

Wybraną wielkość liter można łatwo zmienić w programie Microsoft Word za pomocą wewnętrznej funkcji o nazwie Zmień wielkość liter.

Zmień opcje poleceń w programie Microsoft Word.

Możesz po prostu kliknąć:

  • „Wielkość zdania”, aby pierwsza litera zdania była wielka, a wszystkie pozostałe litery były małe.
  • „małe litery”, aby wykluczyć wielkie litery z tekstu.
  • „WIELKIE LITERY”, aby wszystkie litery były wielkie.
  • „Każde słowo wielką literą” zamienia pierwszą literę każdego słowa wielką literą, a pozostałe pozostawia małe.
  • „TOGGLE CASE”, aby przełączać się między dwoma widokami przypadku.

Chociaż Excel nie jest aplikacją do edycji tekstu, czasami może zajść potrzeba zmiany wielkości liter w danym tekście. Istnieją trzy funkcje programu Excel zapewniające podobną funkcjonalność. Te funkcje pobierają pojedynczy argument i przekształcają wielkość liter w podanym tekście lub wartości tekstowej komórki, do której się odwołuje, jak wyjaśniono poniżej.

  1. LOWER() funkcja wykluczająca wielkie litery.
  2. UPPER() funkcja, aby wszystkie litery były wielkie.
  3. PROPER() funkcja, aby rozpocząć wielką literę każdego słowa.

Chociaż nie omawialiśmy opcji Tooggle Case w tym artykule, opcja Sentence Case może być konieczna do użycia w programie Excel, a można to częściowo osiągnąć, łącząc istniejące funkcje dla jednego zdania, jak pokazano poniżej.

Wybierz implementację przypadku za pomocą formuł programu Excel.

Możesz użyć następujących kombinacji funkcji, aby zastosować opcję Wybierz wielkość liter do danego zdania w programie Excel.

  1. Weź pierwszą literę podanego tekstu za pomocą funkcji LEFT () i przekształć ją na wielką, używając funkcji UPPER ():

    =UPPER(LEFT(A1,1))

  2. Następnie weź resztę tekstu, łącząc funkcje RIGHT () i LEN (), i przekształć go w małe litery przy użyciu funkcji LOWER ():

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

  3. Na koniec połącz te dwa wyniki za pomocą funkcji CONCAT ():

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

Spowoduje to przekształcenie tekstu w przypadek zdania. Możesz również przetestować to dla całego tekstu pisanego wielkimi literami, który jest wyświetlany w komórce A2.

A co, jeśli w komórce jest więcej niż jedno zdanie, które chcesz zmienić na przypadek zdania?

Wiele zdań w komórce.

Jedną z opcji, aby to zrobić, może być użycie VBA do wykonania tej transformacji.

SENTENCECASE() Funkcja zdefiniowana przez użytkownika pobiera podany tekst, przetwarza tekst pod kątem trzech znaków interpunkcyjnych (kropki, znaku zapytania i wykrzyknika), aby znaleźć wiele zdań, zamienia pierwszą literę każdego zdania na wielką literę i zwraca wynik.

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()funkcja używa funkcji pomocniczej wywoływanej splitAndTransform()do dzielenia zdań i przekształcania wielkości liter według podanego ogranicznika. splitAndTransform()jest funkcją VBA wielokrotnego użytku w tym projekcie, więc została napisana jako osobna funkcja pomocnicza.

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()funkcja pomocnicza używa innej funkcji pomocniczej o nazwie, isPuncMarked()która określa, czy dany tekst zawiera na końcu znak interpunkcyjny. Nawet jeśli nie jest ponownie wykorzystywana w module, funkcja isPuncMarked () zwraca wartość logiczną, a funkcja wywołująca zajmuje się tylko wartością, którą zwraca, ale jak działa. Dobrą praktyką jest również oddzielenie tej logiki, aby zapewnić lepszą czytelność w procedurach zależnych.

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

Oto wynik.

Wynik SENTENCECASE UDF.

W idealnym przypadku dobrym pomysłem byłoby napisanie procedury, która przejmie wybrany zakres i zastąpi całą zawartość za pomocą funkcji Zdanie Case zamiast funkcji zdefiniowanej przez użytkownika. Można to zrobić, dodając do projektu następującą procedurę podrzędną, która zastosuje masę i trwałe przekształcenie.

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

Interesujące artykuły...