Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2015, 17:37   #11
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

if left(c.formula,1) = "=" then ... заменить
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 18:48   #12
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Cells.SpecialCells(xlCellTypeFormulas).Replace What:="1503", Replacement:="1506", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.05.2015, 19:44   #13
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, ребята.
У меня такой вопрос: можно ли узнать какой символ идет в формулах, которые имеют текст "1503", перед текстом "1503" и если это число от 0 до 9, тогда производить замену (мне нужно проводить замену только в формулах, которые ссылаются на другие файлы, а файлы имеют разные названия: P8081503, P0011503 и так далее). Может, есть способ узнать, какие именно формулы ссылаются на другие файлы?
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 20:19   #14
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

задача обростает подробностями)

Код:
dim cell as range, p as long

for each cell in Cells.SpecialCells(xlCellTypeFormulas).cells
  p = instr(cell, "1503")
  if p > 1 then
    if mid(cell,p-1,1) >= "0" and mid(cell,p-1,1) <= "9" then
      cell = replace(cell, "1503", "1506")
    end if
  end if
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 20:20   #15
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Вариант:
Код:
Dim c As Range
Application.DisplayAlerts = False
With Worksheets(1).Range("A1:GJ1600").SpecialCells(xlCellTypeFormulas)
    Set c = .Find("1503", LookIn:=xlFormulas)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            If c.Formula Like "*.csv*" Then
                c.Replace What:="1503", Replacement:="1506", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            End If
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Application.DisplayAlerts = True
почему-то не проходит (у меня формулы ссылаются на файлы .csv). Выдает ошибку 1004 "Невозможно получить свойство FindNext класса Range" (ошибку выдает на формуле, которая не имеет ссылок на другие книги)

Последний раз редактировалось Jaroslav; 18.05.2015 в 21:03.
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 20:39   #16
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, Игорь.

На строке:
Код:
p = InStr(cell, "1503")
выдает ошибку 13 Type mismatch

Последний раз редактировалось Jaroslav; 18.05.2015 в 20:55.
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 22:34   #17
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

странно...
но вообще речь шла о замене в формулах, видимо, правильно будет так:
Код:
  Dim cell As Range, p As Long
  For Each cell In Cells.SpecialCells(xlCellTypeFormulas).Cells
    p = InStr(cell.Formula, "1503")
    If p > 1 Then
      If Mid(cell.Formula, p - 1, 1) >= "0" And Mid(cell.Formula, p - 1, 1) <= "9" Then
        cell.Formula = Replace(cell.Formula, "1503", "1506")
      End If
    End If
  Next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.05.2015, 09:27   #18
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Игорь, так работает. Спасибо
Jaroslav вне форума Ответить с цитированием
Старый 19.05.2015, 09:57   #19
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

если нужно заменить "1503" на "1506" только в формулах, которые ссылаются на другие книги с расширением .csv, код будет следующим:
Код:
Dim cell As Range, p As Long
Worksheets(1).Select
For Each cell In Cells.SpecialCells(xlCellTypeFormulas).Cells
  If cell.Formula Like "*.csv*" Then
      cell.Replace What:="1503", Replacement:="1506", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
  End If
Next
Jaroslav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена значений kickout Microsoft Office Excel 2 23.04.2014 16:33
Замена значений Corban_Dallas Microsoft Office Excel 1 03.04.2013 09:08
замена значений в ListView TotKtoNado БД в Delphi 2 25.08.2011 18:54
замена значений DeDoK JavaScript, Ajax 5 24.05.2011 02:16
Вставка и замена в формулах в MS Word Mixasik Общие вопросы Delphi 1 22.03.2010 09:45