Excel中的案例function相同
我有一个有趣的挑战 – 我需要在Excel中运行以下数据检查:
| A - B - C - D | |------|------|------|------| | 36 | 0 | 0 | x | | 0 | 600 | 700 | x | |___________________________|
你将不得不原谅我奇妙的ASCII艺术。 所以我需要D列(x)对相邻的单元格执行检查,然后根据需要转换值。 这是标准:
如果B列大于0,一切都很好,我可以喝咖啡。 如果它不符合这个要求,那么我需要根据一个表转换A1,例如32 = 1420
并放入D
。 不幸的是,A和它需要转换的关系没有关系,所以创build一个计算是不可能的。
在这种情况下case或switch语句是完美的,但我不认为这是Excel中的本地函数。 我还认为把一堆=IF()
语句连在一起,这是我疯狂的,我决定这是一个坏主意(我生命中的故事=IF()
,我做了大约四次。
听起来像VLOOKUP的工作!
您可以将32 – > 1420types的映射放在某个列的某个列中,然后使用VLOOKUP函数执行查找。
如果没有提到原来的问题(我怀疑自己已经解决了这个问题),我最近发现了一个巧妙的技巧,它使得Choose函数和select case
语句完全一样,不需要修改数据。 只有一个问题:任何时候只有一个select条件是真实的。
语法如下:
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对函数的参数个数有一个上限,那么你很快就能达到这个目的。
老实说,不敢相信这花了我多年的时间,但是我以前没有看到过,所以我想把它留在这里帮助别人。
编辑:从@aTrusty下面的每个评论:通过使用以下forms的公式,可以消除愚蠢的逗号数字(因此,select语句将工作多达254个案例):
CHOOSE( 1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4 )
注意LOG
子句的第二个参数,它把它放在基数2中,并使整个事情工作。
尝试这个;
=IF(B1>=0, B1, OFFSET($X$1, MATCH(B1, $X:$X, Z) - 1, Y)
哪里
X =您正在索引的列
Y =索引列左侧(-Y)或右侧(Y)的列数,以获得您正在查找的值
如果完全匹配,则Z = 0(如果要处理错误)
现在可以在Excel 2016 / Office 365中使用切换function
SWITCH(expression,value1,result1,[default或value2,result2],… [default或value3,result3])
example: =SWITCH(A1,0,"FALSE",-1,"TRUE","Maybe")
MicrosoftOffice支持
我知道这是对一个老的后期制度的回应,
我喜欢If()函数结合索引()/匹配():
=IF(B2>0,"x",INDEX($H$2:$I$9,MATCH(A2,$H$2:$H$9,0),2))
if函数比较列b中的内容,如果大于0,则返回x,如果不是,则使用由Index()函数标识的并由Match()select的数组(信息表)返回值一个对应于。
索引数组的绝对位置设置$H$2:$I$9
(美元符号),以便它指向的位置不会随着公式被复制而改变。 Match()函数标识要返回的值的行。 Match()具有不需要sorting列表来查看Vlookup()所需的附加值。 Match()可以find一个值:1小于,0确切,-1大于。 我在绝对Match()数组$H$2:$H$9
之后放入一个零来查找完全匹配。 对于需要返回的Index()数组值的列将被input。 我input了2,因为在我的数组中,返回值在第二列。 在我的索引数组下面看起来像这样:
32 1420 36 1650 40 1790 44 1860 55 2010
在列表中search的“a”列中的值在我的示例的第一列中,而要返回的对应值在右边。 查找/参考表可以在工作簿中的任何选项卡上 – 甚至可以在另一个文件中。 -Book2是文件名,Sheet2是“其他选项卡”的名称。
=IF(B2>0,"x",INDEX([Book2]Sheet2!$A$1:$B$8,MATCH(A2,[Book2]Sheet2!$A$1:$A$8,0),2))
如果你不想在b的值大于零的时候返回x,那么删除一个'空白'/ null等价物的x或者可以把0放在那里 – 不知道你想要什么。
下面是删除x的函数的开始。
=IF(B2>0,"",INDEX...
我知道答案有点迟,但我认为这个短片对你有很大的帮助。
http://www.xlninja.com/2012/07/25/excel-choose-function-explained/
本质上它是使用selectfunction。 他在video中解释得很好,所以我会让它做,而不是打20页。
他的另一个video解释了如何使用数据validation来填充下拉列表,您可以从有限范围内select。
http://www.xlninja.com/2012/08/13/excel-data-validation-using-dependent-lists/
您可以将两者结合使用,并使用下拉列表中的值作为select函数的索引。 虽然他没有展示如何结合他们,但我相信你可以把他的video看好。 如果你有麻烦,请告诉我,我会更新我的答案,以显示你。
即使老了,这似乎是一个普遍的问题,所以我会张贴另一个解决scheme,我认为是非常优雅的:
http://fiveminutelessons.com/learn-microsoft-excel/using-multiple-if-statements-excel
它很优雅,因为它只使用IF函数。 基本上,这归结为:
如果( 条件 , select/使用表中的值 ,如果( 条件 , select/使用表中的另一个值 …
等等
精美的作品,甚至比HLOOKUP或VLOOOKUP更好
但是…被警告 – excel可以处理的嵌套if语句的数量是有限制的。