交叉帖子:略高于寻找独特的组合:Python/VBA(w/bonus math q!)
这是另一个论坛的一篇文章。这样做的原因是有一个S/O post非常接近我需要做的事情: 交叉帖子展示了我需要的示例,但希望这里有人能够理解python示例中从S/O显示的逻辑,但知道如何在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,最终希望能够运行包含大量列的宏交叉帖子:略高于寻找独特的组合:Python/VBA(w/bonus math q!),python,excel,combinations,vba,Python,Excel,Combinations,Vba,这是另一个论坛的一篇文章。这样做的原因是有一个S/O post非常接近我需要做的事情: 交叉帖子展示了我需要的示例,但希望这里有人能够理解python示例中从S/O显示的逻辑,但知道如何在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(右) 十!/2.(8!)
45?因为顺序无关紧要,所以组合是您想要的
如果您想在Excel中应用它,我建议使用VB宏。数学:是的,这些是组合,是的,
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.
是的,VBA宏是我想要的。我不知道怎么写。