vba - 从excel中的名称列表中生成所有组合

标签 vba excel

所以我已经有了排列列表,但我想将其转换为组合。所以我有一个名称列表“约翰”“迈克”“汤姆”,这些已经转换为两列排列“约翰迈克”“约翰汤姆”“迈克约翰”“迈克汤姆”“汤姆约翰”“汤姆迈克”,那么我将如何删除冗余排列以将其转换为组合,或者创建一个新宏来生成组合更容易?

所以要清楚,我正在寻找的新名单是“约翰迈克”“约翰汤姆”“汤姆迈克”

这是昨天给我的排列宏(source)。

Sub Permutation()

Dim NameList As Variant, NameVal As Variant, NameVal2 As Variant
Dim Iter As Long

NameList = Sheet3.Range("A1:A108").Value

Iter = 1
For Each NameVal In NameList
    For Each NameVal2 In NameList
        If NameVal2 <> NameVal Then
            Range("C" & Iter).Value = NameVal
            Range("D" & Iter).Value = NameVal2
            Iter = Iter + 1
        End If
    Next NameVal2
Next NameVal

End Sub

最佳答案

尝试这个:

Sub NoRepetition()

Dim NameList As Variant, NameVal As Variant, NameVal2 As Variant
Dim Iter As Long, OutputList As Range, NotYet As Boolean

NameList = Range("A1:A5").Value

Iter = 1
For Each NameVal In NameList
    For Each NameVal2 In NameList
        LRow = Range("C" & Rows.Count).End(xlUp).Row
        Set OutputList = Range("C1:C" & LRow)
        NotYet = (Application.CountIf(OutputList, NameVal2) = 0)
        If NameVal2 <> NameVal And NotYet Then
            Range("C" & Iter).Value = NameVal
            Range("D" & Iter).Value = NameVal2
            Iter = Iter + 1
        End If
    Next NameVal2
Next NameVal

End Sub

附加概念很简单:只需添加一个检查以查看名称是否已存在于第一列中。如果是这样,请跳过该组合。如果没有,请放入。

截图:

enter image description here

让我们知道这是否有帮助。

关于vba - 从excel中的名称列表中生成所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630030/

相关文章:

excel - vba Range.Autofilter 在 Excel 2011 (Mac) 上失败

excel - 隐藏数据透视图列

excel - 保护数据透视表后无法过滤切片器

excel - VBA 将数据从一个工作簿复制到另一个工作簿

excel - 无法绕过 SAP GUI 连接中的运行时错误 619

vba - ListView 列顺序的控制

vba - 寻找 LDAP URL?

excel - 如何为某些用户打开一个可读写的 Excel 文件,而为其他用户打开一个只读文件

excel - 添加列的按钮删除前一列?

python - 从 VSTO excel 插件调用 python 代码