Excel匹配,偏移,多列索引

时间:2018-09-15 13:09:29

标签: excel indexing match lookup offset

我想找到相应客户的值PO#发票#报价#等。&客户列表在不同的多列中提到。

使用的公式为:= INDEX(D16,D17,2,MATCH('客户采购单和发票明细'!A1:ACZ25,'客户采购单和发票明细'!A1:ACZ1,0))

使用匹配偏移量索引查找所需的查找功能 Pic

2 个答案:

答案 0 :(得分:1)

您的数据暂存确实效率很低。如果您创建了一个客户编号列,并且垂直而不是水平扩展了数据,那么您真的可以省去很多麻烦。例如,如果以这种方式组织数据,则可以使用数据透视表来大大简化此问题。

除非对数据结构进行更改,否则可以针对偏移范围对日期进行vlookup:

=VLOOKUP($D$17,OFFSET('Client PO & Invoice Details'!$A$1,0,MATCH($D$16,'Client PO & Invoice Details'!$1:$1,0)-1,1048575,6),2,FALSE)

此公式应放在ID和日期过滤器下方的D18:D22中。您需要将vlookup索引增加到公式的末尾(...,2,FALSE)来获取您要查找的特定列。在随后的公式中2必须更新为3、4、5和6获取每个值。

首先,该公式在第1行中找到您的客户编号,然后该偏移量从找到该客户编号的列开始定义一个6列宽的范围,最后vlookup照常工作,方法是在该客户的第一列中找到日期偏移范围并返回索引列的值。

答案 1 :(得分:0)

INDEX(range you want to look in,  how many rows down from the top of your range, how many columns to the right)

这是索引的基本用法。如果范围是单行或单列,则仅需要第二个条目,并且它要向下到范围多远。另一个小警告是,如果您为0的行或列设置为0。 0将使索引返回整个对应的行或列。

首先要查看要查看的一组列。您需要将D16(client#)与标题行中的相应条目进行匹配。为此,MATCH是一个不错的选择。

=MATCH(value you are looking for,  range you want to look in, and what type of match)

以您的情况

=MATCH($D$16,'Client PO & Invoice Details'!$1:$1,0)

$ 1:$ 1是电子表格的整个第一行。如果将公式向上/向下复制到另一个单元格,则$将使行号保持不变。最后的0告诉函数您要精确匹配,而不是近似类型匹配。执行完此功能后,您将知道要开始查找的列。

因此,现在您需要弄清楚要使用的行,然后开始提取数据。使用VLOOKUP可能会失败。您可以使用OFFSET函数定义范围。但是,我将走另一条路。我将再次使用MATCH根据确定的列来确定要查看的行

=INDEX('Client PO & Invoice Details'$A:$ACZ,0,MATCH($D$16,'Client PO & Invoice Details'!$1:$1,0))

此索引将转到与该匹配项一起找到的列中的所有行。因此,现在我们需要对这些结果进行匹配,以找出您要处理的行。这样,我们得到的公式如下:

=MATCH($D$17,INDEX('Client PO & Invoice Details'$A:$ACZ,0,MATCH($D$16,'Client PO & Invoice Details'!$1:$1,0)),0)

现在,您知道正在使用的行和正在使用的列,现在可以使用INDEX提取所需的数据。

在D18中放置以下公式

=INDEX('Client PO & Invoice Details'$A:$ACZ,MATCH($D$17,INDEX('Client PO & Invoice Details'$A:$ACZ,0,MATCH($D$16,'Clent PO & Invoice Details'!$1:$1,0)),0),MATCH($D$16,'Client PO & Invoice Details'!$1:$1,0)+1)

在D19中使用相同的公式,但将+1更改为+2。继续执行此操作,每次下降时将+#加1。

基于注释,您将在添加客户端时添加列,每次添加客户端时都需要调整公式。有多种方法可以自动执行此操作,但在这种情况下,最好采用偏移路线。

请注意,用于分组客户的列的数量有限。