Неетху је поставио данашње питање у коментару на ИоуТубе-у:
Може ли макро променити текст у Реченица у Екцел-у?
Чудно је: Екцел зна ГОРЊЕ, ниже и правилно, али не подржава остале случајеве подржане у програму Ворд: Сентенце Цасе или тОГГЛЕ цАСЕ.
Изабрани случај текста може се лако променити у програму Мицрософт Ворд помоћу интерне функције која се зове Промени велико слово.

Можете једноставно кликнути:
- „Случај реченице“ како би се почетно слово реченице писало великим словом, а сва остала слова оставила малим словима.
- „малим словима“ да бисте из текста изузели велика слова.
- "ГЛАВНО" за писање великих слова великим словима.
- „Писање великих слова у сваку реч“ да бисте написали велико слово сваке речи, а остала слова оставили малим словима.
- „тОГГЛЕ цАСЕ“ за пребацивање између два приказа случаја.
Иако Екцел није апликација за обраду текста, понекад ћете можда морати да промените велика и мала слова датог текста. Постоје три Екцел функције које пружају сличне функције. Ове функције узимају један аргумент и трансформишу случај датог текста или вредности текста референциране ћелије како је објашњено у наставку.
LOWER()
функција за искључивање великих слова.UPPER()
функција за писање великих слова великим словима.PROPER()
функција за писање великог слова сваке речи.
Иако у овом чланку не бисмо разговарали о опцији Тооггле Цасе, можда ће бити потребна опција Цасе Цасе за употребу у програму Екцел, а то се делимично може постићи комбиновањем постојећих функција за једну реченицу као што је приказано у наставку.

Можете да користите следеће комбинације функција да бисте применили Селецт Цасе на дату реченицу у програму Екцел.
- Узмите прво слово датог текста употребом функције ЛЕВО () и трансформишите га у велика слова помоћу функције УППЕР ():
=UPPER(LEFT(A1,1))
- И узмите остатак текста комбиновањем функција ДЕСНО () и ЛЕН () заједно, и трансформишите га у мала слова помоћу функције ЛОВЕР ():
=LOWER(RIGHT(A1,LEN(A1)-1))
- На крају спојите ова два резултата помоћу функције ЦОНЦАТ ():
=CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))
Ово ће трансформисати текст у велика и мала слова. Ово можете да тестирате и за сав писани великим словима који је приказан у ћелији А2.
Шта ако у ћелији постоји више од једне реченице коју бисте желели да промените у Случај реченице?

Једна од опција за то би могла бити употреба ВБА за ову трансформацију.
SENTENCECASE()
кориснички дефинисана функција узима дати текст, обрађује текст за три интерпункцијска знака (тачка, упитник и ускличник) како би пронашла више реченица, написала велико слово сваке реченице и вратила резултат.
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()
функција користи помоћну функцију позвану splitAndTransform()
да дели реченице и трансформише случај датим граничником. splitAndTransform()
је ВБА функција за вишекратну употребу у овом пројекту, па је написана као посебна помоћна функција.
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()
помоћна функција користи другу помоћну функцију isPuncMarked()
која дефинише садржи ли дати текст интерпункцијски знак на крају. Чак и ако се поново не користи у модулу, функција исПунцМаркед () враћа логичку вредност, а функција позиваоца тиче се само вредности коју враћа, већ и начина на који функционише. Увек је добра пракса такође одвојити ову логику како би се обезбедила боља читљивост у зависним процедурама.
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
Ево резултата.

У идеалном случају било би добро да напишете процедуру која ће узети одабрани опсег и заменити сав садржај употребом Сентенце Цасе уместо кориснички дефинисане функције. То се може постићи додавањем следећег потпоступка у пројекат који ће применити масовну и трајну трансформацију.
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