Excel VBA – 将公式直接插入一组带有variables引用的行中,或者用“=”replacestring“\ =”

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

我实现了以下脚本:

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 

有了这个脚本,我在我的excel表中的第M列每行写了一个string。

我注意到如果公式没有符号“\”,你可以find一个错误。

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

for循环之后的replace脚本:

 Columns("M:M").Replace What:="\=", Replacement:="=", LookAt:=xlPart 

奇怪的是macros不会删除它。 事实上,当脚本结束时,似乎没有任何事情发生,没有错误。 但是,如果我想用另一个符号replace“\ =”,例如“*”,则replace脚本将起作用。

我不明白,如果问题是:

  • replace方法没有识别符号“=”来search
  • 我不能使用replace方法,因为符号“=”以某种方式干扰,我不知道在什么。

或者 ,是否有另一个最简单的方法来完成这项任务?

有人可以帮我解决? 我应该有公式在M列工作,自动与VBA(而不是Excel表中的另一个公式)。

在此先感谢您的时间。

我们可以直接应用公式。 问题是vba非常US-EN Centric,使用.Formula所有公式都需要采用这种格式。

另外,由于你的公式引用的是第3行中的值,所以我们需要在4开始循环而不是0 。 没有第0

有两种方式,US-En格式,英文function,作为分隔符使用。 .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和公式,你会用你的母语写它。

 Dim i As Integer For i = 4 To 100 Range("M" & i).FormulaLocal = "=NUMERO.VALORE(SE(Q" & i & "=""Bedarf kum."";A" & i & ";SE(Q" & i & "=""Ist"";SCARTO(A" & i & ";-1;0);SE(Q" & i & "=""Lz."";SCARTO(A" & i & ";-2;0);SE(Q" & i & "=""Ist+Lz.-Bedarf"";SCARTO(A" & i & ";-3;0);)))))" Next i 

当我解决这个问题的时候,Scott已经有了答案。 我只是想发布你修改后的原代码。 我会build议他的方法。

 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