Excel:在定义为公式的范围内,使用HLOOKUP查找文本下的值

Excel:在定义为公式的范围内,使用HLOOKUP查找文本下的值,excel,reference,match,Excel,Reference,Match,在定义的范围(红色矩形)中,我试图找到带绿色下划线的值(文本),然后读取它下面的值。这是将非结构化表的所有值放入另一个结构化表的一部分 主要目标是获得预定义范围内的文本,该范围通过搜索第一个和第二个组件来定义,在本例中,第一个和第二个组件是“Pack”和“PET”,第二个组件是“PET”和“Orange”等等。与搜索不同的回合(如0和1)相结合,因此我将精确获得红方块,但每轮中的每个分量都是如此 迄今为止的最佳尝试: =INDEX(purchasing!B1:B17,MATCH("Lower b

在定义的范围(红色矩形)中,我试图找到带绿色下划线的值(文本),然后读取它下面的值。这是将非结构化表的所有值放入另一个结构化表的一部分

主要目标是获得预定义范围内的文本,该范围通过搜索第一个和第二个组件来定义,在本例中,第一个和第二个组件是“Pack”和“PET”,第二个组件是“PET”和“Orange”等等。与搜索不同的回合(如0和1)相结合,因此我将精确获得红方块,但每轮中的每个分量都是如此

迄今为止的最佳尝试:

=INDEX(purchasing!B1:B17,MATCH("Lower bound (weeks)",purchasing!B1:B17,0)+1,1)
但是我如何从另一个表中得到范围,这个表是通过公式计算的,B1:B17代表什么?我不会这么做,但为什么?将它用于许多其他非常类似的任务,其中询问了数组表。这里是数组,a能以某种方式转换它吗

INDIRECT("'PURCHASING'!"&ranges!B2)
使用以下公式:

=HLOOKUP("Lower bound (weeks)",A1:E17,2,FALSE)
给我不适用 而:

给我结果:交货窗口

第三次尝试是这个公式:

=INDEX(A1:E17,MATCH("Lower bound (weeks)",A1:E17,0)+1,1)
同样,只有一个#N/A,给出正确结果的唯一公式是:

=INDEX(B1:B17,MATCH("Lower bound (weeks)",B1:B17,0)+1,1)
但这不是我在另一张表中通过公式计算出的范围。所以我事先不知道为什么我要用偏移量做这个范围。也给了我一个错误的结果,因为偏移设置了单元格的位置,而不是单元格中的值

另一个表中的偏移公式为:

=VLOOKUP("contract index",INDIRECT("'PURCHASING'!"&ranges!B2),2,FALSE)
然后在桌子范围内!B2它是:

=G4&":"&H5
它获取了包装、宠物、橙色等术语的单个值

=ADDRESS(MATCH($O4,INDIRECT("'PURCHASING'!"&G$3),0),MATCH(G$2,purchasing!$1:$1,0)-1,4)
=ADDRESS(MATCH($O5,INDIRECT("'PURCHASING'!"&H$3),0),MATCH(H$2,purchasing!$1:$1,0)-1,4)
有办法解决这个问题吗

范围表包含了它应该搜索文本的所有范围,如果有,请给我下面的数字。所有范围都由公式自动搜索

B2中的公式

=G4&":"&H5
G2中的公式

=ADDRESS(MATCH($O4,INDIRECT("'PURCHASING'!"&G$3),0),MATCH(G$2,purchasing!$1:$1,0)-1,4)
G12中的公式

=SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(G4&"1"))+1,4),"1","")&SUBSTITUTE(G4,SUBSTITUTE(ADDRESS(1,MATCH(G$2,purchasing!$1:$1,0)-1,4),"1",""),"")
使用以下命令:

=INDEX(A1:E17,SMALL(IF(NOT(ISERROR(SEARCH("Lower bound (weeks)",A1:E17))),ROW(1:17),99^99),1)+1,SMALL(IF(NOT(ISERROR(SEARCH("Lower bound (weeks)",A1:E17))),COLUMN(A:E),99^99),1))
使用Ctrl+Shift+Enter作为数组公式输入

这将返回找到的行并向其中添加一行

SMALL(IF(NOT(ISERROR(SEARCH("Lower bound (weeks)",A1:E17))),ROW(1:17),99^99),1)+1
这将返回找到以下内容的列:

SMALL(IF(NOT(ISERROR(SEARCH("Lower bound (weeks)",A1:E17))),COLUMN(A:E),99^99),1)
然后将这些用于索引范围的相交

INDEX(A1:E17,.......)
参考:


我在单元格R2的最后一页中使用了以下公式来解决我的问题:

=IF(ISNA(INDEX(INDIRECT("'PURCHASING'!"&TEXT(ranges!G12,"")),MATCH("Lower bound (weeks)",INDIRECT("purchasing!"&TEXT(ranges!G12,"")),0)+1,1)),"NULL",INDEX(INDIRECT("'PURCHASING'!"&TEXT(ranges!G12,"")),MATCH("Lower bound (weeks)",INDIRECT("purchasing!"&TEXT(ranges!G12,"")),0)+1,1))

该公式将您在下面图片中看到的表指向单元格G12,其中的值为B2:B17。得到B2:B17范围的公式为:

=SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(G4&"1"))+1,4),"1","")&SUBSTITUTE(G4,SUBSTITUTE(ADDRESS(1,MATCH(G$2,purchasing!$1:$1,0)-1,4),"1",""),"")&":"&SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(G5&"1"))+1,4),"1","")&SUBSTITUTE(G5,SUBSTITUTE(ADDRESS(1,MATCH(G$2,purchasing!$1:$1,0)-1,4),"1",""),"")

因此,如果我这样做,我必须用范围表中的值替换所有A1:E17,然后我将如何处理该行(1:17)?这个解决方案不是要使用很多计算机资源吗?因为它有上千个单元格的范围,即使我的shet从第1行到第108行,然后从第1个单元格到大约50个单元格。请尝试一下,然后报告:-)我正在使用你给出的示例。Excel仍然可以处理您指定的尺寸。您还可以使用动态命名范围并将其替换到公式中,尽管您需要一种方法来返回要匹配的列数组。我不认为您会有问题,但您始终可以切换到vba解决方案。只要我将第一个A1:A17更改为间接(范围!B2),它就不再起作用,所以您现在正在更改问题?间接法的目的是什么?它不会返回索引所需的范围对象。
=SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(G4&"1"))+1,4),"1","")&SUBSTITUTE(G4,SUBSTITUTE(ADDRESS(1,MATCH(G$2,purchasing!$1:$1,0)-1,4),"1",""),"")&":"&SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(G5&"1"))+1,4),"1","")&SUBSTITUTE(G5,SUBSTITUTE(ADDRESS(1,MATCH(G$2,purchasing!$1:$1,0)-1,4),"1",""),"")