【发布时间】:2018-10-30 23:12:13
【问题描述】:
我目前有一个复杂的公式,我正试图通过 VBA 将其放入单元格中。当前的工作公式(在单元格BP2中)如下:
'=IF(X2="No Bonus",1,
'IF(AND(((AG2-AF2+1)/(365/12))>=50,AD2="N"),5,
'IF(AND(((AG2-AF2+1)/(365/12))>=40,AD2="N"),4,
'IF(AND(((AG2-AF2+1)/(365/12))>=30,AD2="N"),2,
'IF(AND(((AG2-AF2+1)/(365/12))>=20,AD2="N"),1,
'IF(AND(((AG2-AF2+1)/(365/12))>0,AD2="N"),0.5,
'IF(AND(((AG2-AF2+1)/(365/12))>=20,AD2="Y"),1,
'IF(AND(((AG2-AF2+1)/(365/12))>=15,AD2="Y"),2,
'IF(AND(((AG2-AF2+1)/(365/12))>=0,AD2="Y"),0.3,0)))))))))
我将代码放置在 BP 列中现有数据下方的可变范围内。我的代码目前如下:
Dim LastRowExisting As Long
Dim LastRowNew As Long
LastRowExisting = Worksheets("MyWorksheet").Range("CE1").Value 'LastRow of Existing data stored here by macro earlier
LastRowNew = Worksheets("MyWorksheet").Range("A" & rows.Count).End(xlUp).Row 'requires Column A "Source" is always populated on all lines
Worksheets("MyWorksheet").Range("BP" & LastRowExisting + 1 & ":" & "BP" & LastRowNew).FormulaR1C1 = "=IF(RC[-44]=""No Bonus"",""1"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=50,RC[-38]=""N"",""5"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=40,RC[-38]=""N"",""4"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=30,RC[-38]=""N"",""2"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=20,RC[-18]=""N"",""1"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=0,RC[-38]=""N"",""0.5"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=20,RC[-38]=""Y"",""1"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=15,RC[-38]=""Y"",""2"", _
IF(AND(((RC[-35]-RC[-36]+1)/(365/12))>=0,RC[-38]=""Y"",""0.3"",""0"")))))))))"
我在公式行上收到运行时错误“1004”“应用程序定义或对象定义错误”。我试图通过将它放在一个长行中来查看我的换行符是否是问题,但我仍然遇到同样的错误。
我意识到这可能是一个语法问题,但我正在努力找出问题所在。我知道这是一个不太理想(即丑陋)的解决方案,但考虑到这发生在更大的宏中,我希望让这个公式方法起作用。
如果有帮助的话;总体思路是根据两个标准得出一个值(5、4、2、1、.5 等)。第一个是(AG-AF+1)/(365/12) 是否在某个范围内,第二个是Column AD 中的简单Y 或N 标志。前任。 (AG2-AF2+1)/(365/12) = 45 和 AD2 = N 然后我希望 BP2 = 4。
干杯!
【问题讨论】:
-
这是一个很好的 UDF 候选 - 它基本上只是一个
Select Case。 -
""5""这些引号是否围绕所需的数字返回值?原始公式在这些位置没有...
标签: excel vba excel-formula