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)
您可维护性的最佳选择是在从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公式并将其粘贴到代码中.
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |