内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我有一个有趣的挑战--我需要在Excel中对以下数据进行检查:
| A - B - C - D | |------|------|------|------| | 36 | 0 | 0 | x | | 0 | 600 | 700 | x | |___________________________|
你得原谅我的艺术太差了。因此,我需要D列(X)来对相邻的单元格进行检查,然后在必要时转换值。以下是标准:
如果B列大于0,一切都很好,我可以喝咖啡。如果它不符合这一要求,那么我需要根据一个表来转换A1-例如,32 = 1420
并放置在D
...。不幸的是,A和它需要转换的内容之间没有关系,所以创建一个计算是不可能的。
在这个场景中,一个case或Switch语句是完美的,但我认为它不是Excel中的一个本机函数。我也觉得把一堆=IF()
在我决定这是个坏主意(我的人生故事)之前,我一共做了四次陈述。
没有参考原始问题(我怀疑这个问题早就解决了),我最近发现了一个巧妙的技巧,它使select函数工作起来就像一个select case
语句,而无需修改数据。只有一个陷阱:在任何时候,只有一个选择条件是正确的。
语法如下:
CHOOSE( (1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)), RESULT_1, RESULT_2, ... , RESULT_N )
假设条件1到N中只有一个为真,则所有条件都为0,这意味着数值将对应于适当的结果。
如果不能百分之百地确定所有条件都是相互排斥的,可能更喜欢这样的东西:
CHOOSE( (1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN) OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5 )
也就是说,如果Excel对一个函数可以使用的参数数量有上限,那么会很快地点击它。
老实说,真不敢相信我花了很多年才弄明白,但我以前没见过,所以我想我会把它留在这里帮助别人。
可以删除愚蠢的逗号数(因此,SELECT语句最多可用于254种情况),方法是使用以下形式的公式:
CHOOSE( 1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4 )
注意第二个参数LOG
子句,它把它放在基2中,并使整个过程正常工作。