Как работать с частью текста?

Программирование на Visual Basic for Applications
Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Как работать с частью текста?

Сообщение Deja-vu » 26.02.2005 (Сб) 20:25

Всем привет!
Как работать с любой частью текста в ячейках в Excel?
Кто нибудь подскажет?

У меня есть лист в Excel. На листе в ячейках A1:A100 написан разный текст.
Если в какой-то из ячеек три символа, начиная со второго символа равны значению "MMM", то надо поменять эти три символа на "TTT" в том же месте...
Как это сделать при помощи VBA?

Я так понимаю, надо использовать свойство "Characters", но что-то не получается :(

Private Sub CommandButton1_Click()
If Worksheets("Sheet1").Range("A1").Characters(2, 3) = "MMM" Then
Worksheets("Sheet1").Range("A1").Characters(2, 3) = "TTT"
End If
End Sub


VBasic в Excel мне говорит, что объект не поддерживает этот метод или свойство.???
ПС: извиняюсь за ламерство, я программирую роботов на работе, а там совсем другая область поэтому в VBA не шарю. :lol:
Буду признателен за помощь. Если что-то надо в инете найти, помогу. У меня неограниченный доступ по ADSL.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 26.02.2005 (Сб) 21:42

Поменять часть текста ячейки можно так:
Range("A1")=Replace(Range("A1"),"MMM","TTT")
На всём листе:
Cells.Replace "МММ", "ТТТ"
В диапазоне:
Range("A1:A100").Replace "МММ", "ТТТ"
Если "МММ" может встретится в другом месте текста ячейки и там его менять не надо, то:
If Mid(Range("A1"),2,3)="MMM" Then
Range("A1")=Mid(Range("A1"),1,1) & "TTT" & Mid(Range("A1"),5)
End If
Организуй только цикл по ячейкам.
PS Всё это можно сделать и на формулах листа.
Вообще-то я думаю форумы - для бессеребряников.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.02.2005 (Вс) 6:23

Этот пример заменит МММ независимо от его местонахождения...
Лучше что-то вроде
Код: Выделить всё
if instr(2,Worksheets("Sheet1").Range("A1").value,"MMM")=2 then mid$(Worksheets("Sheet1").Range("A1").value,2,3)="TTT"


А что касается скачивания - ну скачаешь, а передашь-то как? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 27.02.2005 (Вс) 18:54

Димитрий Спасибо за решение, но что-то не работает :( Поставил код в редактор, прикрепил его к кнопке, кликаю и ничего не происходит... Не меняется значение в A1. Может еще что-то надо добавить?
ПС: я понимаю, что для бессеребряников, но хотелось бы хоть как-то отблагодарить.

GSerg твой вариант тоже что-то не работает, VB говорит, что необходима переменная?? ...и выдает ошибку. :(

ПС: мужики, я понимаю, что отнимаю ваше время, но если чем-то можете помочь, то могу для вас найти лекарство или что-то ну очень редкое в сети... и на мыло послать. Или если хотите, могу зарегить вам мыло на гугле на 1 Гб, если у вас еще нет его. :)
ППС: спасибо также за некоторые решения по изменению сразу всех MMM в тексте на ТТТ, но задача состоит в том, чтобы можно было искать именно по статическому положению... начиная с третьего символа, или со второго...

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 27.02.2005 (Вс) 19:42

Мужики! Я тут немного помозговал и нашел решение. Выглядит вот так:

Private Sub CommandButton1_Click()
Dim Sheet1 As Worksheet, S As String
Set Sheet1 = Sheets("Sheet1")
S = Sheet1.Cells(1, 1).Text

If Mid(S, 3, 3) = "MMM" Then
Sheet1.Cells(1, 1).Value = Mid(S, 1, 2) & "TTT" & Mid(S, 6)
End If
End Sub

У меня правда появился другой вопрос... :roll: чтобы не оффтопить, я создам новую тему. Если найдете немного времени, помогите с ответом, плиз. В случае успеха, мое обещание всегда в силе. 8)

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 27.02.2005 (Вс) 22:24

Вообще то должно работать.
Может быть перепутана кирилица с латиницей?
Буквы такие.

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 27.02.2005 (Вс) 23:53

pashulka Спасибо за еще один вариант! Насчет ближневосточной страны... даже не знаю о какой стране Вы говорите... Я только русский, румынский и итальянский языки знаю... а это "востоком" даже не пахнет :)
Димитрий А у Вас работает?

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 28.02.2005 (Пн) 23:17

pashulka
Справедливости ради следует отметить, что Ваш вопрос я видел и на Российских форумах.
Неужели я такой знаменитый??? :lol: :wink:
Кстати, Димитрий, это всем известный Дмит, а он неработающие коды не опубликовывает.
Ну, скажем так "всем известный, кроме Deja-vu" :)

ПС: не исключаю, что у меня что-то косо пошло... Но выход найден, и это главное! Благодарю за помощь! 8)

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 01.03.2005 (Вт) 19:31

Deja-vu, ты зря думаешь что Дмит так себе, Дмит крутой парень. Ты не смотри что у него под ником написано "начинающий". Если ты догодался, то это указывает не на уровень твоих знаний, а на то сколько сообщений ты сделал. В плане знаний Дмит наверное уже "заканчивающий".

А с pashulka, лучше не спорить, на своём опыте убедился.
Hasta la vista, baby!

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 01.03.2005 (Вт) 20:41

Мужики! Да что вы говорите? Я же своей фразой сказал, что Дмит известен всем, кроме меня... и ничего больше. Где Вы увидели, что я думаю, что Дмит "так себе"? :?
На что указывает "начинающий" я есс-но знаю не понаслышке. :)
pashulka
Ну скажем так, Ваш ник и стиль общения мне запомнился
Я давал всего одно сообщение на www.vbnet.ru а также на www.vbkoders.net
Это по Вашему - "восточные сайты"? 8)
а вот высказывания насчёт Дмит это уже на грани святотатства, и как у Вас язык такое повернулся сказать ...
Ага, я посмел сказать, что незнаком, с участником Дмит... ай, какой же я святотатник... :lol:

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 02.03.2005 (Ср) 0:37

pashulka Форум, на который Вы дали ссылку, является моим "родным", я там модерировал, поэтому я его и не указал. Я провожу там большую часть своего времени.
А все-таки, хочу еще раз поблагодарить Вас и всех участников этого классного форума, кому не лень давать ответы! :wink:
Лично для меня, это огромная помощь. Иначе, сидел бы как пень, не зная, что делать. :lol:

Deja-vu
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 55
Зарегистрирован: 02.11.2004 (Вт) 22:02

Сообщение Deja-vu » 02.03.2005 (Ср) 21:45

pashulka Спасибо за пример! Однако, я и не думал, что в VB так много способов сделать одно действие... 8)

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 02.03.2005 (Ср) 21:57

Я ж тебе говорил, pashulka просто так тебя не оставит.
Hasta la vista, baby!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList