Генерация комбинаций в Excel

13059
Jonathan Mee

У меня есть строка ввода, которая содержит клетки:

  • 30
  • 30
  • 30
  • 50
  • 50
  • 60
  • 100

Я хочу сгенерировать все возможные комбинации длины 3 из этого набора. Поэтому я хотел бы, чтобы строки содержали 3 заполненных ячейки, а элементы каждой строки содержали уникальный набор, не зависящий от порядка. Другими словами, у меня не было бы 50, 30, 50 и 30, 50, 50.

Я сделал это вручную, так что это может быть не идеально, но я считаю, что мой вывод должен быть:

  • 30, 30, 30
  • 30, 30, 50
  • 30, 30, 60
  • 30, 30, 100
  • 30, 50, 50
  • 30, 50, 60
  • 30, 50, 100
  • 30, 60, 100
  • 50, 50, 60
  • 50, 50, 100
  • 50, 60, 100

Я знаю, что могу генерировать их с помощью VBA, но я хотел бы знать: есть ли в Excel какие-либо собственные команды для генерации этих строк?

4
Почему не 30 30 100? Raystafarian 8 лет назад 0
@Raystafarian Stink, а 30, 30, 60 я отредактировал. Jonathan Mee 8 лет назад 0
Разве 30 30 60 не совпадает с 30 60 30? Raystafarian 8 лет назад 0
@Raystafarian Еще раз, это должно было прочитать 30, 60, 60 Jonathan Mee 8 лет назад 0
@Raystafarian вау! Есть только 1х60. Как бы то ни было, я думаю, что сейчас. Благодарю. Jonathan Mee 8 лет назад 0

2 ответа на вопрос

10
Mekki MacAulay

You can use the CROSSJOIN function in Excel (PowerPivot add-in required for Excel 2010 & 2013 which you can download for free from Microsoft). Details about the CROSSJOIN function can be found on the MSDN website.

In sum, set up your base data as two (duplicate) tables table1 & table2 making sure they have different column names, then use CROSSJOIN(table1, table2).

4
Chris

If you haven't seen this link already, it could be of use. There are some formula examples down the bottom. https://stackoverflow.com/questions/10692653/excel-vba-to-create-every-possible-combination-of-a-range

However, the CROSSJOIN answer above is a much cleaner way.

Похожие вопросы