Страницы: 1
RSS
VBA. Заменить текст во ВСЕХ ячейках КНИГИ (включая скрытые листы) текстовое значение на формулу.
 
Доброго времени суток, уважаемые люди!

Подскажите, пожалуйста, код, которым возможно осуществить операцию по замене ТЕКСТА, скажем, например «Информация» на ФОРМУЛУ «=2+2*2».
Операция необходимо совершить на всех листах книги ( включая скрытые ) во всех ячейках, содержание которых совпадает с искомым текстом ПОЛНОСТЬЮ. Регистр - неважен.
Спасибо!

upd:
Макрорекодер сообщаеТ следующее:
Код
    Cells.Replace What:="Информация за указанный период", Replacement:= _
        "=""Расход топлива за "" &  ТЕКСТ(ДАТАМЕС(0;$L$7);""ММММ"") & ""   "" & $L$9 & "" г.""" _
        , LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False

При повторном запуске, код не осуществляет никаких действий.
Изменено: falmrom - 30.08.2019 01:06:56
Улыбнись.
 
От того, что Вы замените просто текст на текст формулы, в ячейке формула не появится, в ячейке будет ТЕКСТ.
Читайте про .Find (.FindNext)
Код
Sub ReText()
Dim iSh As Worksheet
Dim iCl As Range
Dim iFrml$
iFrml = "=СЕГОДНЯ()"  'текст Вашей формулы
For Each iSh In Worksheets
    With iSh.UsedRange
        Set iCl = .Find("Информация за указанный период", LookIn:=xlValues)
        If Not iCl Is Nothing Then
            fAdrs = iCl.Address
            Do
                iCl.FormulaLocal = iFrml
                Set iCl = .FindNext(iCl)
                If iCl Is Nothing Then GoTo DoneFinding
            Loop While iCl.Address <> fAdrs
      End If
DoneFinding:
    End With
Next
End Sub
Изменено: Sanja - 29.08.2019 17:17:41
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
замените просто текст на текст формулы, в ячейке формула не появится
Не согласен. Пишем в ячейке "Информация" и
Код
Sub test()
  ActiveCell.Replace "Информация", "=2*2"
End Sub

Появляется формула. Метод Range.Replace производит замену текста в свойстве ячеек Formula, кстати, не обращая внимания на региональные настройки. Этот метод можно использовать и для диапазона скрытого листа.

Что касается #1, то при повторном применении в формуле ячейки уже не будет содержаться текст "Информация", соответственно, и замены не будет.
Изменено: sokol92 - 29.08.2019 18:37:16
Владимир
 
Цитата
sokol92 написал: Не согласен
Спасибо, не знал. Точнее не проверял :)  
Согласие есть продукт при полном непротивлении сторон
 
Мой любимый метод. Попробуйте, например, на заполненном листе (только НЕ сохраняйте): :)
Код
Sub test2()
  Cells.Replace Chr(1), ""
End Sub
Владимир
 
Sanja, спасибо!
Улыбнись.
 
sokol92, вау. Очистка всех данных листа  :idea:  а быстрее штатной - не проверяли?))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте, Алексей! Не проверял. :)  Для метода Replace символ Chr(1) в параметре What - что-то вроде символа подстановки "*".

А еще нужно знать, что метод Replace "игнорирует" текстовый формат ячейки и способен превратить текст в такой ячейке в число, дату или формулу.
Владимир
 
Владимир, приветствую вас!
Цитата
sokol92: нужно знать
это да - можно и косячнуть и во благо использовать (например, для преобразования чисел-как-текст). А ещё нужно помнить, что метод запоминает последние настройки, поэтому прописывать надо все  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх