繁体   English   中英

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

[英]Change INDEX MATCH formula to an array formula in EXCEL

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

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

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

这是我在sheet 1 C2输入并填写的工作非数组版本:

=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 columns C分配给产品图像URL。 如果SKU没有六个图片,则这些多余的列应为空。

假设使用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结构中使用。

幸运的是,我们可以使用另一个带有LEFT设置来重现该COUNTIF语句的结果。

为了帮助说明,暂时将相关范围从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, FALSE = 0),因此上述内容变为:

{#DIV/0!;2;#DIV/0!;4;5;#DIV/0!;7;#DIV/0!;9;#DIV/0!}

由于第一个参数为15的AGGREGATE被指示在数组中找到最小值,第二个参数为6的AGGREGATE被指示忽略该数组中的任何错误值,因此剩下的就是在该数组中设置第四个参数。函数k ,确定是否应返回第一个最小值,第二个最小值等。

同样,通过使用:

COLUMNS($A:A)

对于该参数,我们知道它将生成一系列连续的整数(1、2、3等),如右图所示,因此我们保证将所需的行号返回给公式的每个版本。

问候

AGGREGATE¹功能SMALL功能一起使用( 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


¹AGGREGATE函数是Excel 2010引入的。在早期版本中不可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM