Страницы: 1
RSS
Нужен аналог Proper (ПРОПНАЧ), не реагирующий на спецсимволы, спецсимволы в тексте не должны учитываться как разделители
 
Д.день.
Проблема приведения текста к виду "все слова с заглавных".
Отдельными "словами" (и для формульного решения =ПРОПНАЧ(), и в VBA типа Application.Proper() ) будут в т.ч. наборы букв после спецсимволов.
Т.е. при оригинальном тексте ар'я старк,
получим Ар'Я Старк
а нужно Ар'я Старк

Как обойти спецсимволы, чтоб  не считались разделителями?
Возможно есть какие аналоги функций, или заменяющие алгоритмы?

Предпочтительней решение VBA.
Текущий код:
Код
Sub FirstUpper()

iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 For Counter = 2 To iLastRow
 Set curCell = Cells(Counter, 1)
 curCell.Activate
 If Len(curCell) Then
 ActiveCell.Offset(0, 2) = Application.Proper(ActiveCell)
 End If
 Next Counter

End Sub
 
Код
Sub FirstUpper()

iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 For Counter = 2 To iLastRow
 Set curCell = Cells(Counter, 1)
 curCell.Activate
 If Len(curCell) Then
 a = Split(curCell, " ")
 For i = 0 To UBound(a)
 a(i) = UCase(Left(a(i), 1)) & LCase(Mid(a(i), 2))
 Next
 ActiveCell.Offset(0, 4) = Join(a, " ")
 End If
 Next Counter

End Sub
По вопросам из тем форума, личку не читаю.
 
Многовато строк для Медведя.  :)

Код
Debug.Print StrConv("ар'я старк", vbProperCase)
Владимир
 
Добавлю костыль:
Изменено: Jack Famous - 08.07.2021 14:29:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
БМВ, sokol92, спасиб. Оба варианта Ок. буду тестить на полных массивах своих с полным кодом на скорость.
Jack Famous,в моем случае эти костыли не взлетят... Там сотни не постоянных хитросделанных людей используют (в т.ч. целенаправленно) все допустимые спецсимволы и дублируя буквы в своих именах.
Замены вперед-взад обдумывал уже.
Изменено: andylu - 08.07.2021 14:36:37
 
andylu, я просто для коллекции - не очень решение, конечно  :D
Если вариант от sokol92на всех примерах отработает корректно, то берите его, т.к. он должен быть в разы быстрее варианта от БМВ
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
sokol92 написал:
Многовато
4 - норм. остальные не трогал :-) но про StrConv и правда забыл или не знал или забил :-)
Цитата
Jack Famous написал:
то берите его, т.к. он должен быть в разы быстрее
особенно с учетом curCell.Activate  :D
Изменено: БМВ - 08.07.2021 14:40:26
По вопросам из тем форума, личку не читаю.
 
итог:
вариант от sokol92, не совсем всегда корректно
(я же упоминал что у меня люди целенаправленно искажают свои имена всеми возможными способами)  пример "Ҡоваљ Нӓдҽҗдӑ" становится "?оваљ Н?д??д?"
Вариант от БМВ, в таких ситуациях отрабатывает корректно.
Ну и учел замечания по перебору curCell.Activate + ActiveCell ;)

Всем спасибо.
Изменено: andylu - 09.07.2021 09:05:39
 
Цитата
andylu написал:
Нӓдҽҗдӑ" становится "?оваљ Н?д??д?"
Спасибо за информацию. Заносим функцию Strconv в "черный" список не поддерживающих юникод. Не зря БМВ она пришлась не по душе...

Off. Google Translate переводит мою фразу пока еще "blacklist the function".  :)  
Изменено: sokol92 - 09.07.2021 15:54:54
Владимир
Страницы: 1
Наверх