excel - VBA 将复杂的嵌套 IF AND 公式写入工作表

标签 excel vba excel-formula

我目前有一个复杂的公式,我正试图通过 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)在一定范围内,第二个是简单的YN Column AD 中的标志.前任。 (AG2-AF2+1)/(365/12) = 45AD2 = N那么我希望 BP2 = 4 .

干杯!

最佳答案

写为 Select Case 可能是个好主意,但请记住宏记录器可以成为您的 friend 。只需记录在单元格 BP2 中输入公式并在 ActiveCell.FormulaR1C1 之后复制输出:

 ActiveCell.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[-38]=""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))>=2" & _
        "0,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)))))))))" & _
        ""

关于excel - VBA 将复杂的嵌套 IF AND 公式写入工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074152/

相关文章:

java - Java 中有 OLE 自动化吗?

excel - 打开工作簿时出错。确保已安装 Excel

arrays - VBA - 获取数组中第n个最大值的索引

excel - 如何将目标传递给 Excel 事件中的另一个宏?

Excel:在求和运算之前将公式应用于每个单元格

Excel日期格式VBA

excel - VBA将excel文件作为附件附加并在电子邮件正文中包含工作表

excel - 将单元格文本与另一个单元格文本的最多 100 个前导字符连接起来

excel - 使用前面的单元格值自动更新范围中的空白单元格

excel - 将计算重叠日期数组中总小时数的公式