Перестановки в Excel - PullRequest
       8

Перестановки в Excel

3 голосов
/ 20 апреля 2011

У меня есть строка с 6 пробелами, например, 000000. Каждый пробел может содержать одну из трех цифр - 0, 1 или 2. Я знаю, что я могу получить всего 120 перестановок, используя функцию Permut в Excel, т.е.= PERMUT (6,3) = 120. Но я бы хотел, чтобы каждая ячейка переставляла каждую ячейку, например, 000001, 000010 и т. Д. В идеале конечный результат должен состоять из 120 строк уникальных 6-значных идентификаторов.

Пожалуйста, помогите, если вы знаете более быстрый способ сделать это, не вводя цифры вручную.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

В последнем сообщении на этой странице есть функция VBA.Скопируйте его в модуль VBA, затем в Excel создайте столбец целых чисел от 0 до n, где n = количество нужных идентификаторов.В следующем столбце вызовите функцию VBA со значением из первого столбца в качестве первого аргумента и 3 в качестве второго аргумента.Что-то вроде

Column A     Column b
0            =baseconv(A1, 3)
1            =baseconv(A2, 3)
2            =baseconv(A3, 3)
...          etc.

Ваши идентификаторы на самом деле являются просто инкрементными значениями, использующими систему счисления с основанием 3.Вы можете отформатировать вывод, чтобы получить начальные нули с помощью специального формата '000000'.

Кстати, с 6 позициями и 3 доступными значениями вы можете получить 3 ^ 6 или 729 уникальных идентификаторов

2 голосов
/ 20 апреля 2011

Во-первых, я не думаю, что вы используете PERMUT здесь правильно.PERMUT(6,3) дает вам общее количество способов упорядочить три вещи, выбранные из набора из шести.Таким образом, результат равен 120, потому что вы можете иметь 6 * 5 * 4 возможных перестановок.В вашем случае у вас есть 3 ^ 6 = 729 возможных строк, потому что каждая позиция имеет один из трех возможных символов.

Другие опубликовали отличные решения на основе VBA, но это не так сложно сделать вРабочий лист.Вот формула массива, которая будет возвращать массив из последних шести цифр троичного (base-3) представления числа:

=FLOOR(MOD(<the number>,3^({5,4,3,2,1,0}+1))/(3^{5,4,3,2,1,0}),1)

(Как указывает WarrenG, просто получая кучу базовых3 числа - это один из способов решения вашей проблемы.)

Вы бы вытащили цифры от 0 до 728 в столбце где-нибудь, скажем, $ A $ 1: $ A $ 729.Затем в $ B $ 1: $ G $ 1 поместите формулу:

=FLOOR(MOD(A1,3^({5,4,3,2,1,0}+1))/(3^{5,4,3,2,1,0}),1)

, не забывая вводить ее как формулу массива с помощью Ctrl-Shift-Enter.Затем перетащите его вниз через $ B $ 729: $ G $ 729.

Наконец, в ячейку $ H $ 1, поместите формулу:

=CONCATENATE(B1,C1,D1,E1,F1,G1)

и перетащите ее вниз через $ H $ 729.Вы сделали!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...