Декартово произведение

Автор rain, 24.03.21, 11:33:50

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

rain

может быть у кого-то есть пример макроса для excel, который генерирует декартово произведение?
конкретный случай: есть изделия с обозначениями К-А-Н, К-Б-Н, К-В-Н, К-Г-Н, ..., К-М-Ю, К-М-Я.
создаем таблицу в экселе с такими ячейками:
К   А   Н
     Б   О
     В   П
     ...   ...
     М   Я
Нужно, чтобы макрос прочитал эти ячейки и составил из них все возможные варианты обозначений склейкой значений из этих ячеек.
хочу посмотреть именно сам макрос, чтобы понять принцип, т.к. с VBA знаком весьма поверхностно, чтобы писать с нуля

IgorT

Именно макрос нужен?
Тупо формулы прописать не интересует?

pr0100

#2
Возможно поможет.
https://www.youtube.com/watch?v=qDSBZQ8Kqh0&t

import itertools
l=list(itertools.combinations_with_replacement('АБВГД',3))
#pr
for i in l:
    print(i)

'''
('А', 'А', 'А')
('А', 'А', 'Б')
('А', 'А', 'В')
('А', 'А', 'Г')
('А', 'А', 'Д')
('А', 'Б', 'Б')
('А', 'Б', 'В')
('А', 'Б', 'Г')
('А', 'Б', 'Д')
('А', 'В', 'В')
('А', 'В', 'Г')
('А', 'В', 'Д')
('А', 'Г', 'Г')
('А', 'Г', 'Д')
('А', 'Д', 'Д')
('Б', 'Б', 'Б')
('Б', 'Б', 'В')
('Б', 'Б', 'Г')
('Б', 'Б', 'Д')
('Б', 'В', 'В')
('Б', 'В', 'Г')
('Б', 'В', 'Д')
('Б', 'Г', 'Г')
('Б', 'Г', 'Д')
('Б', 'Д', 'Д')
('В', 'В', 'В')
('В', 'В', 'Г')
('В', 'В', 'Д')
('В', 'Г', 'Г')
('В', 'Г', 'Д')
('В', 'Д', 'Д')
('Г', 'Г', 'Г')
('Г', 'Г', 'Д')
('Г', 'Д', 'Д')
('Д', 'Д', 'Д')
'''

p3452

Цитата: pr0100 от 24.03.21, 12:15:30import itertools
l=list(itertools.combinations_with_replacement('АБВГД',3))
#pr
for i in l:
    print(i)...

"Перестановки" и "Декартово произведение" это, немного, разное...

Да и ТС надо, в готовом виде, всего лишь:
- Таблицу в Excel, а еще лучше, макрос ее генерирующий,
- Макрос выполняющий "Декартово произведение",
- Итоговая таблица в Excel!

rain

Цитата: p3452 от 24.03.21, 13:14:07"Перестановки" и "Декартово произведение" это, немного, разное...

Да и ТС надо, в готовом виде, всего лишь:
- Таблицу в Excel, а еще лучше, макрос ее генерирующий,
- Макрос выполняющий "Декартово произведение",
- Итоговая таблица в Excel!
да, нужен именно макрос, чтобы посмотреть его принцип и сравнить с получающейся таблицей (списком).


формулами такое вряд ли получится. т.к. в конечном итоге будет около 15 колонок и 10 строк, которые нужно будет сочетать в различные наименования изделий

IgorT

Надо что бы макрос значения прописывал, или чтоб формулы в ячейки вставлял?

rain

Цитата: IgorT от 24.03.21, 14:07:19Надо что бы макрос значения прописывал, или чтоб формулы в ячейки вставлял?
чтобы формировал именно все возможные сочетания, прописывая значения

IgorT

Вечером по возможности попробую наваять. "Я на службе, сэр..." (с)

pr0100

Вы готовые таблицы приложите, то что на входе и на выходе должно получиться. Вряд ли по ТЗ, что описано в первом посте кто-то то будет заниматься. А так мажет кто откликнется.

rain

таблица вот такого типа. пустые ячейки - это один из вариантов, т.е. есть исполнения, в которых не используются данные из этих ячеек.
например, СЕНС DN25PN25; СЕНС-ПР DN50PN40; СЕНС-ПР DN80PN25-СВ-исп.В; СЕНС-ПР DN20PN25-200C-СВ-D18-Б и т.д.
причем там потом будут ограничения, например, если в названии есть 200С, то нельзя подставлять ДКП и ДКП01 (т.е. с 200С далее должна сочетаться только пустая ячейка), или например, если обозначение СЕНС-ПФ, то там не может быть значений А и Б (из столбца М).
в общем, задача-то достаточно сложная, поэтому и прошу какой-то пример, чтобы хотя бы для начала понять принцип работы макроса, а дальше буду разбираться с ограничениями

IgorT

Вчера пытался сделать макрос, в том виде кая понял задачу. Но не успешно. Запутался в алгоритме. Нужно ещё время, что бы закончить.
А тут оказывается
Цитата: rain от 25.03.21, 09:22:50...задача-то достаточно сложная, ...
Так и есть.

IgorT

Ну вот че-то получилось. Как я понял задачу.
Макрос примитивен, но работает.
Книга Excel 2003    VBA 2.xls
"В пианиста не стрелять! Играет как может." (с)

rain

Цитата: IgorT от 25.03.21, 21:30:20Ну вот че-то получилось. Как я понял задачу.
Макрос примитивен, но работает.
Книга Excel 2003    VBA 2.xls
"В пианиста не стрелять! Играет как может." (с)
огромное спасибо! для начала - как раз то, что нужно! немного понял, как это работает, буду пробовать подставлять свои значения и разбираться дальше