0

这是另一个论坛的交叉帖子。这样做的原因是有一个 S/O 帖子非常接近我需要做的事情: S/O post

交叉帖子显示了我需要的示例,但希望这里有人了解 S/O 的 python 示例中显示的逻辑,但知道如何在 Excel 中应用它。

它的要点是采用 ('a,b,c,d') 并找到所有唯一对:

a,b a,c a,d b,c b,d c,d

b,a 不应该在列表中,因为 a,b 已经存在等等。

有很棒的 python 代码,但是 vba 示例确实可以满足我的需要。

我正在使用Windows,Excel 2010,最终希望能够运行带有很多列的宏。


奖金数学问题:我认为答案在组合/排列公式领域的某个地方,但显然我在这个网站上询问是有原因的:

如果我创建一个包含 10 列的新工作表,并将每列与其他列配对一次,我最终会得到多少张工作表?

是N吗!/r!(nr)!

10!/2!(8!)

45?

4

2 回答 2

0

由于顺序无关紧要,因此组合就是您想要的。

如果你想在 Excel 中应用它,我推荐一个 VB 宏。

于 2013-09-11T19:47:45.243 回答
0

数学:是的,这些是组合,是的,n!/(r!*(n-r)!)就是答案。

VBA:请注意,您可以获得所有组合,前提是组合中的每个元素始终大于前一个元素

返回这些组合的简单 VBA 函数:

Function CombinationsOf2(Elements) As Variant()
     Dim i0 as Long, i1 as Long, ret(), cnt As Long
     For i0 = LBound(Elements) To UBound(Elements)-1
         For i1 = i0+1 To UBound(Elements)-1
             cnt=cnt+1
             ReDim Preserve ret(1 to cnt)
             ret(cnt)=Array(Elements(i0), Elements(i1))
          Next
      Next
      CombinationsOf2=ret
End If

例子:

'Checking uniqueness of elements if up to you
combs=CombinationsOf2(Array("a", "b", "c", "d"))
'Combs is an array of all combinations. Each combination is an array of elements.
于 2013-09-12T12:41:05.460 回答