- ベストアンサー
エクセルVBA 条件付整数組合わせ表示方法
整数の組み合わせを表示する方法をおしえてください。 1~6の整数をつかって A<B<C かつ D<E<F となるような数字の組み合わせを A列 B列 C列 D列 E列 F列 1 2 3 4 5 6 1 2 4 3 5 6 ・ ・ ・ となるように順番に表示していくには どうすればよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Dim c Private Function check(str As String) As Boolean Dim b, e b = Mid(str, 2, 1) check = False If Mid(str, 1, 1) < b And b < Mid(str, 3, 1) Then e = Mid(str, 5, 1) If Mid(str, 4, 1) < e And e < Mid(str, 6, 1) Then check = True 'A<B<C AND D<E<F End If End If End Function Private Sub rp(ByVal result As String, ByVal selectList As String) Dim i, strLen As Integer, choice As String strLen = Len(selectList) If strLen = 1 Then If check(result & selectList) Then Range("A1").Offset(c).Value = result & selectList c = c + 1 End If Else For i = 1 To strLen choice = Mid(selectList, i, 1) Call rp(result & choice, Replace(selectList, choice, "")) Next End If End Sub Public Sub exec() c = 0 Call rp("", "123456") End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
別の回答で使ったコードを再度使います。 Option Explicit Const N = 6 Dim k Dim p(N) Sub test_perm() Dim i As Long Range("a1").CurrentRegion.ClearContents k = 0 For i = 1 To N p(i) = i Next i perm 1 End Sub Private Sub perm(i As Variant) Dim j As Long, t As Long If i < N Then For j = i To N t = p(i): p(i) = p(j): p(j) = t perm i + 1 t = p(i): p(i) = p(j): p(j) = t Next j Else If (p(1) < p(2) And p(2) < p(3)) _ And p(4) < p(5) And p(5) < p(6) Then For j = 1 To N Cells(k + 1, j) = p(j) Next j k = k + 1 End If End If End Sub
お礼
ありがとうございます。 しばらくヘルプをひっぱりながら ソースを理解できるまでがんばってみます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 こういうのは、アリですか?ナシですか? 1 5 6 2 3 4 4 5 6 1 2 3 条件からすれば、OK のような気がしますが?
補足
もちろんありです。 それができずにこまってます。
お礼
すごい。の一言です。 このソースを勉強してみます。 ありがとうございました。