我的目标是在一组行中编写公式。公式中的一些引用必须更改每一行。
我实现了以下脚本:
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表中的其他公式)。
提前感谢您的时间。
答案 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