Комбинаторика в заменителях - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы заменить одну повторяющуюся строку в списке ячеек несколькими вариантами строк, чтобы получить список всех возможных комбинаций.

Для лучшего понимания я подготовил для вас лист: https://docs.google.com/spreadsheets/d/1SKvwWIE9LqM9pYZ90r68h3Sl_Bl8Keid21Y0ukokqUM/edit?usp=sharing

В этом примере у меня есть список выражений (A2: A), которые все включают слово «следующий», которое я хотел бы заменить всеми доступными параметрами (B2: B), чтобы создать списоквсе возможные комбинации (C2: C)

Я знаю, что для создания всех возможных комбинаций A2: A и B2: BI можно использовать: = ArrayFormula (transpose (split (rept (сцепленный (A2: A & char (9)), countta (B2: B)), char (9))) & "" & transpose (split (сцепление (rept (B2: B & char (9), countta (A2: A)))), char (9))))

1 Ответ

0 голосов
/ 18 декабря 2018

То, что вы хотите сделать, это найти и заменить.Это делает то, что вы хотите:

=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 в первом массиве и заменить его словом во втором массиве.Чтобы найти слово далее , я использовал FIND("next", PHRASE1).Это дает мне отправную точку для фазы замены.Давайте назовем это START.

Наконец, замена проста: REPLACE(PHRASE1, START, 4, PHRASE2).Это то, что вы видите в коде выше.

Я проверил это, и оно работает.

...