【问题标题】:Combinatorics in Substitutes替代组合学
【发布时间】:2019-05-19 00:50:29
【问题描述】:

我想用多个字符串选项替换单元格列表中的一个重复出现的字符串,以接收所有可能组合的列表。

为了更好地理解,我为您准备了一张表格: https://docs.google.com/spreadsheets/d/1SKvwWIE9LqM9pYZ90r68h3Sl_Bl8Keid21Y0ukokqUM/edit?usp=sharing

在此示例中,我有一个表达式列表 (A2:A),其中都包含单词“next”,我希望将其替换为所有可用选项 (B2:B),以创建所有可能组合的列表(C2:C)

我知道为了创建 A2:A 和 B2:B 的所有可能组合,我可以使用: =ArrayFormula(转置(拆分(rept(连接(A2:A&char(9)),counta(B2:B)),char(9))) &" "&transpose(split(concatenate(rept(B2:B&char(9),counta(A2:A))),char(9))))

【问题讨论】:

  • Dennis,最好将您的数据示例放在消息正文中,这样问题就不会依赖第三方服务来保持其有效性。我已经通过我的编辑为您完成了这项工作。希望我下面的回答也有帮助。

标签: excel google-sheets formula array-formulas google-sheets-formula


【解决方案1】:

您要做的是查找和替换。这就是你想要的:

=ARRAYFORMULA(
        REPLACE( TRANSPOSE( SPLIT( REPT( CONCATENATE(A2:A & CHAR(9)), COUNTA(B2:B) ), 
                                   CHAR(9)
                                 )
                          ), 
                 FIND( "next", TRANSPOSE( SPLIT( REPT( CONCATENATE(A2:A & CHAR(9)),
                                                       COUNTA(B2:B)
                                                     ),
                                                 CHAR(9)
                                               )
                                        )
                     ),
                 4,
                 TRANSPOSE( SPLIT( CONCATENATE( REPT( B2:B & CHAR(9), COUNTA(A2:A) ),
                                                CHAR(9)
                                              ),
                                   CHAR(9)
                                 )
                          )
               )
             )

说明

短语TRANSPOSE( SPLIT ( REPT( CONCATENATE(A2:A & CHAR(9)), COUNTA(B2:B) ), CHAR(9) )) 创建一个列,该列重复A 列中的项目的次数与B 列中的项目一样多。该模式一遍又一遍地重复整个列表。我会打电话给PHRASE1

短语TRANSPOSE( SPLIT( CONCATENATE( REPT( B2:B & CHAR(9), COUNTA(A2:A)), CHAR(9) ), CHAR(9) )) 创建一个列,该列重复B 列中的项目的次数与A 列中的项目一样多。该模式一遍又一遍地重复每个项目。我会打电话给PHRASE2

现在你有两个大小相等的数组。目标是在第一个数组中找到单词 next 并将其替换为第二个数组中的单词。为了找到next这个词,我使用了FIND("next", PHRASE1)。这给了我替换阶段的起点。我们称之为START

最后,替换很简单:REPLACE(PHRASE1, START, 4, PHRASE2)。这就是您在上面的代码中看到的内容。

我已经测试过了,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多