Страницы: 1
RSS
Найти и заменить фрагмент текста макросом
 
Добрый день!

Подскажите, если в ячейке "C1" встретится текст "ЛН" (кроме прочих знаков), то как его заменить на "Лампы накаливания" ?. То есть в ячейке может быть "664565ЛН524654654654+", но если встречается именно "ЛН", то вся встречная ячейка заменяется на "Лампы накаливания"

' поиск во всех возможных ячейках. Мой код, который надо изменить
Код
   Range("E3:E32").Select
  
      Cells.Replace What:="ЛН", _
        Replacement:="лампы накаливания", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
        :=False, SearchFormat:=False, ReplaceFormat:=False
 
В Excel есть не только кнопка "Заменить", но еще т макрорекордер. Это если справку читать лень.
 
О рекордере в курсе.  не ищет по вхождению части строки. Это если лень читать справку
 
Цитата
Алекс Семенов написал:
если в ячейке "C1" встретится текст "ЛН" (кроме прочих знаков), то как его заменить на "Лампы накаливания" ?
Вариант 1
Код
Sub Test1()
    If InStr(1, Range("C1").Text, "ЛН", vbTextCompare) > 0 Then Range("C1").Value = "Лампы накаливания"
End Sub

Вариант 2
Код
Sub Test2()
Dim Rng As Range, iCell As Range
    
    Set Rng = Range("E3:E32")
    For Each iCell In Rng
        If InStr(1, iCell, "ЛН", vbTextCompare) > 0 Then iCell = "Лампы накаливания"
    Next iCell
End Sub
Изменено: New - 07.04.2021 17:36:35
 
Цитата
Алекс Семенов написал: не ищет по вхождению части строки.
"Произведение" макрорекодера без купюр:
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Range("C1").Select
    Cells.Replace What:="ЛН", Replacement:="лампы", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

Находит текст ЛН и меняет Вашу строку на "Любые лампы- 22"

Если нужно было заменить весь текст - все то же самое, только vtyznm нужно с любыми символами справа и слева
Код
Replace What:="*ЛН*"
 
Гм... Огромное спасибо всем за помощь!!!
Жаль что лайки ставить нельзя
 
vikttur, В продолжение, а ели будет не ЛН, а вдруг ЛБ, как заменитьт на "Люминисцентные лампы"
Пробовал вот так:
Код
     Dim Rng As Range, iCell As Range
     
    Set Rng = Range("E7")
    For Each iCell In Rng
        If InStr(1, iCell, "ЛН", vbTextCompare) > 0 Then iCell = "Лампы накаливания"
    Next iCell
    
    
       
         Dim Rng As Range, iCell As Range
     
    Set Rng = Range("E7")
    For Each iCell In Rng
        If InStr(1, iCell, "LED", vbTextCompare) > 0 Then iCell = "Светодиодные лампы"
    Next iCell
Как только включаю вторую часть кода - ошибка. Ткните, если не трудно
Изменено: Алекс Семенов - 07.04.2021 19:34:12
 
Не надо использовать код из 7 сообщения  В сообщении 5 от vikttur все написано что нужно
Можно немного проще Замена ЛН на Лампы накаливания. Замена на всем листе
Код
Sub Макрос1()
 Cells.Replace "ЛН", "Лампы накаливания", xlPart
End Sub

Замена ЛБ на Люминисцентные лампы

Код
Sub Макрос2()
 Cells.Replace "ЛБ", "Люминисцентные лампы", xlPart
End Sub
Изменено: Евгений Смирнов - 07.04.2021 19:37:44
 
Евгений Смирнов,да я б с удовольствием, но это если кроме "ЛН" в ячейке ничего нет, а там вхождение этих букв в строку.: 465656ЛН46456 (если встречается ЛН, должно замениться на лампы накаливания), а в другой строке: вапвапLED565 (должно замениться на "светодиодные лампы")
 
Разобрался, всем спасибо, расходимся. Для всех таких же зеленых, как я :
Код
        Dim Rng As Range, iCell As Range
     
    Set Rng = Range("E7")
    For Each iCell In Rng
        If InStr(1, iCell, "ЛН", vbTextCompare) > 0 Then iCell = "Лампы накаливания"
         If InStr(1, iCell, "ЛБ", vbTextCompare) > 0 Then iCell = "Люминисцентные лампы"
    Next iCell
   
vikttur,Вам отдельное спасибо, очень помогли!
 
Алекс Семенов, написал
Цитата
Разобрался
Если Set Rng = Range("E7") занимает одну ячейку, то зачем делать цикл
Код
For Each iCell In Rng
 
Kuzmich,попробовал по Вашему совету - без цикла не работает.
 
Код
Sub Test()
     If InStr(1, Range("E7"), "ЛН", vbTextCompare) > 0 Then Range("E7") = "Лампы накаливания"
     If InStr(1, Range("E7"), "ЛБ", vbTextCompare) > 0 Then Range("E7") = "Люминисцентные лампы"
End Sub
Изменено: New - 07.04.2021 20:14:57
 
Код
If InStr(1, Range("E7"), "ЛН", vbTextCompare) > 0 Then Range("E7")= "Лампы накаливания"
         If InStr(1, Range("E7"), "ЛБ", vbTextCompare) > 0 Then Range("E7") = "Люминисцентные лампы"
 
В догонку той же темы:

