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语句的数量是有限制的。