原始问题

原始问题

请注意我的问题不同于建议重复。建议的副本不会根据选项数量显示所有可能的变体,因此输入 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-combinations-from-single-column但它似乎不起作用。

在 A 列中,如果我输入(每行一个单词):

One
Two
Three

在 B 列中,VBA 给出(在单个单元格中):

one,two,three

它并没有给我所有可能的组合排列,它只是将我输入的内容垂直地改变到一列,然后水平地输出结果。

答案1

以下 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

该宏将适用于 Excel 限制内的 A 列中的任意数量的项目。

答案2

考虑这个例子 A 列数据:- 数字(标题)一二三四五 B 列数据:- 输出(标题)

将此公式粘贴到 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。

排列excel图像

相关内容