在电子表格中,我有 A 列和 B 列中的值,我想得到 D 列中的结果。在 C 列中,我有以下公式。这是我最接近期望的结果:
=BYROW(ARRAYFORMULA(JOIN(" | "; TRANSPOR(SPLIT(B2; " | ";0)) & " " & TRANSPOR(SPLIT(A2; " | "))));LAMBDA(mem;SE(mem="";;
LET(cleaned; SUBSTITUIR(mem;" GB";"GB");
splitted; SPLIT(cleaned;" | ");
uniq; UNIQUE(TOCOL(splitted));
counts; BYROW(uniq;LAMBDA(each;CONT.SE(splitted;each)&" x "&each));
TEXTJOIN(" + ";1;counts)))))
以下是电子表格的表示:
高清界面 | 能力高清 | 用上面的公式得到的结果 | 想要的结果 |
---|---|---|---|
SATA | SATA/SSD | SATA | SATA | 500 GB | 240 GB | 240 GB 500GB| 500GB | 3 个 500GB + 3 个 SATA + 1 个 240GB + 1 个 SATA/SSD | 1 个 240GB SATA/SSD + 3 个 500GB SATA |
SATA/SSD | SATA | SATA | SATA/SSD | 256 GB | 500GB| 500GB| 256GB | 2 个 256GB + 2 个 SATA/SSD + 2 个 500GB + 2 个 SATA | 2 个 256GB SATA/SSD + 2 个 500GB SATA |
上面显示的结果的电子表格是这样的:
需要对 C 列中的公式进行哪些更改才能得出 D 列中的结果?
当前版本有 2 处更改
将
SPLIT(cleaned;" | ")
更改为 SPLIT(cleaned;" | ";0)
将
sort()
添加到 secondary_internal byrow()
最终公式:
=BYROW(ARRAYFORMULA(JOIN(" | "; TRANSPOSE(SPLIT(B2; " | ";0)) & " " & TRANSPOSE(SPLIT(A2; " | "))));LAMBDA(mem;IF(mem="";;
LET(cleaned; SUBSTITUTE(mem;" GB";"GB");
splitted; SPLIT(cleaned;" | ";0);
uniq; UNIQUE(TOCOL(splitted));
counts; sort(BYROW(uniq;LAMBDA(each;COUNTIF(splitted;each)&" x "&each)));
TEXTJOIN(" + ";1;counts)))))