Nic*_*Nic 49 excel worksheet-function
我有一个有趣的挑战 - 我需要在Excel中检查以下数据:
| A - B - C - D |
|------|------|------|------|
| 36 | 0 | 0 | x |
| 0 | 600 | 700 | x |
|___________________________|
Run Code Online (Sandbox Code Playgroud)
你必须原谅我糟糕的ASCII艺术.所以我需要D列(x)对相邻的单元格进行检查,然后在必要时转换值.这是标准:
如果B栏大于0,一切都很好,我可以喝咖啡.如果它不符合该要求,那么我需要根据表格转换A1 - 例如,32 = 1420并放入D.不幸的是,A和它需要转换的内容之间没有任何关系,因此创建计算是不可能的.
在这种情况下,case或switch语句是完美的,但我不认为它是Excel中的本机函数.我也认为把一堆=IF()陈述连在一起会有点疯狂,在做出决定这是一个坏主意(我的生活故事)之前,我做了大约四次.
tob*_*and 21
在没有参考原始问题的情况下(我怀疑它早已解决),我最近发现了一个巧妙的技巧,使得Choose函数的工作方式与select case语句完全相同,而无需修改数据.只有一个问题:在任何时候,只有一个选择条件可以为真.
语法如下:
CHOOSE(
(1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
RESULT_1, RESULT_2, ... , RESULT_N
)
Run Code Online (Sandbox Code Playgroud)
假设条件1到N中只有一个为真,其他一切都为0,这意味着数值将对应于适当的结果.
如果您不是100%确定所有条件都是互斥的,您可能更喜欢以下内容:
CHOOSE(
(1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)
Run Code Online (Sandbox Code Playgroud)
也就是说,如果Excel对函数可以采用的参数数量有一个上限,那么你很快就会遇到它.
老实说,不敢相信我需要花费数年的时间来解决这个问题,但我之前没有见过它,所以我想把它留在这里帮助别人.
编辑:以下来自@aTrusty的评论:通过使用以下形式的公式,可以消除愚蠢的逗号数量(因此,选择语句最多可用于254个案例):
CHOOSE(
1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2),
OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)
Run Code Online (Sandbox Code Playgroud)
注意该LOG子句的第二个参数,它将它放在基数2中并使整个事情起作用.
编辑:根据大卫的回答,现在有一个实际的转换声明,如果你有幸在2016年的办公室工作.除了阅读困难,这也意味着你获得切换效率,而不仅仅是行为!
dav*_*vid 14
Switch功能现已在Excel 2016/Office 365中提供
SWITCH(表达式,value1,result1,[default或value2,result2],... [default或value3,result3])
example:
=SWITCH(A1,0,"FALSE",-1,"TRUE","Maybe")
Run Code Online (Sandbox Code Playgroud)
试试这个;
=IF(B1>=0, B1, OFFSET($X$1, MATCH(B1, $X:$X, Z) - 1, Y)
Run Code Online (Sandbox Code Playgroud)
WHERE
X =您要索引到的列
Y = 索引列的左侧(-Y)或右侧(Y)的列数,以获取您要查找的值
Z = 0如果完全匹配(如果需要)处理错误)
| 归档时间: |
|
| 查看次数: |
344553 次 |
| 最近记录: |