Я использую этот небольшой макрос для преобразования первой буквы вВерхний регистрв определенном диапазоне:
Sub TitleCase()
Dim rng As Range, cell As Range
Set rng = Range("D4:D999")
For Each cell In rng
If (cell.Value <> "") Then
cell.Value = UCase(Left(cell.Value, 1)) & Right(cell.Value, Len(cell.Value) - 1)
End If
Next cell
End Sub
Теперь мне нужно преобразовать любую букву после запятой ( ,
) вВерхний регистр. Как это может быть сделано?
решение1
Заменять:
cell.Value = UCase(Left(cell.Value, 1)) & Right(cell.Value, Len(cell.Value) - 1)
С:
comma = InStr(cell.Value, ",")
If comma <> 0 Then
cell.Value = Left(cell.Value, comma) & UCase(Mid(cell.Value, comma + 1, 1)) & Right(cell.Value, Len(cell.Value) - comma - 1)
End If
Он будет преобразован вверхний регистрбуква после первой запятой в строке.
Если у вас естьболее одной запятойна ячейке, то замените макрос на этот:
Sub TitleCase()
Dim rng As Range, cell As Range
Dim buffer() As String 'Creates an empty array
Set rng = Range("D4:D99")
For Each cell In rng
If (cell.Value <> "") Then
buffer = Split(StrConv(cell.Value, vbUnicode), Chr$(0)) 'split characters into array
ReDim Preserve buffer(UBound(buffer) - 1)
iscomma = False
changedstring = ""
For i = LBound(buffer) To UBound(buffer)
If iscomma = True Then
buffer(i) = UCase(buffer(i))
iscomma = False
End If
If buffer(i) = "," Then
iscomma = True
End If
changedstring = changedstring & buffer(i)
Next i
cell.Value = changedstring
End If
Next cell
End Sub
решение2
Использовать это:
Private Function convertTitleToUppercase(s As String)
Dim sSplit() As String: sSplit = Split(s, ",")
Dim tmp As String
Dim v As Variant: For Each v In sSplit
tmp = IIf(tmp = "", tmp, tmp & ",") & StrConv(v, vbProperCase)
Next v
convertTitleToUppercase = tmp
End Function
Пример:
Debug.Print convertTitleToUppercase("LANTERNE, FHIA, ANTIK MESSING")
Возврат:
Lanterne, Fhia, Antik Messing