如何使用排除某些类型组合的数据创建 Excel 列表
How to create Excel list with data that excludes certain types of combinations
我有两个包含相同数据集的列表(例如 A、B、C、D),我希望能够创建一个组合列表来两次排除相同的数据(例如 A/A, B/B, 等等)和反转集(即 A/B 表示我不想要 B/A)
我在 Mac 2011 年使用 Excel,如果这很重要的话。
编辑:
理想情况下,我想使用表格而不是输入单个数据片段,因为实际列表很长
下表命名为 T_TESTA 和 T_TESTB:
编辑 2:
下面提供给我的两种解决方案都运行良好,但我只能选择一种。所以我选择了一个基于简化我遇到的与代码本身完全无关的问题的方法。另一种解决方案稍微更优雅一些,可以将数据一起显示在列表中。
试试这个简短的宏:
Sub Kombo()
arr = Array("A", "B", "C", "D")
k = 1
For i = 0 To 2
For j = i + 1 To 3
Cells(k, 1) = arr(i) & arr(j)
k = k + 1
Next j
Next i
End Sub
循环配置为创建组合而不是排列。
编辑#1:
在这个版本的代码中,我们从单元格而不是内部数组中获取值。我假设值在 E1 到 E4:
Sub Kombo2()
Dim arr(0 To 3) As Variant
For i = 0 To 3
arr(i) = Range("E" & i + 1).Value
Next i
k = 1
For i = 0 To 2
For j = i + 1 To 3
Cells(k, 1) = arr(i) & arr(j)
k = k + 1
Next j
Next i
End Sub
结果仍然显示在A
列
这是我为 Google 工作表 here 计算并翻译回 Excel:
的几个公式
=IFERROR(INDEX(A:A,CEILING((2*COUNTA(A:A)-1-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)),"")
和
=IFERROR(INDEX(A:A,COUNTA(A:A)+ROW()-((2*COUNTA(A:A)-1)*CEILING(((2*COUNTA(A:A)-1)-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)-CEILING(((2*COUNTA(A:A)-1)-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)^2)/2),"")
我有两个包含相同数据集的列表(例如 A、B、C、D),我希望能够创建一个组合列表来两次排除相同的数据(例如 A/A, B/B, 等等)和反转集(即 A/B 表示我不想要 B/A)
我在 Mac 2011 年使用 Excel,如果这很重要的话。
编辑:
理想情况下,我想使用表格而不是输入单个数据片段,因为实际列表很长
下表命名为 T_TESTA 和 T_TESTB:
编辑 2:
下面提供给我的两种解决方案都运行良好,但我只能选择一种。所以我选择了一个基于简化我遇到的与代码本身完全无关的问题的方法。另一种解决方案稍微更优雅一些,可以将数据一起显示在列表中。
试试这个简短的宏:
Sub Kombo()
arr = Array("A", "B", "C", "D")
k = 1
For i = 0 To 2
For j = i + 1 To 3
Cells(k, 1) = arr(i) & arr(j)
k = k + 1
Next j
Next i
End Sub
循环配置为创建组合而不是排列。
编辑#1:
在这个版本的代码中,我们从单元格而不是内部数组中获取值。我假设值在 E1 到 E4:
Sub Kombo2()
Dim arr(0 To 3) As Variant
For i = 0 To 3
arr(i) = Range("E" & i + 1).Value
Next i
k = 1
For i = 0 To 2
For j = i + 1 To 3
Cells(k, 1) = arr(i) & arr(j)
k = k + 1
Next j
Next i
End Sub
结果仍然显示在A
列这是我为 Google 工作表 here 计算并翻译回 Excel:
的几个公式=IFERROR(INDEX(A:A,CEILING((2*COUNTA(A:A)-1-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)),"")
和
=IFERROR(INDEX(A:A,COUNTA(A:A)+ROW()-((2*COUNTA(A:A)-1)*CEILING(((2*COUNTA(A:A)-1)-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)-CEILING(((2*COUNTA(A:A)-1)-SQRT((2*COUNTA(A:A)-1)^2-8*ROW()))/2,1)^2)/2),"")