Можно ли использовать этот макрос для преобразования первой буквы после запятой в заглавную?

Можно ли использовать этот макрос для преобразования первой буквы после запятой в заглавную?

Я использую этот небольшой макрос для преобразования первой буквы вВерхний регистрв определенном диапазоне:

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

Связанный контент