【问题标题】:Converting a "RC" format to "A1" for use in a conditional format将“RC”格式转换为“A1”以用于条件格式
【发布时间】:2021-11-01 08:54:27
【问题描述】:

我编写了添加条件条件的代码 - 但是我想重用代码,我发现我需要根据我应用条件的范围的起始行来更改条件中的行号

所以这是我的代码,内联了一些关于问题的 cmets

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

【问题讨论】:

    标签: vba excel-formula


    【解决方案1】:

    罗斯

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

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

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

    【讨论】:

    • 嗯 - 我把它弄得更复杂了......在我这样做之前我确实尝试过 - 但我遇到了一个错误 - 所以我放弃了 - 我第一次可能语法错误 - 我刚刚删除了我的功能,果然可以正常工作
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 2020-01-28
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多