我有一个有趣的挑战-我需要在Excel中对以下数据运行检查:
| A - B - C - D |
|------|------|------|------|
| 36 | 0 | 0 | x |
| 0 | 600 | 700 | x |
|___________________________|
你得原谅我糟糕的ASCII技艺。因此,我需要D列(x)对相邻的单元格运行检查,然后在必要时转换值。以下是标准:
如果B列大于0,那么一切都很好,我可以喝咖啡了。如果它不满足这个要求,那么我需要根据一个表转换A1 -例如,将32 = 1420
和place转换为D
。不幸的是,A和它需要转换成什么之间没有关系,所以创建一个计算是不可能的。
在这种情况下,case或switch语句将是完美的,但我不认为它是Excel中的本机函数。我还认为将一堆=IF()
语句链接在一起会有点疯狂,我做了大约四次,然后才决定这是一个坏主意(我的生活故事)。
发布于 2011-03-31 04:31:36
听起来像是VLOOKUP的工作!
您可以将32个VLOOKUP 1420类型映射放在几个列中,然后使用->函数执行查找。
发布于 2015-03-14 01:47:16
不考虑最初的问题(我怀疑这个问题早就解决了),我最近发现了一个巧妙的技巧,它使Choose函数的工作方式与select case
语句完全一样,不需要修改任何数据。只有一个问题:在任何时候,只有一个选择条件可以为真。
语法如下:
CHOOSE(
(1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
RESULT_1, RESULT_2, ... , RESULT_N
)
假设条件1到N中只有一个为真,其他条件都为0,这意味着数值将对应于适当的结果。
如果您不能100%确定所有条件都是互斥的,您可能更喜欢这样的条件:
CHOOSE(
(1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)
也就是说,如果Excel对一个函数可以接受的参数数量有一个上限,那么你很快就会达到这个上限。
老实说,不敢相信我花了几年时间才弄明白,但我以前没有见过它,所以我想我应该把它留在这里帮助别人。
编辑:通过使用以下形式的公式,可以消除愚蠢的逗号数量(因此,choose语句最多可用于254种情况):
CHOOSE(
1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2),
OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)
请注意LOG
子句的第二个参数,它将其设置为基数2,并使整个过程正常工作。
编辑:根据David's answer,现在有一个实际的switch语句,如果你足够幸运地在office 2016上工作。除了阅读困难之外,这也意味着你得到了switch的效率,而不仅仅是行为!
发布于 2011-03-30 23:58:02
试试这个;
=IF(B1>=0, B1, OFFSET($X$1, MATCH(B1, $X:$X, Z) - 1, Y)
哪里
X=要索引到的列
Y=索引列左侧(-Y)或右侧(Y)的列数,以获取要查找的值
如果精确匹配,则z=0(如果要处理错误)
https://stackoverflow.com/questions/5488692
复制相似问题