Преобразование формата «RC» в «A1» для использования в условном формате

#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. Ну, я сделал это намного сложнее … Я попробовал это сделать до того, как сделал это — но я получил ошибку — поэтому я сдался — У меня, вероятно, был неправильный синтаксис в первый раз — я просто удалил свою функцию, и, конечно же, она работает