将INDEX MATCH公式更改为EXCEL中的数组公式

时间:2016-01-12 15:57:12

标签: arrays excel excel-formula

我正在尝试创建一个INDEX MATCH公式,该公式搜索包含jpegs列表的列,并返回以特定字符串开头的所有jpegs并将其转换为超链接。

目前我的公式只返回第一个实例,但我希望它能返回所有匹配项。

jpegs列表位于工作簿的column F上的(F1:F1000) Sheet 2。搜索中使用的字符串是column A, sheet 1中的产品SKU。

以下是我在C2 sheet 1上填写的有效非阵列版本,并填写完整版:

=IFERROR(
    HYPERLINK(
         CONCATENATE(sku_url,INDEX(Sheet2!$F$1:$F$1000,
             MATCH(A2&"*",Sheet2!$F$1:$F$1000,0),1))),
    "image not found")

这适用于column C,但如何将此公式填充到右侧,以便column D包含每个sku的第二个图像,E包含第三个图像,依此类推。我计划每个SKU的图片不超过六张,因此我已将columns CH分配给产品图片网址。如果SKU没有六张图片,这些额外的列应为空。

2 个答案:

答案 0 :(得分:1)

假设使用Excel 2010或更高版本:

=IF(COLUMNS($A:A)>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),"",IFERROR(HYPERLINK(CONCATENATE(sku_url,INDEX(Sheet2!$F:$F,AGGREGATE(15,6,ROW(Sheet2!$F$1:$F$1000)/(LEFT(Sheet2!$F$1:$F$1000,LEN($A2))=$A2),COLUMNS($A:A))))),"imagenotfound"))

作为解释的方式,最初的IF条款,即:

IF(COLUMNS($A:A)>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

很简单:

COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*")

简单地给出与该条件匹配的总行数,以及:

COLUMNS($A:A)

等于1,并在连续复制到右边时变为:

COLUMNS($A:B)

(等于2)

COLUMNS($A:C)

(等于3)

等等,这个子句在连续的列中等同于:

IF(1>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

IF(2>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

IF(3>COUNTIF(Sheet2!$F$1:$F$1000,$A2&"*"),""

等等,因此在初始条款为TRUE的单元格中将返回空白。

唯一需要注意的其他条款是在满足此条件时生成连续行号的数组。遗憾的是,由于技术原因,上述COUNTIF声明无法在AGGREGATE构建中使用。

幸运的是,我们可以使用COUNTIF的其他设置重现LEFT语句的结果。

暂时从F1:F1000到F1:F10减少有问题的范围以帮助解释,这部分:

LEFT(Sheet2!$F$1:$F$10,LEN($A2))=$A2

对于F1:F10中每个条目的语句结果,

将简单地生成一个布尔TRUE / FALSE返回数组。例如,我们可能有:

{FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}

当我们用这个布尔数组回报每个条目的等价行数时,即执行:

ROW(Sheet2!$F$1:$F$10)/(LEFT(Sheet2!$F$1:$F$10,LEN($A2))=$A2)

我们有:

{1;2;3;4;5;6;7;8;9;10}/{FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}

因为,当通过任何合适的数学运算(其中除法为1)强制执行时,布尔TRUE / FALSE值被强制转换为它们的等价数字TRUE = 1,{ {1}} = 0),上面变为:

FALSE

由于{#DIV/0!;2;#DIV/0!;4;5;#DIV/0!;7;#DIV/0!;9;#DIV/0!},第一个参数为15,指示在数组中找到最小值,并且第二个参数为6,指示忽略该数组中的任何错误值,剩下的就是设置该函数中的第四个参数 k ,它确定是否应返回第一个最小值,第二个最小值等。

再次,使用:

AGGREGATE

对于这个参数,我们知道会生成一系列连续的整数(1,2,3等)复制到右边,因此我们保证我们会将所需的行号返回给每个版本的公式

此致

答案 1 :(得分:0)

AGGREGATE¹ functionSMALL子功能( 15 )一起使用。当您向右填充时,调整 k 参数以增加COLUMN

B2中的标准(非数组)公式是

=IFERROR(
    HYPERLINK(
        CONCATENATE(sku_url, INDEX(Sheet2!$F:$F,
            AGGREGATE(15, 6, ROW($1:$999)/(LEFT(Sheet2!$F$1:$F$999, LEN($A2))=$A2), COLUMN(A:A))))),
    "image not found")

根据需要填写。

aggregate_first_Second

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。