连接两列中的相应值,将它们分组并将其术语的重复添加为“多个”

问题描述 投票:0回答:1

在电子表格中,我有 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 列中的结果?

google-sheets-formula
1个回答
0
投票

当前版本有 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)))))

© www.soinside.com 2019 - 2024. All rights reserved.