Добавление пробела перед второй заглавной буквой в ячейке
У меня есть лист 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 - это длина целого имени, то есть Смита, так что вы в конечном итоге "Джон Смит".