ここから本文です

例えば、ロト5、6みたいに何通りかの組み合わせができますが、その組み合わせを...

kas********さん

2014/5/2219:15:01

例えば、ロト5、6みたいに何通りかの組み合わせができますが、その組み合わせをパソコンソフトexcelで全て表示させる事はできますか?私にはかなりの難易度高いです。どなたか教えていただけますでしょうか。

閲覧数:
123
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

gar********さん

編集あり2014/5/2316:12:20

標準モジュールにコピペして使ってください。
1~AllのうちPattern個の組み合わせをすべてセルに表示します。
ただしロト6は43個から6個を選ぶ6096454通りあるので、
表示するまでに時間がかかります。
----------------------------------------------
高速化のため編集しました
----------------------------------------------
Option Explicit
Const All = 43
Const Pattern = 6
Dim Cnt(1) As Single
Dim r As Long, c As Long
Dim ans() As String

Sub test()
Dim Buf As String
Dim i As Long

If All < Pattern Then Exit Sub
ReDim ans(1 To 10000, 1 To 1)
Application.ScreenUpdating = False
Cnt(0) = Comb(All, Pattern)
r = 1: c = 1
For i = 1 To All - Pattern + 1
Buf = CStr(i)
x i + 1, Buf, Pattern - 1
Next
Range(Cells(1, 1), Cells(WorksheetFunction.Max(10000, r), c)) = ans
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

Private Sub x(ByVal Start As Long, ByVal Buf As String, ByVal Num As Long)
Dim i As Long
Dim str As String

DoEvents
If Num > 0 Then
For i = Start To All - Num + 1
str = Buf & "," & CStr(i)
x i + 1, str, Num - 1
Next
Else
ans(r, c) = Buf
Cnt(1) = Cnt(1) + 1
If Cnt(1) Mod 10000 = 0 Then
Application.StatusBar = Cnt(1) & "/" & Cnt(0)
End If
r = r + 1
If r > 10000 Then
r = 1
c = c + 1
ReDim Preserve ans(1 To 10000, 1 To c)
End If
End If
End Sub

Function Comb(ByVal All As Single, ByVal Part As Single) As Single
Dim i As Single, j As Single
Dim Num(1) As Single

Num(0) = 1
Num(1) = 1
For i = All To All - Part + 1 Step -1
Num(0) = Num(0) * i
Next
For i = 1 To Part
Num(1) = Num(1) * i
Next
Comb = Num(0) / Num(1)
End Function

質問した人からのコメント

2014/5/23 22:39:00

成功 gargohgさん すばらしいです!6096454通りありました。まったくVBAの知識が無くて...大変感謝します。ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる