Страницы: 1
RSS
Получить все взможне варианты объединения букв из 5 столбцов
 
Помогите пожалуйста написать формулу (а может у кого есть что-то подобное) для перебора вариантов. Суть такая: в первой позиции может встречаться четыре варианта букв (G или T или A или C), во второй позиции два варианта букв (C или A) - нужна формула для получения всех возможных вариантов. Пример прикрепляю.
 
Пишете о двух позциях, в примере - 5...
 
Цитата
vikttur написал:
Пишете о двух позциях, в примере - 5...
комбинаторика однако :-)
По вопросам из тем форума, личку не читаю.
 
На PQ:
Код
// Таблица1
let
    Буквы = {"G","T","A","C"},
    Таблица = Table.FromRecords({[1=Буквы, 2 = {"A","C"}, 3 = Буквы, 4 = Буквы, 5 = Буквы]}),
    #"Развернутый элемент 1" = Table.ExpandListColumn(Таблица, "1"),
    #"Развернутый элемент 2" = Table.ExpandListColumn(#"Развернутый элемент 1", "2"),
    #"Развернутый элемент 3" = Table.ExpandListColumn(#"Развернутый элемент 2", "3"),
    #"Развернутый элемент 4" = Table.ExpandListColumn(#"Развернутый элемент 3", "4"),
    #"Развернутый элемент 5" = Table.ExpandListColumn(#"Развернутый элемент 4", "5"),
    #"Объединенные столбцы" = Table.CombineColumns(#"Развернутый элемент 5",{"1", "2", "3", "4", "5"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Комбинации")
in
    #"Объединенные столбцы"

Цитата
vikttur написал:
Пишете о двух позциях, в примере - 5...
5 столбцов, а небольшое правило усечения определено для 2го :)
Изменено: Максим Зеленский - 23.07.2020 19:09:28
F1 творит чудеса
 
=INDEX($B$5:B8;MOD(INT((ROW(A1)-1)/COUNTA($E$5:$E$8)/COUNTA($F$5:$F$8)/COUNTA($D$5:$D$8)/COUNTA($C$5:$C$8));COUNTA($B$5:$B$8))+1)&
INDEX($C$5:$C$8;MOD(INT((ROW(A1)-1)/COUNTA($E$5:$E$8)/COUNTA($F$5:$F$8)/COUNTA($D$5:$D$8));COUNTA($C$5:$C$8))+1)&
INDEX($D$5:$D$8;MOD(INT((ROW(A1)-1)/COUNTA($E$5:$E$8)/COUNTA($F$5:$F$8));COUNTA($D$5:$D$8))+1)&
INDEX($E$5:$E$8;MOD(INT((ROW(A1)-1)/COUNTA($F$5:$F$8));COUNTA($E$5:$E$8))+1)&
INDEX($F$5:$F$8;MOD(ROW(A1)-1;COUNTA($F$5:$F$8))+1)


А так массивненько но прикольненько
=INDEX($B$5:B8;MOD(INT((ROW(A1)-1)/PRODUCT(MMULT(TRANSPOSE(ROW($F$5:$F$8))^0;N(C$5:$F$8<>""))));COUNTA($B$5:$B$8))+1)&
INDEX($C$5:$C$8;MOD(INT((ROW(A1)-1)/PRODUCT(MMULT(TRANSPOSE(ROW($F$5:$F$8))^0;N(D$5:$F$8<>""))));COUNTA($C$5:$C$8))+1)&
INDEX($D$5:$D$8;MOD(INT((ROW(A1)-1)/PRODUCT(MMULT(TRANSPOSE(ROW($F$5:$F$8))^0;N(E$5:$F$8<>""))));COUNTA($D$5:$D$8))+1)&
INDEX($E$5:$E$8;MOD(INT((ROW(A1)-1)/PRODUCT(MMULT(TRANSPOSE(ROW($F$5:$F$8))^0;N(F$5:$F$8<>""))));COUNTA($E$5:$E$8))+1)&
INDEX($F$5:$F$8;MOD(ROW(A1)-1;COUNTA($F$5:$F$8))+1)
Изменено: БМВ - 23.07.2020 19:49:49
По вопросам из тем форума, личку не читаю.
 
Всем спасибо! Особенно понравилась не массивная формула БМВ, её при желании легко можно переделать на большее количество позиций. Правда она не идеальная, потому что делает дубликаты, причем по три штуки через ячейку, но они легко удаляются функцией "Удалить дубликаты". Большое спасибо БМВ!
 
Цитата
dim284 написал:
причем по три штуки через ячейку,
уупс, не доглядел. надо посмотреть. подправить, только в данных а не в формуле. Если там GAG, то вот и повторяется.
Изменено: БМВ - 23.07.2020 23:39:32
По вопросам из тем форума, личку не читаю.
 
Точно, это я не доглядел, проблема в данных. Формула замечательная. Ещё раз спасибо!
 
Цитата
dim284 написал:
Формула замечательная.
а вот
Цитата
dim284 написал:
не массивная формула БМВ, её при желании легко можно переделать на большее количество позиций.
странно, вторая как раз для этого проще. Добавили блок и изменили диапазон, при этом формула растет только на длинну этого блока, а первая растет и блок тоже дополнительный.
По вопросам из тем форума, личку не читаю.
 
А разве не проще с доп.столбцами и доп. вычислениями сделать?
и реализовать легче и править и т.п.
 
Действительно, разобрался с массивной формулой, в общем можно работать. А вот вариантик от MCH вообще бомба, очень легко добавлять дополнительные позиции, при этом другие столбцы просто копируются и ничего в формулах менять не надо. Единственное, конечная формула объединяющая буквы не удобная, которая выглядит так =J5&K5&L5&M5&N5. Я пользуюсь функцией =ЁXCEL_Сцепить из надстройкой ЁXCEL. Кстати, не кто не подскажет как "вытащить" код этой функции из надстройки (простите модераторы что в этой теме).
 
Цитата
MCH написал:
А разве не проще с доп.столбцами и доп. вычислениями сделать?
это не интересно :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
dim284 написал:
как "вытащить" код этой функции из надстройки
Если использовать UDF-функции, то проще сразу решать исходную задачу.
Владимир
 
Ну тогда можно было бы на макросах сделать: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=65018
Также в "приемах" есть подобный пример: https://www.planetaexcel.ru/techniques/7/7203/
 
Цитата
MCH написал:
Ну тогда можно было бы на макросах сделать
ну совсем не интересно  :D
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх