2016-04-20 7 views
0

Я запутался о том, как передать эту проблему с Эксел VBA:IF условие из первенствует в VBA

В первенствует:

Theoric:

=IF(cond1, IF(cond2, statement1,statement2),IF(cond2,statement3,statement4)) 

Actual превосходят клетки:

=IF($B$2="USD",IF($B$170="USD",B173,B173/B$1),IF($B$170="USD",B173*B$1,B173)) 

В VBA:

If cond1 Then 
If cond2 Then 
Statement1 
Else 
Statement2 
End if 
Elseif cond2 Then 
statement3 
Else 
statement4 
End if 

Было бы хорошо?

+0

Вы хотите создать функцию VBA для использования в ячейке? например, ваша новая формула ячейки будет читать «= Myfunction (B2)» – GisMofx

ответ

1

Возможно, это в качестве альтернативы?

Select Case CStr(Range("B2").text = "USD") & CStr(Range("B170").text = "USD") 
Case Is = "TrueFalse" 
    Range("A1").Value = Range("B173").Value/Range("B1").Value 
Case Is = "FalseTrue" 
    Range("A1").Value = Range("B173").Value * Range("B1").Value 
Case Else 
    Range("A1").Value = Range("B173").Value 
End Select 

Просто играл вокруг с этим немного больше, вы можете математически получить его меньше, используя логическое значение как значение в вашем расчете, он получает вниз только 2 строк кода, установите значение для исключения затем перезапишите его, если он соответствует критериям.

Мы используем математику здесь, что X * Y = X/(1/Y)

Зная это, мы можем использовать логическое значение как 1 или 0 и манипулировать формулу таким образом.

Вот что я придумал:

Range("A1").Value = Range("B173").Value 
If CLng(Range("B2").Text = "USD") + CLng(Range("B170").Text = "USD") = -1 Then Range("A1").Value = Range("B173").Value * (((CLng(Range("B2").Text = "USD") * -1)/Range("B1").Value) + ((CLng(Range("B170").Text = "USD") * -1) * Range("B1").Value)) 

Это гораздо труднее читать и поддерживать, чем мое первоначальное предложение, хотя :).

+0

Прохладный! хороший подход –

+0

См. мое редактирование для другого варианта. –

3

Это будет делать то, что вы спрашиваете:

If Range("B2") = "USD" Then 
    If Range("B170") = "USD" Then 
     Range("A1").Value = Range("B173").Value 
    Else 
     Range("A1").Value = Range("B173").Value/Range("B1").Value 
    End If 
Else 
    If Range("B170") = "USD" Then 
     Range("A1").Value = Range("B173").Value * Range("B1").Value 
    Else 
     Range("A1").Value = Range("B173").Value 
    End If 
End If 

Это предполагает, что вы хотите получить значение в A1.

Также форматирование кода, как указано выше, позволяет легко читать его.

+0

Thx. Работает отлично. –

Смежные вопросы