Функция VBA, возвращающая первое слово, написанное в заглавной (прописной) буквы

Option Compare Binary
 
Function FirstProperCaseWord(ByVal txt$) As String
    ' возвращает первое слово, написанное с заглавной буквы в строке txt$
    txt$ = Replace(Replace(txt$, ",", " "), ".", " ")
    For Each word In Split(Application.Trim(txt$), " ")
        If Len(word) > 1 Then
            If StrConv(word, vbProperCase) = word Then
                If StrConv(word, vbUpperCase) <> word Then
                    FirstProperCaseWord = word: Exit Function
                End If
            End If
        End If
    Next
End Function

Пример использования:

Sub ПримерИспользования_FirstProperCaseWord()
    txt = "с. Нагутское, ул. Первомайская, д. 85"
    MsgBox FirstProperCaseWord(txt)
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Что-то пустое сообщение возвращает.

В VBA есть для этого специальная функция - StrReverse
Чтобы пользоваться ей на листе, можно сделать пользовательскую функцию:

Function Reverse(ByVal txt$) As String
   Reverse = StrReverse(txt$)
End Function

Формулы будут выглядеть так:
=reverse(A1)

Немного не по этой теме, но мне нужен переворот слова, советуют ReverseWord. Как включить?

администратор сайта: спасибо за совет. вроде получилось. в строке формул видно что впереди числа стоит ', но в текстовый файл сохраняет как надо-только 4 цифири.

Так попробуйте:

ActiveSheet.UsedRange.Replace "692-000", "'0692", xlWhole

МАСТЕР ОФФ: спасибо за ответ. первый вариант, к сожалению, не подходит-нужен именно ноль(критично. штрих-код). а второй-не получается-начинает формировать коммент.

Админ, ну чё ты так чайнегов гоняешь, это ж чистый траф?

А по сути:

ActiveSheet.UsedRange.Replace What:="692-000", Replacement:="0692", LookAt:=xlWhole, MatchCase:=True

замени 0 на O

ActiveSheet.UsedRange.Replace What:="692-000", Replacement:="O692", LookAt:=xlWhole, MatchCase:=True

либо замени " на '

Я не отвечаю на вопросы, заданные в комментах к первой попавшейся статье.

Для подобных вопросов есть форумы по Excel...

а подскажите, плиз, почему
ActiveSheet.UsedRange.Replace What:="692-000", Replacement:="0692", LookAt:=xlWhole, MatchCase:=True
упорно возвращает 692 а ноль сжирает?
пардон, что не по теме макроса

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
   __     _      _              ___  __  __
/ /_ | | __ | |__ _ __ |_ _| \ \/ /
| '_ \ | |/ / | '_ \ | '__| | | \ /
| (_) | | < | | | | | | | | / \
\___/ |_|\_\ |_| |_| |_| |___| /_/\_\
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.