我正试图找出在excel中使用IF语句的最有效方法。我知道我希望我的代码看起来像是Python,但我在excel中苦苦挣扎。
继承我在excel中的代码,它可以工作并做我想要的事情:
=IFS((AND(B4="Fall", C4="Triple")), 2190, (AND(B4="Fall", C4="Double")), 2731, (AND(B4="Fall", C4="Single")), 3175,
AND(B4="Winter", C4="Triple"), 1902, AND(B4="Winter", C4="Double"), 2372, AND(B4="Winter", C4="Single"), 2757,
AND(B4="Spring", C4="Triple"), 1671, AND(B4="Spring", C4="Double"), 2084, AND(B4="Spring", C4="Single"), 2423,
ISBLANK(B4), "Pick A quarter", ISBLANK(C4), "Pick A dorm style")
正如你所看到的,有许多东西重复而且是不必要的。这使得阅读变得困难,并且很难打字。特别是因为我必须对AND()语句和结果中的第二个参数进行非常小的更改才能做同样的事情。
以下是我希望代码等同于的内容。
B4 = "Fall"
C4 = "Double"
if (B4=="Fall"):
if (C4 == "Triple"):
print(2190)
if (C4 == "Double"):
print(2731)
if (C4 == "Single"):
print(3175)
elif (B4 == "Winter"):
if (C4 == "Triple"):
print(1902)
if (C4 == "Double"):
print(2372)
if (C4 == "Single"):
print(2757)
elif (B4 == "Spring"):
if (C4 == "Triple"):
print(1671)
if (C4 == "Double"):
print(2084)
if (C4 == "Single"):
print(2423)
else:
print("...")
现在可以肯定的是,这段代码仍然不是很好,似乎会有一个更好,更短,更有效的方式来编写它。但它得到了重点。 (如果有一种方法可以在python中创建它并从python代码更改excel单元格,那就太酷了)。有人有想法吗?
答案 0 :(得分:5)
最常见的Excel
解决方案是使用帮助程序表并使用INDEX
- MATCH
。
示例:
B5
中的公式:
=INDEX($F$3:$H$5,MATCH(B4,$E$3:$E$5,0),MATCH(C4,$F$2:$H$2,0))
帮助程序表可以位于可以隐藏的单独工作表上。所以它不可见。
答案 1 :(得分:4)
您可以从公式中调用驻留在工作簿中的VBA函数,将两个输入单元格作为参数传递。
使用以下代码在VBA IDE中添加模块:
Function GetRate(season As String, size As String)
If season = "Fall" Then
If size = "Triple" Then
GetRate = 2190
ElseIf size = "Double" Then
GetRate = 2731
ElseIf size = "Single" Then
GetRate = 3175
End If
ElseIf season = "Winter" Then
If size = "Triple" Then
GetRate = 1902
ElseIf size = "Double" Then
GetRate = 2372
ElseIf size = "Single" Then
GetRate = 2757
End If
ElseIf season = "Spring" Then
If size = "Triple" Then
GetRate = 1671
ElseIf size = "Double" Then
GetRate = 2084
ElseIf size = "Single" Then
GetRate = 2423
End If
Else
GetRate = "..."
End If
End Function
注意:我真的很快就将你的python代码翻译成了VBA。我不会深入研究所述代码的质量,因为它似乎超出了这个问题的范围。 (它并不坏,但可能会有所改善。)
在单元格公式中调用函数并将两个单元格引用作为参数传递:
=GetRate(A1, B1)
必须使用文件类型" Excel启用宏的工作簿(* .xlsm)"保存工作簿。如果您没有,它会发出警告,如果您忽略警告并保存为正常的.XLS文件,您将丢失模块和代码。
答案 2 :(得分:1)
我不了解excel,但是这个Python代码:
if (B4=="Fall"):
if (C4 == "Triple"):
print(2190)
if (C4 == "Double"):
print(2731)
if (C4 == "Single"):
print(3175)
elif (B4 == "Winter"):
if (C4 == "Triple"):
print(1902)
if (C4 == "Double"):
print(2372)
if (C4 == "Single"):
print(2757)
elif (B4 == "Spring"):
if (C4 == "Triple"):
print(1671)
if (C4 == "Double"):
print(2084)
if (C4 == "Single"):
print(2423)
else:
print("...")
与这个更好的Python代码大致相同:
print {
("Fall", "Triple"): 2190,
("Fall", "Double"): 2731,
("Fall", "Single"): 3175,
("Winter", "Triple"): 1902,
("Winter", "Double"): 2372,
("Winter", "Single"): 2757,
("Spring", "Triple"): 1671,
("Spring", "Double"): 2084,
("Spring", "Single"): 2423,
}.get((B4, C4), '...')
答案 3 :(得分:0)