0

これは別のフォーラムからのクロス投稿です。そうする理由は、私がしなければならないことに非常に近い S/O 投稿があるからです: S/O 投稿

クロスポストは私が必要とするものの例を示していますが、S/O の python の例に表示されているロジックを理解し、Excel で適用する方法を知っている人がここにいることを願っています。

その要点は、('a,b,c,d') を取り、すべての一意のペアを見つけることです。

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

a,b はすでに存在するなどの理由で、b,a をリストに含めるべきではありません。

これには素晴らしい python コードがありますが、vba の例は私が必要としているものに対して十分に機能します。

私はWindows、Excel 2010で作業していますが、最終的には多くの列でマクロを実行できることを望んでいます。


ボーナス数学の質問: 答えは組み合わせ/順列式の土地のどこかにあると思いますが、明らかにこのサイトで理由を尋ねています:

たとえば、10 列の新しいシートを作成し、各列を他の列と 1 回だけペアにすると、最終的に何枚のシートになりますか?

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 に答える