Страницы: 1
RSS
Вставка текста перед первым символом в диапазоне ячеек
 
Добрый день. Уважаемые знатоки Excel'я подскажите пожалуйста:  
 
можно ли вставить макросом текст, перед первым символом, в ячейках диапазона A1:A100.  
Причем вставить текст только в тех ячейках которые содержат текст, т.е. пустые ячейки останутся пустыми.
 
Можно.
 
Юрий М, могли бы подсказать как это сделать ?
 
Повредничаю сначала: Вы получили ответ в точном соответствии с заданным вопросом. Там не было "как", а ведь можно было обойтись и без дополнительных вопросов. Но по случаю субботы - держите код:  
Sub InsertTextBefore()  
Dim i As Long, sTxt As String  
sTxt = "Доп. текст"  
   For i = 1 To 100  
       If Not IsEmpty(Cells(i, 1)) Then Cells(i, 1) = sTxt & " " & Cells(i, 1)  
   Next  
End Sub
 
Без цикла.
Я сам - дурнее всякого примера! ...
 
Огромное спасибо, оба способа хорошие.  
 
Юрий М, а можно прибавить конструкцию Rows.AutoFit  
Columns.AutoFit, что бы столбики по ширине выравнивались. Пробовал просто вставить в цикл, и не получилось :(  
 
Sub InsertTextBefore()  
Dim i As Long, sTxt As String  
sTxt = "Доп. текст"  
For i = 1 To 100  
If Not IsEmpty(Cells(i, 1)) Then Cells(i, 1) = sTxt & " " & Cells(i, 1)  
Next  
Rows.AutoFit  
Columns.AutoFit  
End Sub
 
Серёга,  
ну, ты и хитёр!!!  
Классно придумал! И как допёр-то?  
Вот только в А1 значение стирается :(
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Всем спасибо, все отлично работает!
 
Юрий М, а можно ли сделать тоже самое, только вставить после последнего символа ?
 
{quote}{login=Alex_ST}{date=06.08.2011 09:30}{thema=}{post}  
({/post}{/quote}Леш, да такое рассматривалось на форуме неоднократно. Для больших диапазонов вообще бомба. А от циклов надо уходить, где только это возможно, запросами, фильтрами, массивами и т.д.
Я сам - дурнее всякого примера! ...
 
"А от циклов надо уходить, где только это возможно, запросами, фильтрами, массивами и т.д."  
 
KukLP, почему так считаешь?  
 
 
p.s.: Только от циклов все равно мы не куда на уйдем) (если только в пределах VBA). Ибо в алгоритме обработки подобных команд все равно содержится цикл, только на другом языке программирования или на языке программирования другого уровня низшего, например. [как мне кажется]
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Xxs}{date=06.08.2011 09:37}{thema=}{post}Юрий М, а можно ли сделать тоже самое, только вставить после последнего символа ?{/post}{/quote}  
Можно.
 
{quote}{login=Юрий М}{date=06.08.2011 10:19}{thema=Re: }{post}{quote}{login=Xxs}{date=06.08.2011 09:37}{thema=}{post}Юрий М, а можно ли сделать тоже самое, только вставить после последнего символа ?{/post}{/quote}  
Можно.{/post}{/quote}если осторожно ^_^
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Потому, что циклы - это долго. Тут не следует путать циклическую обработку на низком уровне и циклы при работе с листом. Даже массив в памяти обрабатывается на порядок быстрей, чем диапазон на листе, но и это в нек-рых случаях можно ускорить с помощью API функций  copymemory, movememory и т.д.
Я сам - дурнее всякого примера! ...
 
Юр, вредничаешь?:-)
Я сам - дурнее всякого примера! ...
 
Ну а сколько можно?! И предупреждал ведь! То перед символом, то после него, то ширину столбца. А потом последует ещё продолжение: а что, если у меня...
 
осторожненько разобрался:)
 
{quote}{login=KukLP}{date=06.08.2011 09:38}{thema=Re: }{post}{quote}{login=Alex_ST}{date=06.08.2011 09:30}{thema=}{post}  
({/post}{/quote}... такое рассматривалось на форуме неоднократно...{/post}{/quote}  
что-то я проглядел такой метод :(  
Надо будет в понедельник на работе сделать примерчик и к себе в копилочку положить
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Xxs, присмотритесь к строке:  
Cells(i, 1) = sTxt & " " & Cells(i, 1)  
и просто поменяйте местами "слагаемые". Попробуйте сами - потом ведь легче будет.
 
Юрий М, разобрался, но не множко попозже. Спасибо за ответ.
 
Сам всегда гавкаю на ТС:-)
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=06.08.2011 10:25}{thema=}{post}Потому, что циклы - это долго. Тут не следует путать циклическую обработку на низком уровне и циклы при работе с листом. Даже массив в памяти обрабатывается на порядок быстрей, чем диапазон на листе, но и это в нек-рых случаях можно ускорить с помощью API функций  copymemory, movememory и т.д.{/post}{/quote}  
Да я, собственно, и не путаю) Поскольку программированием на любительском уровне на языке VBA и программированием в целом я занимаюсь сравнительно недолго, то для меня в новинку были таки конструкции после (относительно неглубокого) изучения Asm'a: vArray=[Диапазон]. По сути тоже цикл)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
> от циклов надо уходить, где только это возможно  
 
Да, Серж, но заполнять весь диапазон, а потом очищать часть ячеек автофильтром - это ИМХО перебор :)  
Можно же формулу дописать:  
 
Sub www2()  
   With [a1:a100]
       .Formula = Evaluate("IF(" & .Address & "="""","""",""Текст ""&" & .Address & ")")  
   End With  
End Sub  
 
Кстати, важно: в результате работы макроса пустые ячейки остаются пустыми, а не содержат пустую строку (как если бы вставить эту формулу в другой столбец, потом скопировать и вставить значения). И то же происходит, если вместо  
.Formula =  
написать  
.Value =
 
Согласен, Леш и мелькало в голове, но формулы по определению не моя сильная сторона, поэтому сразу мышление переключилось на неформульный вариант:-) Стереотип, однако...
Я сам - дурнее всякого примера! ...
 
Скуки ради замерил время в трех вариантах. Странный результат - фильтром получилось быстрей, чем формулой. Я предполагал обратное...
Я сам - дурнее всякого примера! ...
 
Файл забыл.
Я сам - дурнее всякого примера! ...
 
М-да. И на размер не глянул:-)
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх