将"RC"格式转换为"A1"以用于条件格式



我已经编写了添加条件条件的代码-但是我想重用代码,我发现我需要根据将条件应用于

的范围的起始行更改条件中的行号这是我的代码,内联了一些问题的注释

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.row如果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.cells(1,1)和恢复它可以触发重新计算和可能的错误与丢失数据的结果

所以我的问题是,有没有人有办法做到这种转换从RC格式到正常格式?

作为对我正在做的事情的解释,这是为了当一列中的值从一行更改到下一行时,条件格式在行的所有单元格之间绘制一条线

With fmtc.Borders(xlBottom)
.LineStyle = xlContinuous
.Color = -16777024
.TintAndShade = 0
.Weight = xlThin
End With

Ross

您可以使用ConvertFormula函数从R1C1转换为A1,反之亦然,但我不确定您是否真的需要它。

这将工作,因为公式可以使用A1或R1C1表示法。

Set fmtc = RG.FormatConditions.Add(Type:=xlExpression, Formula1:="=RC6<>R[+1]C6")

最新更新