【问题标题】:Convert only a fraction of formula to absolute reference from relative reference仅将公式的一部分从相对参考转换为绝对参考
【发布时间】:2016-10-25 15:33:36
【问题描述】:

首先,如果这是一个愚蠢的问题,我深表歉意,但我无法在网上任何地方找到答案。我有一个问题要问任何熟悉使用 vba 将相对公式更改为绝对公式的人。

我现在的问题是,我的绝对公式是通过计算其他列(C 列)的不同单元格条件的行差异来确定的,因为我使用 vba 在列(B 列)中输入了多个公式。因此,我想要实现的绝对公式是不可预测的,并且在不断变化。

   Set Rng = Range(Cells(2, 3), Cells(lastrow, 3))
        Range("B2").Select
        startb = lastrow
        For b = lastrow To 2 Step -1
        If Cells(b, 3) <> Cells(b - 1, 3) Then
        endb = b
        rowdiff = startb - endb
        Cells(end, 2).Select
        ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" & rowdiff & "]C[-1],RC[-1])"
        ActiveCell.Formula = Application.ConvertFormula(Formula:=ActiveCell.Formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
        Selection.Copy
        Range(Cells(startb, 2), Cells(endb, 2)).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False

        End If
        Next b

正如你们所看到的,我有一个可以立即将相对公式转换为绝对公式的代码行。不幸的是,在我的 COUNTIF 公式中,我想要一个绝对范围(逗号之前的部分)但一个相对标准(在这种情况下,逗号之后的 RC[-1])。

我可以做些什么来将部分公式转换为绝对公式?还是没有这种东西?非常感谢任何帮助和建议。如果我以完全错误的方式这样做,请告诉我。

感谢您的阅读和您的时间。

【问题讨论】:

  • 你的代码运行没有问题吗?在end 之后不能调用任何变量。您使用名为lastRow 的变量作为 索引。您的代码的实际目标是什么?
  • 抱歉所有的错别字。我已经进行了相应的编辑。我之前将字符串的名称更改为更短的名称,因为变量名称在我的代码中太长了。忘记了不可能使用“end”作为变量。此代码运行没有问题。
  • 查看我发布的答案

标签: vba excel


【解决方案1】:

至于您部分将公式从相对转换为绝对,除了最后一个单元格引用,您可以使用此函数

Function LeaveLastRelative(strng As String) As String
    LeaveLastRelative = Left(strng, InStrRev(strng, ",")) & Replace(Right(strng, Len(strng) - InStrRev(strng, ",")), "$", "")
End Function

更详细和(可能)清晰的版本是:

Function LeaveLastRelative(strng As String) As String
    Dim strng1 As String, strng2 As String

    strng2 = Right(strng, Len(strng) - InStrRev(strng, ","))
    strng1 = Left(strng, InStrRev(strng, ","))
    LeaveLastRelative = strng1 & Replace(strng2, "$", "")
End Function

用作:

            ActiveCell.FormulaR1C1 = "=Countif(RC[-1]:R[" & rowdiff & "]C[-1],RC[-1])"
            ActiveCell.formula = Application.ConvertFormula(formula:=ActiveCell.formula, fromreferencestyle:=Application.ReferenceStyle, toabsolute:=xlAbsolute)
            ActiveCell.formula = LeaveLastRelative(ActiveCell.formula) '<--| here you use the function

【讨论】:

  • 感谢 user3598756 的回复和帮助。活性细胞公式的整个部分已成为绝对参考,就像我之前介绍的那样。我尝试了你的两个功能。我哪里做错了?
  • 我的错误:Application.ConvertFormula() 不会返回转换后的公式,因此必须自行调用它,然后在单元格中留下的结果上使用LeaveLastRelative() 函数。查看编辑后的答案
  • @Skyler,你通过了吗?
  • 是的,它终于奏效了!太棒了,而且运行良好!非常感谢!我对 [Right] 和 [Left] 功能不熟悉,我会确保学好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多