кроме определения ламп там есть еще одна ячейка, где точно также надо определить кабинет/операторная и в зависимости от того, что было вписать6 Кабинет №1/операторная №2
Сделал так:
Код
' кабинет/операторная

   Dim Rng As Range, iCell As Range
 
 
  Set Rng = Range("B7")
      For Each iCell In Rng
      
 If InStr(1, iCell, "кабинет", vbTextCompare) > 0 Then iCell = "=""Р.м. кабинет"""
If InStr(1, iCell, "опер", vbTextCompare) > 0 Then iCell = "=""Р.м. операторная"""

   Next iCell




 ' тип ламп

  Dim Rng As Range, iCell As Range
     
    Set Rng = Range("E7")
    For Each iCell In Rng
        If InStr(1, iCell, "ЛН", vbTextCompare) > 0 Then iCell = "Лампы накаливания"
         If InStr(1, iCell, "ЛБ", vbTextCompare) > 0 Then iCell = "Люминисцентные лампы"
   If InStr(1, iCell, "LED", vbTextCompare) > 0 Then iCell = "Светодиодные лампы"
     If InStr(1, iCell, "светод", vbTextCompare) > 0 Then iCell = "Светодиодные лампы"

Next iCell
   Не работает, выдает ошибку. Хотя по отдельности эти куски куда работают
   
   
 
посмотрите выше моё сообщение или сообщение от Kuzmich и подумайте как исправить ваш код
Изменено: New - 07.04.2021 20:21:23
 
New,однако, пока что то не доходит. Дело в том что это разные строки. То есть надо заново делать активной другую ячейку и на этом моменте выдает ошибку.
 
Вся проблема в том, что вы ленитесь сделать нормальный пример в Excel файле, который бы отражал расположение ваших данных на листе.
Вы показали в вашем примере в файле одну ячейку, а так же в каждом вашем сообщение вы обрабатываете так же одну ячейку - вам и подсказывают, как написать макрос для одной ячейки. А потом через 10 сообщений вы пишите: ой, а строки-то у меня разные... то есть надо заново делать активной ячейку. Откуда взялись разные строки? В вашем примере текст записан только в одной ячейке, вы постоянно пишите в вашем коде тоже адрес одной ячейки... Я попытался вам показать как обрабатывать ряд ячеек ещё в самом первом моём сообщении, но вы упорно переписываете код на обработку только одной ячейки, а потом удивляетесь почему код не работает на других ячейках... Когда вы определитесь где у вас находятся данные (текст) в одной ячейке или в разных и сделаете нормальный файл-пример, тогда и можно будет что-то обсуждать.
А так я могу вам посоветовать выделять другую ячейку - не знаете как? вот так Range("B10").Select - только вам это не поможет...
Изменено: New - 07.04.2021 21:13:02
 
New, я пробовал выделить ячейку через Range("B7").Select  - все равно ошибка.
А насчет неполного примера - я не думал тревожить умы, думал одно решение приведут и я дальше сам додумаю. Но нет)))
Код
' кабинет/операторная 
   Dim Rng As Range, iCell As Range
  
  
  Set Rng = Range("B7").Select
      For Each iCell In Rng
       
 If InStr(1, iCell, "кабинет", vbTextCompare) > 0 Then iCell = "=""Р.м. кабинет"""
If InStr(1, iCell, "опер", vbTextCompare) > 0 Then iCell = "=""Р.м. операторная"""
 
   Next iCell
 
 
 
 
 ' тип ламп
 
  Dim Rng As Range, iCell As Range
      
    Set Rng = Range("E7")
    For Each iCell In Rng
        If InStr(1, iCell, "ЛН", vbTextCompare) > 0 Then iCell = "Лампы накаливания"
         If InStr(1, iCell, "ЛБ", vbTextCompare) > 0 Then iCell = "Люминисцентные лампы"
   If InStr(1, iCell, "LED", vbTextCompare) > 0 Then iCell = "Светодиодные лампы"
     If InStr(1, iCell, "светод", vbTextCompare) > 0 Then iCell = "Светодиодные лампы"
 
Next iCell
 
я пасс ) может другие коллеги вам помогут
 
Напишу еще один раз для непонятливых, а то New уже не выдержал
Код
Sub iReplace()
' кабинет/операторная
 If InStr(1, Range("B7"), "кабинет", vbTextCompare) > 0 Then Range("B7") = "Р.м. кабинет"
 If InStr(1, Range("B7"), "опер", vbTextCompare) > 0 Then Range("B7") = "Р.м. операторная"
 ' тип ламп
 If InStr(1, Range("E7"), "ЛН", vbTextCompare) > 0 Then Range("E7") = "Лампы накаливания"
 If InStr(1, Range("E7"), "ЛБ", vbTextCompare) > 0 Then Range("E7") = "Люминисцентные лампы"
 If InStr(1, Range("E7"), "LED", vbTextCompare) > 0 Then Range("E7") = "Светодиодные лампы"
 If InStr(1, Range("E7"), "светод", vbTextCompare) > 0 Then Range("E7") = "Светодиодные лампы"
End Sub
 
не помню уже, где достал код. я пользуюсь таким макросом. Код очень простой.
таблицы должны быть "умными". слева - где заменять, справа - чем заменять.  
 
Kuzmich,спасибо!, ArgentumTiger_7, макрос супер.
Страницы: 1
Наверх