我已经写了这段代码,但它似乎没有工作,为什么?
Dim oRo As String
Dim nRo As String
Lastro = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
oRo = "J2:O" & Lastro
nRo = "Q2:V" & Lastro
Range("C2:G" & Lastro).Select
With Range("C2:G" & Lastro)
.Range("C2:G" & Lastro).Formula = "=IF(oRo*nRo<0,ROUNDUP(oRo*1.3,-2),IF(ABS(oRo) <=ABS(nRo),nRo,ROUNDUP(oRo*1.3,-2)))"
End With
End Sub
最佳答案
可维护性的最佳选择是在将公式从 VBA 写入 Excel 时采用 R1C1 表示法。我仍然看不懂 R1C1,但我专门用它来从 VBA 编写公式。就是这样:
假设你想要 G2 中的这个公式
=IF(J2*Q2<0,ROUNDUP(J2*1.3,-2),IF(ABS(J2)<=ABS(Q2),Q2,ROUNDUP(J2*1.3,-2)))
所以在 G2 中输入,选择 G2,然后打开即时窗口(在 VBE 中为 Ctrl+G)。在 IW 中,键入
?activecell.FormulaR1C1
这将为您提供所需的一切。您不必能够阅读它,您只需确保在单元格 G2 中输入了正确的公式(以 A1 表示法)。现在您可以拥有 super 简单的代码,例如
Dim lRow As Long
Dim sh As Worksheet
Set sh = ActiveSheet
lRow = sh.Cells(sh.Rows.Count, 2).End(xlUp).Row - 1
sh.Range("G2").Resize(lRow, 1).FormulaR1C1 = "=IF(RC[3]*RC[10]<0,ROUNDUP(RC[3]*1.3,-2),IF(ABS(RC[3])<=ABS(RC[10]),RC[10],ROUNDUP(RC[3]*1.3,-2)))"
我所做的只是从即时窗口复制 R1C1 公式并将其粘贴到代码中。
关于excel - 将 IF 条件应用于范围 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501846/