excel - 将 IF 条件应用于范围 Excel VBA

标签 excel vba if-statement range

我已经写了这段代码,但它似乎没有工作,为什么?

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/

相关文章:

excel - 在 Excel 中,我如何创建一个总和来为五个不同的字符串赋值

sql-server - VBA - SQL 查询字符串

excel - Application.InputBox 预选意外的默认范围

linux - Bash shell `if` 命令返回一些东西 `then` 做一些事情

vba - 是如果 x/100 = Int(x/100) 然后 ActiveWorkbook.Save 还是如果 x/100 = Int(x) 然后 ActiveWorkbook.save?

r - 以正确的编码将包含希腊字符的 Excel 文件导入到 R 中

excel - 更新选择中的超链接

vba - 将图表工作表设置为工作表变量

python - 简单if语句的Python语法错误

java - 使用 IF 和 ELSE 语句设置 Enable 或 Disable 而不是 True 或 False