我有一份包含所有产品规格的电子表格。一组列通过在单元格中输入 X(或“是”)或任何字符来指示产品具有哪些认证。(屏幕截图中的 AD 列)
以屏幕截图为例,我想要做的是,有另一组列 (EH) 引用列 AD 并填充适用的认证图像路径,从左侧填充它们。所以不应该有空隙。
对于屏幕截图,我手动输入了 EH 单元格以显示所需的结果。我还缩短了文本,这样图像就不会太宽。图像路径应该类似于“/volume/marketing/certs/UL.png”。
我有第一列要使用: =IF(ISBLANK(A10),(IF(ISBLANK(B10),(IF(ISBLANK(C10),(IF(ISBLANK(D10),””,”UL-C”)),”ESTAR”)),”EMF”)),”UL”)
我一直在尝试对 FH 列使用嵌套的 IF 和 ISBLANK 公式,但很明显这将是一个很长的公式,因此在继续使用嵌套的 IF/ISBLANK 方法之前,我想看看是否有更简单的方法。
谢谢!
1
最佳答案
4
这是您需要使用FILTER()
函数执行的操作:
=FILTER($A$1:$D$1,A2:D2<>"","")
或者,单个数组公式:
=LET(
a, A2:D8,
IFNA(DROP(REDUCE("",SEQUENCE(ROWS(a)),LAMBDA(x,y,
VSTACK(x,FILTER(A1:D1,INDEX(a,y,)<>"","")))),1),""))
2
-
谢谢 Mayukh。我在我的示例文件中尝试了此操作,并且它按描述工作,尽管如果该行现在没有认证被选中,我会收到 #CALC!错误。
– -
@SeanLarkin 您需要指定
FILTER()
函数的最后一个参数以避免#CALC!
错误:=FILTER($A$1:$D$1,A2:D2<>"","")
请立即尝试
–
|
-
使用映射认证
REPT(certs, has_cert)
,其中has_cert
= 1 表示非空
-
使用将值“压缩”到左侧
-
定义一个表来保存图像路径 – 例如’imgPath’
- 然后
XLOOKUP(certs_maped,imgPath[Cert], imgPath[Path])
- 然后
证书 | 小路 |
---|---|
电磁场 | /volume/marketing/certs/EMF.png |
艾斯达 | /volume/marketing/certs/ESTAR.png |
UL | /volume/marketing/certs/UL.png |
UL-C | /volume/marketing/certs/UL-C.png |
=LET(certs, A1:D1, has_cert, --(A2:D8 <> ""),
certs_maped, IF(has_cert, REPT(certs, has_cert), NA()),
img_paths, XLOOKUP(certs_maped,imgPath[Cert], imgPath[Path]),
acc_left, REDUCE(
"Collect to left",
SEQUENCE(ROWS(img_paths)),
LAMBDA(acc,r, VSTACK(acc, IFERROR(TOROW(INDEX(img_paths, r, ), 2), "")))
),
IFNA(DROP(acc_left, 1), "")
)
10
-
谢谢 nkalvi。我尝试了这个公式,它运行良好,但当我有一行产品没有任何认证时,因此没有检查任何内容。当发生这种情况时,所有 cert img 列都变为空白,我在单元格 E2 中得到了 #CALC!。
– -
@SeanLarkin – 我已经更新了答案,有机会时请检查一下。
– -
好了,不再出现 CALC 错误。谢谢。我可以解决这个问题,但我有一个后续问题,只是出于好奇。有没有办法将图像路径编码到公式中,而不是根据 AD 的标题行构建它们?如果这太复杂而无法得到友好的帮助,那么不用担心;您的公式已经是我需要的解决方案。
– -
@SeanLarkin,很高兴您问到这个问题 🙂 – 定义一个简单的 1) 在名称管理器 > 新建
img_path
(可以是任何名称)中将名称作为=LAMBDA(filename, "/volume/marketing/certs/" & filename & ".png")
公式(引用)。然后您可以在工作簿中的任何位置使用单个或多个参数;例如=img_path("UL-C")
或 =img_path(a2:a10)`。
– -
1@SeanLarkin,转到表格选项卡或名称管理器,确保表格已命名
imgPath
(默认为 Tablexx)。列名称需要为Cert
和Path
。当然,您可以更改其中任何一项,但需要更新公式。请让我知道进展如何。
–
|
将不需要的值移到右侧第 2 卷
- 您的问题类似于对。
=LET(table,A1:D11,
dd,DROP(table,1),
d,IF(dd="","",TAKE(table,1)),
rc,ROWS(d),
cc,COLUMNS(d),
WRAPROWS(SORTBY(TOCOL(d),TOCOL(SEQUENCE(rc,cc)
+SEQUENCE(rc)*cc+(d="")*cc)),cc))
|
在单元格 E2 中添加:=IF(ISBLANK(A2),””,$A$1)
对于第 2 行的第一个单元格,在其余数据中,IF 公式最后一部分中锁定的单元格范围需要更改为单元格 A1 至 D1 中的相应值。如果是表格,则应可以使用快速填充,或者从右下角向下拖动公式。
|
–
|