У меня есть многочисленные ячейки по всему месту на листе, которые выглядят как =((E9-E8)/E8)
. Я хочу использовать первые два значения для этой новой формулы, (EXP((LN(E9/E8)/14.32))-1)
.
Как я могу изменить их все на новую формулу одним махом?
У меня есть многочисленные ячейки по всему месту на листе, которые выглядят как =((E9-E8)/E8)
. Я хочу использовать первые два значения для этой новой формулы, (EXP((LN(E9/E8)/14.32))-1)
.
Как я могу изменить их все на новую формулу одним махом?
Если формулы идентичны, вы можете использовать Find и Replace с помощью Match entire cell contents
checked и Look in: Formulas
. Выберите диапазон, перейдите в "Найти и заменить", введите свои записи и "Заменить все".
Или вы имеете в виду, что есть несколько формул с этой же формой, но разные ссылки на ячейки? Если это так, то один способ пойти - это регулярное выражение и замена. Регулярные выражения не встроены в Excel (или VBA), но могут быть доступны через библиотеку Microsoft VBScript Regular Expressions.
Следующая функция обеспечивает необходимую совместимость и возможность замены. Его можно использовать в подпрограмме, которая будет идентифицировать ячейки с формулами в указанном диапазоне и использовать формулы в качестве входных данных для функции. Для строк формул, которые соответствуют шаблону, который вы ищете, функция будет производить формулу замены, которая затем может быть записана обратно на рабочий лист.
Function RegexFormulaReplace(formula As String)
Dim regex As New RegExp
regex.Pattern = "=\(\(([A-Z]+\d+)-([A-Z]+\d+)\)/([A-Z]+\d+)\)"
' Test if a match is found
If regex.Test(formula) = True Then
RegexFormulaReplace = regex.Replace(formula, "=(EXP((LN($1/$2)/14.32))-1")
Else
RegexFormulaReplace = CVErr(xlErrValue)
End If
Set regex = Nothing
End Function
Чтобы функция работала, вам нужно добавить ссылку на библиотеку Microsoft VBScript Regular Expressions 5.5. На вкладке Developer
основной ленты выберите VBA
, а затем References
с главной панели инструментов. Прокрутите страницу вниз, чтобы найти ссылку на библиотеку и установите флажок рядом с ней.
Оказывается, решение было переключиться на R1C1 Cell Reference. Мой рабочий лист был структурирован таким образом, что каждая формула имела ту же структуру, что и другие ссылки. Однако удача всегда была одинаковой.
=((E9-E8)/E8)
стал
=((R[-1]C-R[-2]C)/R[-2]C)
и
(EXP((LN(E9/E8)/14.32))-1)
стал
=(EXP((LN(R[-1]C/R[-2]C)/14.32))-1)
В R1C1 Reference каждая формула была идентичной, поэтому поиск и замена не требовали подстановочных знаков. Спасибо тем, кто ответил!
Используйте команду find и replace, доступную с помощью ctrl + h, убедитесь, что вы просматриваете функции ячеек. Вы можете затем подстановочные знаки, чтобы учесть любые отклонения формулы. * для # подстановочных знаков,? для символьных символов charcter и ~? или ~ * для поиска? или *.
Я обычно обрабатываю это со вторым программным обеспечением. Для Windows я использую Notepad ++, для OS X я использую Sublime Text 2.