Страницы: 1
RSS
Начинать предложения с заглавной буквы
 
Нужна пользовательская функция, меняющая регистр текста в ячейке в каждом предложении, начиная каждое предложение с заглавной буквы. То есть, первая буква текста в ячейке должна стать прописной, а также в словах после точки с пробелом и после кавычек. Может кто поделиться.
 
Цитата
zemfederal написал:
и после кавычек
а почему после кавычек?
 
В кавычках различного рода названия (фирм и т.п.), которые тоже должны начинаться с заглавной.
Изменено: zemfederal - 03.05.2020 18:22:55
 
"ооо рога и копыта", по-Вашему,  должно измениться на "Ооо рога и копыта"?
И не получится ли из "ООО Рога и Копыта" "Ооо рога и копыта"?
 
Нет. Общество с ограниченной ответственностью "Рога и копыта". Хотя бы так. Первое слово после кавычек в любом случае будет с заглавной.
 
Не учитывая кавычек, как вариант
Код
Function ПРОППРЕДЛ(TX$)
    Dim a, i&
    TX = LCase(TX)
    a = Split(TX, ". ")
    For i = 0 To UBound(a)
        a(i) = UCase(Left(a(i), 1)) & Mid(a(i), 2, 999)
    Next
    ПРОППРЕДЛ = Join(a, ". ")
End Function

А по кавычкам еще подумайте, как и что.
Изменено: Михаил Витальевич С. - 03.05.2020 18:33:46
 
Спасибо. Всё получилось. Сделал вот так:
Код
Function ПРОППРЕДЛ(TX$)
    
    Dim a, aa, i&
    a = Split(StrConv(TX, vbLowerCase), ". ") 'перевели всю строку в нижний регистр и разбили на подстроки по разделителю "точка с пробелом"
    For i = 0 To UBound(a)
        a(i) = UCase(Left(a(i), 1)) & Mid(a(i), 2, 999) 'перебрали подстроки, переведя первую букву каждой подстроки в верхний регистр
    Next
    aa = Join(a, ". ") 'собрали строку обратно
    
    aa = Split(aa, """")     'разбили на подстроки по разделителю "кавычки".
    For i = 0 To UBound(aa)
        aa(i) = UCase(Left(aa(i), 1)) & Mid(aa(i), 2, 999)
    Next
    ПРОППРЕДЛ = Join(aa, """")

End Function
Изменено: zemfederal - 03.05.2020 19:54:08
 
Миша, обрати внимание на StrConv: не придётся заморачиваться с Ucae и Left
Код
Txt = "общество"
Debug.Print StrConv(Txt, 3)
 
Юр, спасибо, посмотрел справку - это типа как ПРОПНАЧ() - преобразует каждое слово, а нужно только первое.
 
Цитата
Михаил Витальевич С. написал:
преобразует каждое слово, а нужно только первое.
Так ведь перебираем массив слов (предложение) и обрабатываем только нулевой элемент массива.
Просто полезная штуковина )
 
Вариант:
Код
Sub qqq()
Dim Txt As String, i As Long, Arr, Stroka As String
    Txt = "общество с ограниченной ответственностью"
    Arr = Split(Txt)
    Stroka = StrConv(Arr(0), 3)
    For i = 1 To UBound(Arr)
        Stroka = Stroka & " " & Arr(i)
    Next
    Debug.Print Stroka
End Sub

Или без цикла:
Код
Sub qq()
Dim Txt As String, Arr, Stroka As String
    Txt = "общество с ограниченной ответственностью"
    Arr = Split(Txt)
    Arr(0) = StrConv(Arr(0), 3)
     Stroka = Join(Arr, " ")
    Debug.Print Stroka
End Sub
Страницы: 1
Наверх