Страницы: 1
RSS
Смена регистра первой буквы первого слова в ячейке
 
Доброго времени суток. Проблема вот какая: Надо сменить первую букву в ячейке, остальные не трогать. Знаю что есть такие функции
ПРОПИСН - ДЕЛАЕТ ТАК
ПРОПНАЧ - Делает Так
СТРОЧН - делает так
А надо, чтоб как в обычном предложении: Делал так. (Мне просто обработать надо в таком режиме листов 250 по 200 строк, вручную паутиной покроюсь делать)
Может скрывается от меня эта функция? Жду помощи! (Excel 2013).  
 
Вам же небось на месте надо менять. Это только макросом.
Я сам - дурнее всякого примера! ...
 
добрый вечер,как вариант так,кнопка test,для повтора скопировать данные с листа Лист2

 
Код
Sub test()
  Dim t$: t = Range("A1")
Range("A1") = Replace(t, Mid(t, 1, 1), UCase(Mid(t, 1, 1)))
End Sub
Изменено: sv2013 - 20.08.2016 00:01:47
 
Код
=ПРОПНАЧ(ЛЕВСИМВ(A1;1))&ПРАВСИМВ(A1;ДЛСТР(A1)-1)
 
добавил функцию в ячейку C1
Код
Function uuu$(t$)
    With CreateObject("VBScript.RegExp"): .Pattern = "^."
        uuu = .Replace(t, UCase(.Execute(t)(0)))
    End With
End Function 
Изменено: sv2013 - 20.08.2016 00:30:04
 
sv2013
Набрал в А1 строку от дождя потемнели кусты
Запустил макрос, получил
От дОждя пОтемнели   кусты
 
добрый вечер,Kuzmich, добавил кнопку макроса test1,соответствующего функции uuu,предложите свой вариант для разнообразия.
 
sv2013
Сергей!
Я про макрос Test, пытаюсь понять почему выдает такой результат.
Он меняет не только первую букву, но и все буквы в строке, соответствующие первой
 
Цитата
Kuzmich написал: пытаюсь понять почему выдает такой результат.
Как sv2013 попросил, так и именяет :)
Replace(t, Mid(t, 1, 1), UCase(Mid(t, 1, 1))) - в строке t заменить символ Mid(t, 1, 1) на этот же символ, но с большой буквы. Меняем ведь не символ на первой позиции, а во всем тексте такой же символ, как и на первой позиции.
Правильно:
Код
Range("A1").Value = UCase(Left(t, 1)) & Mid(t, 2)
 
Мой вариант
Код
Sub test()
Dim t$: t = Range("A1")
  Mid(t, 1, 1) = UCase(Mid(t, 1, 1))
  Range("A1") = t
End Sub
 
добавил еще вариант макроса,кнопка test2
Код
Sub test2()
    Dim z, i&
    With CreateObject("ScriptControl")
        .Language = "JScript"
        .AddCode "function g(t){return t.replace(/^[а-яё]/m,function(t1){return t1.toUpperCase()})}"
        z = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
        For i = 1 To UBound(z)
             z(i, 1) = .Run("g", z(i, 1))
        Next
       Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value = z
    End With
End Sub
Изменено: sv2013 - 20.08.2016 01:45:59
 
sv2013, зачем плодить сообщения с файлами, в которых дублируется код? Можно же заменить файл в предыдущем сообщении.
зайдет человек в тему, будет открывать кучу файлов, Удивляться одинаковым макросам, возмущаться и поминать Вас нехорошим словом.
Не нужно мусорить.
 
Регистр
 
Цитата
Kuzmich написал:
Он меняет не только первую букву, но и все буквы в строке, соответствующие первой
Володь, replace нужны еще аргументы. Их есть у него :) Так заменит только первую:
Код
Replace(t, Mid(t, 1, 1), UCase(Mid(t, 1, 1)), 1, 1)
Изменено: kuklp - 20.08.2016 09:19:34 (Картинка)
Я сам - дурнее всякого примера! ...
 
Огромное спасибо всем откликнувшимся (поминаю всех только хорошими словами  :) ) ! Решила с помощью макроса sv2013 !
Свой вопрос решен, на подумать: меняет только русский текст, английскую раскладку не хочет :) (мне это не нужно было, просто заметила)    
 
Цитата
Ponk написал: меняет только русский текст
Замените:
Код
[а-яё]
на:
Код
[а-яёa-z]

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
добавил,для диапазона в столбце A,как в вышеуказанном файл-примере, вариант вместо test1 test3,с учетом английских букв.

 
Код
Sub test3()
  Dim t$: z = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
 With CreateObject("VBScript.RegExp"): .Pattern = "^[a-zа-яё]"
 For i = 1 To UBound(z)
       z(i, 1) = .Replace(z(i, 1), UCase(.Execute(z(i, 1))(0)))
       Next
    End With
    Range("A1").Resize(UBound(z), 1).Value = z
End Sub
Изменено: sv2013 - 20.08.2016 10:43:00
 
В свое время делал нечто подобное для своей надстройки. И хочу заметить: если в строке будет более одного предложения(например "мама мыла раму. папа смотрел телевизор. собака играла в мяч."), то в верхний регистр будет переведена только первая буква первого предложения. Под предложениями, естественно, подразумевается то, что разделено точками.
Конечно, не факт, что это нужно автору - таких требований не было. Но для тех, кто вдруг так же решит использовать эту функцию повод для размышления :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Удивительно. В таком всемогущем Экселе нет возможности сделать регистр Как в предложениях обычной формулой, типа (=СТРОЧН(A1)). То есть, все буквы строчные, кроме первой. И без макроса. То есть, начало предложения, перед точкой с пробелом (концом предыдущего предложения) - заглавная буква, а дальше - строчные.
Изменено: Excaz - 29.09.2020 09:39:41
 
Excaz, а что именно сложно в формуле из поста за нумером 4?
Вот горшок пустой, он предмет простой...
 
Цитата
Excaz: В таком всемогущем Экселе
а вы не удивляетесь тому, что монтировать видео в нём тоже не очень удобно?
Excel не программа для вёрстки текста и свои задачи выполняет отлично
Цитата
Ponk (в 2016ом): Смена регистра первой буквы первого слова в ячейке
=ПРОПИСН(ЛЕВСИМВ(G8;1))&ПСТР(G8;2;ДЛСТР(G8)-1)
Изменено: Jack Famous - 29.09.2020 09:48:34
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
В 4-м посте =ПРОПНАЧ(ЛЕВСИМВ(A1;1))&ПРАВСИМВ(A1;ДЛСТР(A1)-1) дает все заглавные буквы. Впрочем, я сам уже догадался.
Как в предложениях дает
=ПРОПИСН(ЛЕВСИМВ(A1;1))&ПРАВСИМВ(СТРОЧН(A1);ДЛСТР(A1)-1)
Правда, он подходит лишь для одного предложения и не учитывает начало (с заглавной буквы) следующего предложения перед которым, как правило, точка пробел.
Страницы: 1
Наверх