Ниже формула может работать для вас:
=SUBSTITUTE(SUBSTITUTE(PROPER(SUBSTITUTE(SUBSTITUTE(LOWER(A1),". ","9z9")," ","zxz")),"9Z9",". "),"zxz"," ")
Это в основном SUBSTITUTE
с периодами и пробелами с 3-мя символьными строками, чтобы обмануть код PROPER
, как если бы каждое предложение состояло только из одного слова. А затем повторно SUBSTITUTE
строки с периодами и пробелами.
Источник .
РЕДАКТИРОВАТЬ: После предупреждения @chronocidal я понял, что формула не может обрабатывать уже существующие заглавные буквы, так как она в основном строчная все в самом начале. Похоже, сейчас нам нужно решение с пользовательской формулой.
Когда указанный ниже код вводится в модуль в файле Excel. Мы сможем использовать пользовательскую формулу sCase
для достижения того, что нам нужно. Кредиты идут на здесь для этого решения.
Public Function sCase(ByRef strIn As String) As String
Dim bArr() As Byte, i As Long, i2 As Long
If strIn = vbNullString Then Exit Function
Let bArr = strIn
Select Case bArr(0)
Case 97 To 122
bArr(0) = bArr(0) - 32
End Select
For i = 2 To UBound(bArr) Step 2
Select Case bArr(i)
Case 105
If Not i = UBound(bArr) - 1 Then
Select Case bArr(i + 2)
Case 32, 33, 39, 44, 46, 58, 59, 63, 148, 160
If bArr(i - 2) = 32 Then _
bArr(i) = bArr(i) - 32
End Select
ElseIf bArr(i - 2) = 32 Then _
bArr(i) = bArr(i) - 32
End If
Case 33, 46, 58, 63
For i2 = i + 2 To UBound(bArr) Step 2
Select Case bArr(i2)
Case 97 To 122
bArr(i2) = bArr(i2) - 32
i = i2: Exit For
End Select
Select Case bArr(i2)
Case 32, 33, 46, 63, 160
Case Else
i = i2: Exit For
End Select
Next
End Select
Next
sCase = bArr
End Function