我有一个Google电子表格设置;它是产品导入的。我试图遍历所有行,当C2:C =="可配置"我希望它加入(用逗号)所有B2:B单元格,它们以当前"可配置的"中的B的内容开头。行。
例如,该表可能看起来像this.
Name | SKU | Type | Simple Products
Prod 1 | 001 | configurable | 001.01,001.02
Prod 2 | 001.01 | simple |
Prod 3 | 001.02 | simple |
Prod 4 | 002 | configurable | 002.01,002.02,002.03
Prod 5 | 002.01 | simple |
Prod 6 | 002.02 | simple |
Prod 7 | 002.03 | simple |
"简单产品"列(D2)是公式所在的位置。它将扫描每一行,如果C * =可配置,那么它将使用B *值来查找所有" simple"以B *中的值开头的SKU。
我几乎使用了以下公式:
=ARRAYFORMULA(
IF(
C3:C="configurable",
join(
",",
transpose(
iferror(
filter(
B3:B,
C3:C="simple",
RegExMatch(B3:B, B3)
)
)
)
),
""
)
)
但是,上面总是使用B3作为RegExMatch,因此每个可配置行包含001.01,001.02
而不是当前正在输出数据的行。
答案 0 :(得分:2)
尝试:
=ArrayFormula(IF(C2:C="configurable",REGEXREPLACE(TRIM(REGEXEXTRACT(QUERY(B2:B,,ROWS(B2:B))&" ","(?:"&B2:B&"\.[0-9]+ )+"))," ",","),))
虽然根据您的样本数据做出了一些假设(例如,SKU已经过排序)。
您尝试的问题是FILTER功能无法重复列。
感谢Isai Alvarado提出构建非常大的字符串的QUERY方法;大于通常施加的50k字符限制。