Neethu a pus întrebarea de astăzi într-un comentariu pe YouTube:
Poate o macrocomandă să schimbe textul în frază în Excel?
Este ciudat: Excel știe SUPERIOR, mai jos și corect, dar nu acceptă celelalte cazuri acceptate de Word: Sentence Case sau tOGGLE cASE.
Carcasa text selectată poate fi modificată cu ușurință în Microsoft Word utilizând funcția internă numită Casă schimbare.

Puteți pur și simplu să faceți clic pe:
- „Caz de propoziție” pentru a scrie cu majusculă prima literă a unei propoziții și pentru a lăsa toate celelalte litere ca minuscule.
- „minusculă” pentru a exclude majuscule din text.
- „MAJUSCU” pentru a scrie cu majusculă toate literele.
- „Scrieți cu majuscule fiecare cuvânt” pentru a scrie cu majusculă prima literă a fiecărui cuvânt și lăsați celelalte litere cu litere mici.
- „TOGGLE cASE” pentru a comuta între două vizualizări de cazuri.
Deși Excel nu este o aplicație de procesare a textului, uneori este posibil să fie nevoie să schimbați majusculele textului dat. Există trei funcții Excel pentru a oferi funcționalități similare. Aceste funcții acceptă un singur argument și transformă cazul textului furnizat sau a valorii textului celulei de referință, așa cum se explică mai jos.
LOWER()
funcție pentru a exclude litere mari.UPPER()
funcție pentru a scrie cu majusculă toate literele.PROPER()
funcție pentru a scrie cu majusculă prima literă a fiecărui cuvânt.
Deși nu vom discuta opțiunea Comutare caz în acest articol, opțiunea Caz frază ar putea fi necesară pentru a fi utilizată în Excel, iar acest lucru poate fi realizat parțial combinând funcțiile existente pentru o singură propoziție, așa cum se arată mai jos.

Puteți utiliza următoarele combinații de funcții pentru a aplica Select Case la o propoziție dată în Excel.
- Luați prima literă a textului dat folosind funcția LEFT () și transformați-o în majusculă utilizând funcția UPPER ():
=UPPER(LEFT(A1,1))
- Și luați restul textului combinând funcțiile RIGHT () și LEN () împreună și transformați-l în minuscule folosind funcția LOWER ():
=LOWER(RIGHT(A1,LEN(A1)-1))
- În cele din urmă concatenați aceste două rezultate utilizând funcția CONCAT ():
=CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))
Aceasta va transforma textul în caz de propoziție. De asemenea, puteți testa acest lucru pentru tot textul cu majusculă care este afișat în celula A2.
Ce se întâmplă dacă există mai mult de o singură propoziție într-o celulă pe care doriți să o schimbați în caz de sentință?

O opțiune pentru a face acest lucru ar putea fi utilizarea VBA pentru a face această transformare.
SENTENCECASE()
funcția definită de utilizator ia textul dat, procesează textul pentru trei semne de punctuație (punct, semn de întrebare și punct de exclamare) pentru a găsi propozițiile multiple, cu majusculă prima literă a fiecărei propoziții și pentru a returna rezultatul.
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()
Funcția folosește o funcție de ajutor numită splitAndTransform()
pentru a împărți propoziții și pentru a transforma cazul cu delimitatorul dat. splitAndTransform()
este o funcție VBA reutilizabilă în acest proiect, deci este scrisă ca o funcție de ajutor separată.
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()
funcția helper utilizează o altă funcție helper numită isPuncMarked()
care definește dacă textul dat conține un semn de punctuație la sfârșit. Chiar și nu este reutilizat în modul, funcția isPuncMarked () returnează o valoare booleană, iar funcția apelantului se referă doar la valoarea pe care o returnează, dar la modul în care funcționează. Este întotdeauna o bună practică să separați și această logică pentru a asigura o mai bună lizibilitate în procedurile dependente.
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
Iată rezultatul.

În mod ideal, ar putea fi o idee bună să scrieți o procedură care să ia intervalul selectat și să înlocuiți tot conținutul folosind Sentence Case în loc de o funcție definită de utilizator. Acest lucru se poate face prin adăugarea următoarei subproceduri în proiect care va aplica masa și transformarea permanentă.
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