将INDEX MATCH公式更改为EXCEL中的数组公式
我正在尝试创build一个INDEX MATCH
公式,该公式search包含jpegs
列表的列,并返回以特定string开头的所有jpegs
,并将它们转换为超链接。
目前我的公式只返回第一个实例,但我希望它返回所有匹配。
jpeg列表位于工作簿的工作Sheet 2
的column F
(F1:F1000)
。 search中使用的string是column A, sheet 1
的产品SKU。
这里是工作非数组版本,我已经在sheet 1
中的C2
input并填写:
=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的图片数不超过6张,因此我已经将columns C
到H
分配到产品图片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}
并且由于当被任何合适的math运算(其中除法是一)所强制时,布尔TRUE
/ FALSE
值被强制为它们的数值等值( TRUE
= 1, FALSE
= 0),上面变成:
{#DIV/0!;2;#DIV/0!;4;5;#DIV/0!;7;#DIV/0!;9;#DIV/0!}
由于AGGREGATE
(第一个参数为15)指示查找数组中的最小值,第二个参数为6指示忽略该数组中的任何错误值,剩下的就是设置该数组中的第四个参数函数k ,它确定是否应该返回第一小,第二小等等值。
再次,通过使用:
COLUMNS($A:A)
对于这个我们知道的参数会产生一系列连续的整数(1,2,3等等)复制到右边,我们保证我们将返回所需的行号给每个版本的公式。
问候
使用SMALL子functionAGGREGATE¹function ( 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")
根据需要填写。
¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。