3

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

Кроме того, мой вопрос также требует, чтобы варианты также показывали все возможные порядки входных данных. Предлагаемый дубликат всегда показывает столбец A в самой левой позиции вывода, столбец b в середине вывода и столбец c слева от вывода.

Таким образом, предлагаемый дубликат не отвечает на мой вопрос.


Оригинальный вопрос

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

Например, если входные значения, как указано ниже

One
Two

Сгенерированный вывод должен быть примерно таким

One
OneTwo
Two
TwoOne

Вот как это должно выглядеть, если даны 3 значения:

Кто-нибудь знает, как это сделать в Excel?

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

Я дал это попробовать https://www.ozgrid.com/forum/forum/help-forums/excel-vba-macros/146983-all-possible-combination-from-single-column, но, похоже, это не работает ,

В столбце А, если я наберу (одно слово в строке):

One
Two
Three

В столбце B VBA дает мне (в одной ячейке):

one,two,three

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

2 ответа2

4

Следующий скрипт VBA создал для меня эту таблицу:

Это скрипт:

Option Explicit

Sub PermutationsN()
Dim vElements As Variant, vresult As Variant
Dim lRow As Long, i As Long

vElements = Application.Transpose(Range("A1", Range("A1").End(xlDown)))
Columns("B:Z").Clear

For i = 1 To UBound(vElements)
    ReDim vresult(1 To i)
    Call PermutationsNPR(vElements, i, vresult, lRow, 1)
Next i
End Sub

Sub PermutationsNPR(vElements As Variant, p As Long, vresult As Variant, lRow As Long, iIndex As Integer)
Dim i As Long, unique As Variant

For i = 1 To UBound(vElements)
    vresult(iIndex) = vElements(i)
    If iIndex = p Then
        unique = UniqueArray(vresult)
        If (UBound(vresult) = UBound(unique)) Then
            lRow = lRow + 1
            Cells(lRow, 3).Value = Join(unique)
        End If
    Else
        Call PermutationsNPR(vElements, p, vresult, lRow, iIndex + 1)
    End If
Next i
End Sub


Function UniqueArray(todoarray As Variant) As Variant
  Dim arr As New Collection, a
  Dim i As Long
  On Error Resume Next
  For Each a In todoarray
     arr.Add a, a
  Next
  ReDim returnVal(1 To arr.count)
  For i = 1 To arr.count
     returnVal(i) = arr(i)
  Next
  UniqueArray = returnVal
End Function

Макрос будет работать для любого количества элементов в столбце A в пределах Excel.

2

Рассмотрим этот пример Данные столбца A:- Числа (заголовок) один два три четыре пять данных столбца B:- OutPut (заголовок)

вставить эту формулу в B2:-

=IFERROR(IF(INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),))=INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),MOD(ROWS($A$1:A1)-1,COUNTA($A$2:$A$20))+1),INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),)),INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),ROUNDUP(ROWS($A$1:A1)/COUNTA($A$2:$A$20),))&INDEX(OFFSET($A$1,1,0,COUNTA($A$2:$A$20)),MOD(ROWS($A$1:A1)-1,COUNTA($A$2:$A$20))+1)),"")

эта функция работает с колонкой "Числа", имеющей данные до A20.

permutationexcelimage

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .