Добавление пробела перед второй заглавной буквой в ячейке

У меня есть лист Excel со столбцом имен, которые начинаются с заглавных букв имени и заглавной фамилии. как так ДжонСмит

Мне нравится знать, есть ли способ в Excel взять Джона Смита и сделать его Джоном Смитом. Пожалуйста помоги

Спасибо

3 ответа

Решение

Как уже предлагалось, вы можете использовать несколько формул, перечисленных в теме, на которую ссылается @Derrik, но я думаю, что они все выглядят очень длинными и громоздкими. Мой личный фаворит это:

=trim(REGEX.SUBSTITUTE(A1,"([A-Z])"," [1]"))

Для этого требуется Morefunc Addon (см. Ниже, он также имеет множество других полезных функций)


MOREFUNC ADDON

Лучшим ответом будет использование макросов в Excel.

Function AddSpaces(pValue As String) As String

Dim xOut As String
Dim iCounter As Integer
Dim xAsc As Variant

xOut = VBA.Left(pValue, 1)
For iCounter = 2 To VBA.Len(pValue)
   xAsc = VBA.Asc(VBA.Mid(pValue, iCounter, 1))
   If xAsc >= 65 And xAsc <= 90 Then

        If VBA.Mid(pValue, iCounter - 1, 2) = "ID" Then
        'StrComp(str1, str2, vbTextCompare)
            xOut = xOut & VBA.Mid(pValue, iCounter, 1)
        Else
            xOut = xOut & " " & VBA.Mid(pValue, iCounter, 1)
        End If
   Else
      xOut = xOut & VBA.Mid(pValue, iCounter, 1)
   End If
Next
AddSpaces = xOut
End Function

Первоначально не мой код, скопированный из других источников, изменил несколько переменных для поддержки явного объявления переменных.

По ссылке Дерика вы можете использовать эту формулу массива (это означает, что вы должны подтвердить ее с помощью Ctrl+ Shift+ Enter вместо просто Enter):

=MIN(IF(ISERROR(FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)),"",FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)))

Хотя я изменил его, чтобы начать со второго символа. Это даст вам позицию первой столицы, игнорируя первого персонажа. Так что, если C2 "ДжонСмит", это даст вам 5, потому что S находится на 5-й позиции в ячейке D2.

Теперь, когда вы знаете, где начинается фамилия, вы можете собрать полное имя вместе с пробелом, используя в E2:

=LEFT(C2,D2-1)&" "&RIGHT(C2,LEN(C2)-D2+1)

Это займет слева 5-1=4 символа, Джон, объединит его с пробелом, а фамилия будет правильной 9-5+1=5, поскольку 9 - это длина целого имени, то есть Смита, так что вы в конечном итоге "Джон Смит".

Другие вопросы по тегам