在公式中查找并替换字符串

时间:2019-01-25 12:19:43

标签: excel vba function

我正在尝试根据用户按钮事件在仪表板上动态更改某些公式。

公式可能看起来像这样:

  

= SUMIFS(Table1 [Amount]; Table1 [PickerName]; $ D $ 2; Table1 [WayOfTransportGroup]; H27; Table1 [Date];“> =”&$ I $ 2; Table1 [Date];“ <=” &$ I $ 3)

我想更改公式的一小部分

  

Table1 [PickerName]; $ D $ 2

进入

  

Table1 [PickerName]; $ D $ 2; Table1 [Type];“ <>”&“ gt 10分钟”;

我在下面写了一些代码。这似乎适用于普通字符串,但是它不能替换属于公式一部分的部分。

如果单元格的值类似于“ Table1 [PickerName]; $ D $ 2” ,则该代码有效,并且替换了字符串。但是,如果单元格值更改为 =“ Table1 [PickerName]; $ D $ 2” (请注意=符号),则代码将无法再替换字符串。

Sub ChangeScopeClick()

    Dim fnd As Variant
    Dim rplc As Variant

    fnd = "Table1[PickerName];$D$2"
    rplc = "Table1[PickerName];$D$2;Table1[Type];""<>""&""gt 10 minuten"";"

    For Each c In Worksheets("Dashboard").Range("C7:Y31")
        c.Replace what:=fnd, Replacement:=rplc, _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False
    Next c

End Sub

我不知道应该如何使用Replace函数来更改作为公式一部分的字符串。

1 个答案:

答案 0 :(得分:1)

c.formula = replace(c.formula, fnd, rplc)

评论后更新

我怀疑替换无法生成正确的公式。分号或逗号分隔符实际上并不重要

尝试使用

Dim tmp as string

tmp = Replace(c.formula, fnd, rplc)

debug.Print tmp

c.formula = tmp

调试每一行,甚至尝试手动将tmp输出到立即窗口放入单元格中,以确保引用正确