В настоящее время у меня есть сложная формула, которую я пытаюсь поместить в ячейку через 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)
находится в определенном диапазоне, а второй - простой флаг Y
или N
в Column AD
. Ex. (AG2-AF2+1)/(365/12) = 45
и AD2 = N
тогда я бы ожидал BP2 = 4
.
Ура!