我正在尝试创建一个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 C
到H
分配给产品图片网址。如果SKU没有六张图片,这些额外的列应为空。
答案 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
将简单地生成一个布尔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¹ function与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")
根据需要填写。
¹ Excel 2010引入了AGGREGATE function。早期版本不提供。