尝试使用ARRAYFORMULA和RegExMatch循环遍历另一个单元格内容的所有单元格

时间:2014-08-27 16:37:25

标签: google-sheets

我有一个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而不是当前正在输出数据的行。

1 个答案:

答案 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字符限制。