Excel Formula – 以文本forms存储的范围内的查找号码

我有一个电子表格,使用命名的范围来维持dynamic控制。 我有一个用户input文本的search框(可以是数字,但单元格格式化为一般)。 当用户input一个数字时,LOOKUP()公式将search该数字的指定范围并返回任何数据。 这里是一个总体概述:

ABC ---------------------------------------------------- 1 |Search: 232 <- user input (Named rnge: SearchTerm)| ---------------------------------------------------- 2 | Assc: .... | ---------------------------------------------------- 3 | Phone: ... | ---------------------------------------------------- 

和LOOKUP()范围,我们将它称为Table1,如下所示:

  ------------------------------------------- | Associate | Rooms | Phone Number | -------------------------------------------- | John Doe | 110-130 | xxx-xxx-xxx | -------------------------------------------- | Jane Doe | 131-150 | xxx-xxx-xxx | -------------------------------------------- | Etc... | -------------------------------------------- 

我已经成功设法使用LOOKUP()find一个单元格,但不是dynamic范围内的单元格。 另外我现在的公式使用了大量的IF()/ AND()/ OR()语句,所以它变得比所需的时间长。 我目前看到的是,如果用户input值在两个数字之间的方式不是很好,我已经使用LEFT()获取第一个数字和RIGHT()来获取最右边的数字。 我甚至玩过使用MAX()与其他function,如SUBSTITUTE()等,但我的function是太长,往往会导致错误,因为它几乎4行。 呃…我知道。 是否有一种更简单的方法来查看是否有联系人被分配在search框中input的房间,没有VBA,而不是我的长IF / AND / OR语句公式? 具体而言,寻找:B2

这就是我所想到的,正如我所说,find了一个特定单元格的解决scheme(C5是Rooms列下的Table1的第一行),但我需要它自己find数字的位置:

 =IFNA(IF(AND(SearchTerm>=NUMBERVALUE(LEFT(C5,3)),SearchTerm<=NUMBERVALUE(RIGHT(C5,3))),OFFSET(C5,0,-1,1,1),LOOKUP(1E+307,FIND(" "&SearchTerm&","," "&Table1[Misc Rooms]&","),Table1[Associate])),"NO MATCHES FOUND") 

从LOOKUP开始,公式是指与问题无关的数据。 公式检​​查search房间是否在联营区内(“房间”栏),如果不是,则查看其是否属于杂费房间,通常不在联营区

TL; DR什么是最有效的公式,看看是否一个数字落在一个连字符号(input为文本)和返回一个列旁边使用LOOKUP()/ VLOOKUP()/ INDEX()/ MATCH()等, VBA真的。 寻找B2 =

考虑在房间栏中只使用一个数字。 或者将first roomlast room用作两个不同的列。 然后,您可以使用近似匹配,这将返回小于或等于search值的匹配值。 看看Vlookup的帮助或匹配1或TRUE作为最后一个参数。

表格必须按照first Room的升序sorting。

 =INDEX(Table1[Associate],MATCH(A8,Table1[first Room],1)) 

在这里输入图像说明

编辑:如果拆分列不是一个选项,请考虑以下几点:

在这里输入图像说明

选项2公式:此选项将需要按照第一个房间号升序排列的数据,房间号码中不应有任何空白。 结果示例在单元格E3中,参考在D3中input的数字:

 =INDEX(Table1[name],MATCH(D3,INDEX(LEFT(Table1[room],FIND("-",Table1[room])-1),0)+0,1)) 

这是一个数组公式,并且必须用Ctrl + Shift + Enter确认

选项3公式:使用此公式,“房间”栏中的数据将按原样显示。 订单不重要。 唯一的条件是只有一个破折号隔开数字,没有其他字符。 公式在单元格E4中使用,参考在D4中input的数字。 不是数组公式,只需按Enter键即可

 =LOOKUP(2,1/((D4>=LEFT(Table1[room],FIND("-",Table1[room])-1)+0)*(D4<=MID(Table1[room],FIND("-",Table1[room])+1,99)+0)),Table1[name]) 

编辑2:选项3的说明

LOOKUP(2,1/(comparison),ResultRange) – 比较parsing为TRUE或FALSE值列表。 将比较结果除1得到TRUE为1,FALSE值为#DIV / 0错误。 2的查找将在结果列表中find最后一个,并从ResultRange中的相同位置返回等价物。

通过将比较结果乘以比较结果,将两个比较与逻辑AND组合,可以将其parsing为TRUE / FALSE值的单个列表,即LOOKUP(2,1/((comparison1)*(comparison2)),ResultRange)

room包含文本。 拼出数字仍然返回文本的数字。 用户input的search词是一个实数。 这两种数据types永远不会匹配,因此我们需要将input的数字转换为文本或将拼接的文本转换为实数。 由于我们检查的数字大于或小于某个数字,我们需要两个数据types作为数字。 所以,我们需要将拼接出来的文本转换成数字。 这可以通过对文本应用计算来完成,例如添加零,因此+0。 如果你确定所有的数字都是正数,你也可以用1来乘。