Excel VBA - 直接在变量引用的行集中插入公式或用“=”替换字符串,例如“\ =”

时间:2017-09-07 12:57:15

标签: excel vba excel-vba

我的目标是在一组行中编写公式。公式中的一些引用必须更改每一行。

我实现了以下脚本:

ValueChangedEvent

使用这个脚本,我在我的excel表中M列的每一行写一个字符串。

我注意到如果公式没有符号“\”,则可以找到错误。

为了避免错误,我想留下符号“\”并使用删除它后的技巧(因为我不知道如何用R1C1公式解决。我在Stackoverflow上读了一些答案,但不幸的是我不明白)

for循环后的替换脚本:

Dim i As Integer
Dim formcolM As String
Dim temprng As String

For i = 0 To 100  
    formcolM = "NUMBERVALUE(IF(Q" & i & "=""Bedarf kum."";A" & i & ";IF(Q" & i & "=""Ist"";OFFSET(A" & i & ";-1;0);IF(Q" & i & "=""Lz."";OFFSET(A" & i & ";-2;0);IF(Q" & i & "=""Ist+Lz.-Bedarf"";OFFSET(A" & i & ";-3;0);)))))"
Let temprng = "M" & i
Range(temprng).Select
ActiveCell.Value = "\=" & formcolM
next i

奇怪的是宏不会删除它。 事实上,当脚本完成时,似乎什么也没发生,没有错误。但是如果我想用另一个符号替换“\ =”,例如“*”,替换脚本就可以了。

我不明白问题是否是:

  • 替换方法未识别符号“=”来搜索
  • 我不能使用替换方法,因为符号“=”以某种方式扰乱,我不知道在什么。

,还有另一种最简单的方法来完成这项任务吗?

有人可以帮助我解决问题吗?我应该在M列中使用公式,自动使用vba(不使用excel表中的其他公式)。

提前感谢您的时间。

2 个答案:

答案 0 :(得分:2)

我们可以直接申请公式。问题是vba非常以US-EN为中心,使用.Formula时所有公式都需要采用该格式。

此外,由于您的公式引用了第3行中的值,因此我们需要在4而不是0处开始循环。没有行0

有两种方式,使用英语功能的US-En格式和使用,的{​​{1}}作为分隔符:

.Formula

或者使用Dim i As Integer For i = 4 To 100 Range("M" & i).Formula = "=NUMBERVALUE(IF(Q" & i & "=""Bedarf kum."",A" & i & ",IF(Q" & i & "=""Ist"",OFFSET(A" & i & ",-1,0),IF(Q" & i & "=""Lz."",OFFSET(A" & i & ",-2,0),IF(Q" & i & "=""Ist+Lz.-Bedarf"",OFFSET(A" & i & ",-3,0),)))))" Next i 和公式,就像用你的母语一样。

.FormulaLocal

答案 1 :(得分:0)

当我解决这个问题时,斯科特已经得到了答案。我只是想将您修改的原始代码发布到工作中。我会建议他的方法。

Sub TestScript()

Dim i As Integer
Dim formcolM As String
Dim temprng As String

For i = 4 To 100
formcolM = "NUMBERVALUE(IF(Q" & i & "=" & "Bedarf kum." & ";A" & i & ";IF(Q" & i & "=" & "Ist" & ";OFFSET(A" & i & ";-1;0);IF(Q" & i & "=" & "Lz." & ";OFFSET(A" & i & ";-2;0);IF(Q" & i & "=" & "Ist+Lz.-Bedarf" & ";OFFSET(A" & i & ";-3;0);)))))"
temprng = "M" & i
Sheets("Sheet1").Range(temprng).Select
ActiveCell.Value = " = " & formcolM
Next i

End Sub