2016-10-26 6 views
1

Я хочу реализовать следующую формулу в ячейки ExcelКак реализовать формулу в ячейки Excel с помощью VBA

IF(OR(D12>0,C13=""),"",MAX(SUM($C$12:C13)-$D$9,0)) 

(когда применяется формула я должен получить следующий результат (формула реализуется вручную):

enter image description here

так я написал простой макрос, как показано ниже, но не смог реализовать формулу, формула Retuns значение, как «истинный»

Sub adjustoldbills() 

lastRow_sht4 = Sheet4.Range("A" & Rows.Count).End(xlUp).Row 
Sheet4.Cells(12, 11) = "" 

For i = 1 To lastRow_sht4 - 10 
    If Sheet4.Cells(11 + i, 1) <> "" Then 
     '=MAX(SUM($C$12:C15)-$D$9,0) 
     Sheet4.Cells(12, 4).Formula = "=MAX(SUM($C$12:C" & 12 & ")-$D$9,0)" 
     Sheet4.Cells(11 + i, 4).Formula = "=(if(or(D" & 11 + i > 0 & ",C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & Chr(34) & Chr(34) & "," & "MAX(SUM($C$12:C" & 12 & i & ")-$D$9,0)" 
    End If 
Next i 

End Sub 

я получаю неверный результат после того, как реализована формула с помощью макроса VBA, как на этой картинке:

enter image description here

как реализовать формулу и получить значение, как и ожидалось.

+0

Вы проверили мой ответ ниже? –

ответ

-1

При попытке преобразования длинных формул в VBA попробуйте использовать переменную String, чтобы помочь вам ее протестировать.

Dim FormulaStr    As String 

FormulaStr = "=IF(OR(D" & 11 + i & ">0,C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & _ 
     Chr(34) & Chr(34) & ",MAX(SUM($C$12:C" & 12 + i & ")-$D$9,0))" 
Debug.Print FormulaStr 

Затем в ближайшем окне вы получите:

=IF(OR(D12>0,C13=""),"",MAX(SUM($C$12:C13)-$D$9,0)) 

который является формула вы хотите преобразовать в VBA.

Теперь все, что вам нужно сделать, это добавить строку ниже:

Sheet4.Cells(11 + i, 4).Formula = FormulaStr 

Если вы хотите, чтобы пропустить переменную типа String, вы можете просто заменить вашу линию

Sheet4.Cells(11 + i, 4).Formula = "=(if(or(D" & 11 + i > 0 & ",C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & Chr(34) & Chr(34) & "," & "MAX(SUM($C$12:C" & 12 & i & ")-$D$9,0)" 

к:

Sheet4.Cells(11 + i, 4).Formula = "=IF(OR(D" & 11 + i & ">0,C" & 12 + i & "=" & Chr(34) & Chr(34) & ")," & Chr(34) & Chr(34) & ",MAX(SUM($C$12:C" & 12 + i & ")-$D$9,0))" 
+0

точно так же, как @ user3598756 писал: «Разве храбрый нисходящий любезно объяснит, почему»? –

-1

Я бы пошел другим путем, без петель и с использованием SpecialCells() метода Range obje ct

Option Explicit 

Sub adjustoldbills() 

    With Sheet4 
     .Range("D12").FormulaR1C1 = "=MAX(RC[-1]-R9C4,0)" 
     With .Range("A13", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants) 
      With .Offset(, 2).SpecialCells(xlCellTypeConstants) 
       .Offset(, 1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))" 
       With .Areas(.Areas.Count) 
        .Offset(, 1).Cells(.Rows.Count).Offset(1).FormulaR1C1 = "=IF(R[-1]C>0,"""",MAX(SUM(R12C[-1]:RC[-1])-R9C4,0))" 
       End With 
      End With 
     End With 
    End With 
End Sub 
+0

Большое спасибо, я получаю правильный результат, теперь спасибо еще раз –

+0

, пожалуйста. Затем, пожалуйста, отметьте ответ как принятый, нажав на галочку рядом с ответом, чтобы переключить его с серого цвета на заполненный. Спасибо – user3598756

+0

Будь смелым downvoter любезно объясните, почему ему не понравился этот ответ, и дать предложения по его улучшению ? Или удалите голос, если он ошибается. Спасибо ему – user3598756