Изречение в Excel - Съвети за Excel

Neethu зададе днешния въпрос в коментар в YouTube:

Може ли макрос да промени текста на Sentence Case в Excel?

Странно е: Excel познава ГОРНО, долно и правилно, но не поддържа останалите случаи, поддържани от Word: Sentence Case или tOGGLE cASE.

Избраният регистър на текста може лесно да бъде променен в Microsoft Word с помощта на вътрешната функция, наречена Change Case.

Промяна на командните опции в Microsoft Word.

Можете просто да щракнете:

  • „Case Sentence“, за да се напише първата буква на изречение с главна буква, а всички останали букви да се оставят с малки букви.
  • „малки букви“, за да изключите главни букви от текста си.
  • "UPPERCASE" за изписване с главни букви на всички букви.
  • „Капитализиране на всяка дума“, за да се напише първата буква на всяка дума, а останалите букви се оставят с малки букви.
  • "tOGGLE cASE" за превключване между два изгледа на случая.

Въпреки че Excel не е приложение за текстообработка, понякога може да се наложи да промените регистъра на дадения текст. Има три функции на Excel, които осигуряват подобна функционалност. Тези функции вземат единичен аргумент и преобразуват случая на предоставения текст или текстовата стойност на препратената клетка, както е обяснено по-долу.

  1. LOWER() функция за изключване на главни букви.
  2. UPPER() функция за изписване с главни букви на всички букви.
  3. PROPER() функция за изписване с главна буква на първата буква на всяка дума.

Въпреки че не бихме обсъждали опцията Tooggle Case в тази статия, може да е необходима опция Sentence Case, която да се използва в Excel, и това може да бъде частично постигнато чрез комбиниране на съществуващите функции за едно изречение, както е показано по-долу.

Изберете Реализация на случай с формули на Excel.

Можете да използвате следните функционални комбинации, за да приложите Select Case към дадено изречение в Excel.

  1. Вземете първата буква от дадения текст, като използвате функцията LEFT () и я преобразувайте в главни, като използвате функцията UPPER ():

    =UPPER(LEFT(A1,1))

  2. И вземете останалата част от текста, като комбинирате функциите RIGHT () и LEN () заедно, и го преобразувайте в малки букви, като използвате функцията LOWER ():

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

  3. Накрая свържете тези два резултата, като използвате функцията CONCAT ():

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

Това ще превърне текста в случай на изречение. Можете също да тествате това за целия текст с главни букви, който е показан в клетка А2.

Ами ако в клетка има повече от едно изречение, което искате да промените на Case Sentence?

Множество изречения в клетка.

Една от опциите за това може да бъде използването на VBA за извършване на тази трансформация.

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()е многократно използвана VBA функция в този проект, така че е написана като отделна помощна функция.

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 функция използва друга помощна функция, наречена, isPuncMarked()която определя дали даден текст съдържа препинателен знак в края. Дори да не се използва повторно в модула, функцията 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

Ето резултата.

Резултат от СДС.

В идеалния случай може да е добра идея да напишете процедура, която ще вземе избрания диапазон и да замени цялото съдържание, като използва Sentence Case вместо потребителска функция. Това може да се направи чрез добавяне на следната подпроцедура в проекта, която ще приложи масовото и постоянно преобразуване.

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

Интересни статии...