Excel中的CASE函数等价

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (61)

我有一个有趣的挑战--我需要在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()在我决定这是个坏主意(我的人生故事)之前,我一共做了四次陈述。

提问于
用户回答回答于

听起来像是一份工作VLOOKUP!

可以将32->1420类型的映射放在几个列中,然后使用VLOOKUP函数执行查找。

用户回答回答于

没有参考原始问题(我怀疑这个问题早就解决了),我最近发现了一个巧妙的技巧,它使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中,并使整个过程正常工作。

扫码关注云+社区