将IF条件应用于范围Excel VBA

Sha*_*n S 1 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
Run Code Online (Sandbox Code Playgroud)

Dic*_*ika 5

您可维护性的最佳选择是在从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)))
Run Code Online (Sandbox Code Playgroud)

因此在G2中键入,选择G2,然后打开立即窗口(VBE中的Ctrl + G).在IW中,输入

?activecell.FormulaR1C1
Run Code Online (Sandbox Code Playgroud)

这将为您提供所需的一切.您无需阅读它,您只需确保在单元格G2中键入正确的公式(在A1表示法中).现在你可以拥有超级简单的代码

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)))"
Run Code Online (Sandbox Code Playgroud)

我所做的只是从立即窗口复制R1C1公式并将其粘贴到代码中.