返回两个范围之间所有匹配的数组

时间:2015-06-04 17:05:50

标签: excel

好的,所以我试图将常用的教程数组公式更进一步,但无法弄清楚如何。

基本上我有一组包含以下值的表格:

| Sheet 1                       || Sheet 2              |
| Products(1)   | Product Group || Products(2)   | Data |
|               |               ||               |      |
| 100           | 1             || 100           | abc  |
| 200           | 2             || 200           | def  |
| 300           | 3             || 200           | ghi  |
| 400           | 3             || 500           | jkl  |
| 500           | 2             || 400           | mno  |

工作表1列出了对每个产品进行分类的所有参数,并使用这些参数将每个产品分配给一个组。 Essentially Products是一个独特的索引键。

工作表2是每次产品运行时的跟踪列表,它是如何运行的。因此,产品编号可能会多次显示或根本不显示。

我有第三张纸,其中输入了产品编号,从中计算了其组编号,并在纸张1中搜索具有该组编号的所有产品,并使用数组公式返回列表(使用本教程{ {3}}由不同的人在线显示)。我们将在表3中将其称为“列K”。

我现在要做的是更进一步,从表2返回“数据”,以获取“表2”,“产品(2)”和“表3”之间的所有匹配!“列K”。如果“Column K”被修复了,我可以再次使用相同的公式,并在IF表达式中添加一个OR语句,但由于K是动态填充的,我不知道如何找到它们。

为了澄清,我最理想的结果是:

| Sheet 3                                                 |
| Product Num   | Column K    | Column L    | Column M    |
| (user enters) | (automatic) | (automatic) | (automatic) |
| 500           | 200         | 200         | def         |
|               | 500         | 200         | ghi         |
| Product Group |             | 500         | jkl         |
| (automatic)   |             |             |             |
| 2             |             |             |             |

1 个答案:

答案 0 :(得分:0)

如果将列向量与数组公式中的行向量进行比较,则会将列中的每个值与行中的每个值进行比较。因此,以下内容可行,因为我们会先将Sheet3!K1:K[n]中的值转换为行向量,然后再与Sheet2!$A$1:$A$10000进行比较。

Sheet 1中: Sheet1

Sheet 2中: Sheet2

表Sheet 3: Sheet3

Sheet3中的公式:

A5

=VLOOKUP($A$2,Sheet1!$A:$B,2,FALSE)

K2向下:

{=IFERROR(INDEX(Sheet1!$A$1:$A$10000,SMALL(IF(Sheet1!$B$1:$B$10000=$A$5,ROW(Sheet1!$B$1:$B$10000)),ROW(1:1))),"")}

L2向下:

{=INDEX(Sheet2!$A$1:$A$10000,SMALL(IF(Sheet2!$A$1:$A$10000=TRANSPOSE($K$1:INDEX($K:$K,MAX(IF($K$1:$K$10000<>"",ROW($K$1:$K$10000))))),ROW(Sheet2!$A$1:$A$10000)),ROW(1:1)))}

M2向下:

{=INDEX(Sheet2!$B$1:$B$10000,SMALL(IF(Sheet2!$A$1:$A$10000=TRANSPOSE($K$1:INDEX($K:$K,MAX(IF($K$1:$K$10000<>"",ROW($K$1:$K$10000))))),ROW(Sheet2!$A$1:$A$10000)),ROW(1:1)))}

K2L2M2中的公式是数组公式。在没有大括号的情况下输入它们,然后按[Ctrl] + [Shift] + [Enter]。

K[n]中对Sheet3!K1:K[n]的引用是使用

计算的
INDEX($K:$K,MAX(IF($K$1:$K$10000<>"",ROW($K$1:$K$10000))))

其中

MAX(IF($K$1:$K$10000<>"",ROW($K$1:$K$10000)))

获取列K中最大的行号,其中内容不等于&#34;&#34;。

如果产品编号是数字,则更容易,也可以对结果进行排序。

Sheet1和sheet2见上文。

表Sheet 3: Sheet3

Sheet3中的公式:

A5中:见上文

K2向下:

{=IFERROR(SMALL(IF(Sheet1!$B$2:$B$10000=$A$5,Sheet1!$A$2:$A$10000),ROW(1:1)),"")}

L2向下:

{=SMALL(IF(Sheet2!$A$2:$A$10000=TRANSPOSE($K$2:INDEX($K:$K,MATCH(MAX($K:$K),$K:$K))),Sheet2!$A$2:$A$10000),ROW(1:1))}

M2向下:

{=INDEX(Sheet2!$B$1:$B$10000,SMALL(IF(Sheet2!$A$1:$A$10000=$L2,ROW(Sheet2!$A$1:$A$10000)),COUNTIF($L$2:$L2,L2)))}