#vba #excel-formula
Вопрос:
Я написал код, который добавляет условное условие, однако я хочу повторно использовать код, и я нахожу, что мне нужно изменить номера строк в условии на основе начальной строки диапазона, к которому я применяю условия
Итак, вот мой код со встроенными комментариями по проблеме
Dim RG As Range, fmtc As FormatCondition
Set RG = WS.UsedRange
Я хочу, чтобы диапазон начинался с строки 3 — это была строка 2
Set RG = Range(RG.Cells(3, 1), RG.Cells(RG.Rows.Count, RG.Columns.Count))
Но теперь это означает, что я должен увеличить числа в следующем (т. Е. от 2 до 3 и от 3 до 4)
Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, Formula1:="=$f2<>$f3")
так что это становится
Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, Formula1:="=$f3<>$f4")
Но это зависит от строки rg.
Если бы Excel поддерживал это, я бы использовал следующее, поскольку на него не влияет строка, с которой начинается RG
Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, FormulaRC1:="=RC6<>R[ 1]C6")
Я рассмотрел , написал и протестировал следующее
Function RCtoFN(Argrg As Range, rc As String) As String
Dim formsafe As String, rg As Range
Set rg = Argrg.Cells(1, 1)
formsafe = rg.Formula
rg.FormulaR1C1 = rc
RCtoFN = rg.Formula
rg.Formula = formsafe
End Function
Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, Formula1:=RCtoFN(rg,"=RC6<>R[ 1]C6"))
Похоже, это работает, но мне это не нравится из-за необходимости сохранять формулы в rg.ячейках(1,1) и восстанавливать их, что может вызвать перерасчеты и, возможно, ошибки в результате потери данных
Итак, мой вопрос в том, есть ли у кого-нибудь способ выполнить это преобразование из формата RC в обычный формат?
В качестве объяснения того , что я делаю, это делается для того, чтобы условный формат проводил линию между всеми ячейками строк, когда изменение значения в одном столбце изменяется от одной строки к другой
With fmtc.Borders(xlBottom)
.LineStyle = xlContinuous
.Color = -16777024
.TintAndShade = 0
.Weight = xlThin
End With
Ответ №1:
Росс
Вы можете конвертировать из R1C1 в A1 или наоборот, используя эту ConvertFormula
функцию, но я не уверен, что она вам действительно нужна.
Это будет работать, так как формула может использовать обозначения A1 или R1C1.
Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, Formula1:="=RC6<>R[ 1]C6")
Комментарии:
1. Ну, я сделал это намного сложнее … Я попробовал это сделать до того, как сделал это — но я получил ошибку — поэтому я сдался — У меня, вероятно, был неправильный синтаксис в первый раз — я просто удалил свою функцию, и, конечно же, она работает