人気マンガがだれでも無料♪電子コミック読み放題!!

ロト7の組み合わせをExcelでランダムの数字で抽出する方法

ロト7の組み合わせ 1~37までの数字から7つの数字を選ぶ。

それを100通り作りたいんですが、マクロのプログラムを教えてください。
100通りの組み合わせはすべて異なる組み合わせにしたいです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

#2です



> そのままマクロを作成してもコンパイルエラー 構文エラーが出ます。

ずっと考えていたのですが、何故エラーになったのかわかりません

新規ファイルを開いて、
標準モジュールに、コピー&貼り付けして、
Samp1 を実行すると、アクティブなシートに結果が表示されると思います


※ 本質問は、必勝法?についてのものになりますか?

>  Const CNUM As Long = 37 ' 1 ~
>  Const CCNT As Long = 7 ' 個数

この部分

  Const CNUM As Long = 42 ' 1 ~
  Const CCNT As Long = 6 ' 個数

にすれば、1 ~ 42 から 6 つランダム抽出します
ロト 云々とは直接関係ないものとして回答していました


※ 以下の条件は、条件ではなかったのですね

> 1~37までの数字から7つの数字を選ぶ
> 100通りの組み合わせはすべて異なる組み合わせにしたい
    • good
    • 0

#1の回答者です。



私も未熟です。
単に、Excelの標準モジュールを挿入して、全部をコピーして、そこに貼り付けてください、というぐらいしかありません。それ以上は、私は分かりません。

>End Subのあとのプラグラムの意味もよくわかりません。
並べ替えをするための別のプログラムです。汎用性があるので、別になっています。

何も程度の低いExcelよりも、Vector等で適当なツールを探してもよろしいかと思います。それ自体は、ワークシートの関数でも可能ですが、ワークシートの関数のRAND()の性能は、すこぶる悪いので、想像以上に並びに偏りが出るのではないかと思います。(OSに別の、擬似乱数発生ジェネレータを入れれば高性能にすることはできるでしょうけれども。)

私が、#1で書いたように、ロトの理論(例:ゲイル理論)というものは存在するようですし、それで数年は生活できる人がいると豪語しているようで、本当は、その理論のほうが価値があるような気がします。

http://happyloto.ciao.jp/contents/basic/gail_rir …

私が#1の添付画像で示したのは、どこかのサイトで紹介された理論で作られたもので、当然、インターネットで、ミズホ銀行の当選番号案内で一定期間のデータを取って、上中下と3つに区切り、その3つの中の並び替えをして、当たりクジを探すというものです。掲示板では公開はするつもりはありませんが、お金を掛けるゲーム性が強いものですから、それなりに、ご自身で勉強することを望みます。

ロト6の神様 最強のゲイル理論
http://amazon.co.jp/dp/4895955559
    • good
    • 0
この回答へのお礼

回答をいただき有り難うございます。
ごもっとな話です。そうしたいと思います。

お礼日時:2016/05/15 06:23

以下でどうでしょう



標準モジュールに記述して Samp1 実行すると
アクティブシートに結果が表示されます
Const 部分を変更すれば・・・・


Public Sub Samp1()
  Const CNUM As Long = 37 ' 1 ~
  Const CCNT As Long = 7 ' 個数
  Const CPTN As Long = 100 ' 結果行数
  Dim dic As Object
  Dim vA As Variant
  Dim iA(1 To CNUM) As Long
  Dim i As Long, j As Long, k As Long

  Set dic = CreateObject("Scripting.Dictionary")

  Randomize
  While (dic.Count < CPTN)
    ReDim vA(1 To CNUM)
    For i = 1 To CNUM
      iA(i) = i
    Next
    For i = 0 To CCNT - 1
      k = CNUM - i
      j = Int(k * Rnd()) + 1
      vA(iA(j)) = iA(j)
      iA(j) = iA(k)
    Next
    dic(Join(vA, ",")) = Empty
  Wend

  Application.ScreenUpdating = False
  Cells.Delete
  With Range("A1").Resize(dic.Count)
    .Value = WorksheetFunction.Transpose(dic.Keys)
    .TextToColumns .Cells(1), xlDelimited _
      , ConsecutiveDelimiter:=True, Comma:=True
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).Delete xlShiftToLeft
    On Error GoTo 0
    With .CurrentRegion
      For j = .Columns.Count To 1 Step -1
        .Sort .Cells(j), xlAscending, Header:=xlNo
      Next
    End With
  End With
  Application.ScreenUpdating = True

  Set dic = Nothing
End Sub
    • good
    • 0
この回答へのお礼

早速回答を頂きましてありがとうございます。
Const 部分を変更すれば・・・・
私の未熟さ故どう変更すればいいのかわかりません。
そのままマクロを作成してもコンパイルエラー 構文エラーが出ます。
未熟な私に理解できるようお願いします。

お礼日時:2016/05/14 07:20

これは、昔、Microsoft Officeの日本の宣伝で、大学生のお兄ちゃんは、Office のExcelでロト7の数字も作れるというようなことを書いていました。

結構、のせられた人もいたのではないでしょうか。マイクロソフトも罪なことをしますね。

でも、その頃、私も挑戦したことがあります。それは、添付画像にその頃の残骸がありますから、ご覧ください。インターネットで、あたり番号の統計を取って、その傾向から次を予測するというものです。
 [100通りの組み合わせはすべて異なる組み合わせ]
そのままの組み合わせを出そうとしたら、PCのスペックが越えてしまいます。

もちろん、ご質問そのものは、Excelを良く知っている人なら作れますし、それは以下のような簡単なマクロでできます。もしかしたら、マクロのおかしい部分があるかもしれませんが、数字は取れるはずです。

私が作成した時は、統計を用いる方法があるのですが、だいたい、1年間のデータ(2年以上だと狂う)を使って、その順位の傾向を測るという、「傾向の高い数は再びでる」という原則を用いたものですが、それでも、面白いものが出来ました。中には、そういう方式で、数年間は、それだけで生活できた人がいるというのだから、おどろきです。(なにか、眉唾のような気がしますが……。)ということで、

人に聞くのではなくて、ご質問者自身でも研究なさってみたらいかがですか?いくつかの理論があるそうです。(作る方が面白いですよ。添付画像はミニロト版です。実際に購入したことはありません)理屈はすごいです。もし、これで生活できるほどの的中率なら、公開などしませんね。(^^;

最初は、関数で作ろうとしたけれども、Excelが動かなくなってしまいました。でも、こんなに面白いものは、他にはありません。

以下は、やってみると、順位にはばらつきがあるようです。1行目は、順番を1~37を入れるようにしています。

擬似乱数発生ジェネレーター(一様乱数)の関係で、途中で止めたら、その全部の数字は使えなくなるので、1回、100個なら100個全部を出力してください。
書き出しは、"A2:AK101"を使います。

これは、ロト7用です。
'//
Sub LotNumCreate()
  Dim nums(1 To 37, 1 To 2)
  Dim nums2 As Variant
  Dim i As Long, j As Long, k As Long
  Dim cnt As Long: cnt = 1
  k = 2
  'データがあればクリア
  ActiveSheet.Range("A2:AK101").ClearContents
  '注意:一様乱数は途中で止めたら、乱数でなくなります!
  Randomize
  Do
    For i = 1 To 37
      nums(i, 1) = Rnd()
      nums(i, 2) = i
    Next
    nums2 = MakingPos(nums)
    Application.ScreenUpdating = False
    For j = 1 To 37
      Cells(k, j).Value = nums(j, 2)
      DoEvents
    Next j
    Application.ScreenUpdating = True
    k = k + 1
    cnt = cnt + 1
  Loop Until cnt > 100
  
End Sub

Function MakingPos(dArray)
  Dim i As Long
  Dim j As Long
  Dim buf As Double, buf2 As Long
  If Not IsArray(dArray) Then Exit Function
  For i = UBound(dArray) To LBound(dArray) Step -1
    For j = LBound(dArray) + 1 To i
      If dArray(j - 1, 1) > dArray(j, 1) Then
        buf = dArray(j - 1, 1)
        buf2 = dArray(j - 1, 2)
        dArray(j - 1, 1) = dArray(j, 1)
        dArray(j - 1, 2) = dArray(j, 2)
        dArray(j, 1) = buf
        dArray(j, 2) = buf2
      End If
    Next j
  Next i
  MakingPos = dArray
End Function
'//
以下は、ミニロトのサンプル画像で、本件とは直接関係がありません。
「ロト7の組み合わせをExcelでランダム」の回答画像1
    • good
    • 1
この回答へのお礼

せっかくご回答を頂きましたが私の未熟さのため理解できません。
プログラムをそのままマクロにコピーしてもコンパイルエラー(構文エラー)がでます。また、End Subのあとのプラグラムの意味もよくわかりません。

お礼日時:2016/05/14 07:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qロト6の組み合わせをExcelを使って表にランダムの数字で抽出する方法

ロト6の組み合わせをExcelを使って表にランダムの数字で抽出する方法

ロト6の組み合わせ・・・・
1~43までの数字から6つの数字を選ぶ。

それを100通り作りたいんですが、関数や数式など、方法を教えてください。
100通りの組み合わせはすべて異なる組み合わせにしたいです。

よろしくお願いします。

Aベストアンサー

関数「rand」と「int」などが使えます。
数字が43種類なので、rand()の値を1/43で割った整数部分を取って、ランダムな数字として生成できます。これだと6つの数字が互いに重複することがあるので「countif」などを使って重複した組み合わせを除外してください。結果を並び替えしてみると分かりますが、6つの数字の組み合わせが重複することは稀です(一等?の当選確率とほぼ同じ確率です)。私が生成したランダムな組み合わせも貼っておきます。

4242918218
1343321243
2015223630
27232812019
42242721931
194278165
373339231617
432924233730
38532273335
242132382729
4027213293
93815281043
391835283026
1081193331
8285411819
33422431424
2241252418
10181620739
33247423032
283826122942
272834182243
9431711223
35872717
3522310530
303923311713
3627374039
113726962
26331254311
1538202626
2520141514
5181341431
262443223932
19104253230
37152312218
16520341227
381519252035
16191322140
11438122839
43642162737
172736413742
17133991215
4112205103
40825124223
2267372240
24433313421
101539301419
20169322215
20334235194
1211221345
84334211239
6439291942
153332372919
431626649
232724134143
10197412534
6413619101
30111122034
39432921128
25289301020
10332343022
611041211
34373221138
331927354339
6207392326
42311832639
20292511141
16419244133
32211336253
1841712268
4225125147
1523117930
273242283021
2473113404
27113373336
1169422537
409818165
43183940346
382651340
365383014
2117377426
26152420417
263229371011
41219432616
13102024251
38291930153
8166433021
62625103028
41536173443
530358231
3419920116
5625263730
25930223634
2836472635
34422132627
2331062714
73121202941
316132620
5153111934
73422422918

関数「rand」と「int」などが使えます。
数字が43種類なので、rand()の値を1/43で割った整数部分を取って、ランダムな数字として生成できます。これだと6つの数字が互いに重複することがあるので「countif」などを使って重複した組み合わせを除外してください。結果を並び替えしてみると分かりますが、6つの数字の組み合わせが重複することは稀です(一等?の当選確率とほぼ同じ確率です)。私が生成したランダムな組み合わせも貼っておきます。

4242918218
1343321243
2015223630
27232812019
42242721931
19427...続きを読む

QExcelでロト6の数字を決めたい

Excel関数を使って、「1~43の数字から重複しない6個の数字を算出する」方法ってありますか?マクロはよくわからないので関数で出したいです。いろいろ調べて、「RAND」とか「RANDBETWEEN」を使うといいとわかったのですが、「重複しない」ようにすることができません。お分かりになる方いらしたら、ぜひ教えて下さい。ずっと考えていたら頭が痛くなってきました・・・。

Aベストアンサー

A1に=randbetween(1,43)
B1に=randbetween(1,43)
...
F1に=randbetween(1,43)

A2に=countif($A$1:$F$1,"="&a1)
B2に=countif($A$1:$F$1,"="&b1)
...
F2に=countif($A$1:$F$1,"="&f1)

G2に=if(sum(A2:F2)=6,"OK",)

と入力してください。つまり、A1からF1に同じ数字がなければ
G2にOKと表示されます。

あとは、適当な回数だけファンクションキーF9を押してください。
シートが再計算され、乱数が更新されます。
OKと表示されたときの数字を使ってください。

QExcelでの全通りの組み合わせ出力方法(文字列)

Excelについて全くの初心者で、教えて頂きたい質問があります。

Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。
例えばセルAに
・りんご
・みかん
・いちご

セルBに
・だいこん
・キャベツ
・トマト

があり、別のセルにその全通りの組み合わせを出力
(文字と文字の間はスペース)

りんご だいこん
りんご キャベツ
りんご トマト
みかん だいこん
みかん キャベツ
みかん トマト
いちご だいこん
いちご キャベツ
いちご トマト

この様に出来る方法はあるでしょうか?
また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。

どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行からB列最終行まで繰り返し
x = x + 1
Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記
Next n
Next i
End Sub

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

これでできます。
これがわかれば「裏」というのも簡単ですよね。
以上はVBAでの回答ですが、外していたらごめんなさい。

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行...続きを読む

Qエクセル指定した範囲からランダムで一つ抽出

エクセルの関数についての質問なのですが、

B1~B5に値がならんでいたとして、B1~B5の中からランダムに一つ抽出したものをA3に表示する関数はありますか?

Aベストアンサー

A3に次の式を入力すればよいでしょう。

=INDEX(B1:B5,RANDBETWEEN(1,5))

Qエクセルでロトくじのクイックピックを作るには?

乱数に関する既出の質問と回答を読んでみました。恥ずかしながら余りに高度で私には分かりませんでした。

行いたい作業は1以上43以内の重複しない整数の乱数を4個(6個)発生させ昇順に並べる。です。「重複しない」と「昇順」ができません。

手順を教えていただければあとは自助努力でがんばろうと思っています。

Aベストアンサー

こんにちは。

=RAND() をコピーして43個にして、A1:A43 にして、

それを

B1 から、
=RANK(A1,$A$1:$A$43)

のようにすれば、重複が発生しない数が出てきますので(例外はあるけれど)、

こんどは、C1から、

=SMALL($B$1:$B$6$,ROW())

と、6個取り出すとか、4個取り出せばよいとは思います。

(注意:Excelのワークシートで「乱数発生」として、RAND 関数はちゃんと、2147483648 種の乱数を発生できるのですが、ワンステージで乱数の発生は 32768 種しかありません。つまり、乱数ジェネレータで一回の乱数系列を発生させて、それを使うと意外にも少ないことが分かります。そのために、本来は、VBAで、乱数ジェネレータを、RANDOMIZE関数で初期化しなければいけません)

本来は、統計的な処理したほうがよいかと思います。相当に難しそうです。ところで、このロト6などで、生計を立てている人が世の中にはいるようですね。とても驚きました。

Qロト7の当選確率計算方法

ロト7の当選確率は以下のURLで確認されます。
https://www.mizuhobank.co.jp/takarakuji/suji/loto7/index.html
この計算方法を次のように考えました。

まず確率の分母は39個の数字から7個選ぶ組み合わせで39C7=10295472。確率の分子は本数字7個、ボーナス数字2個、はずれ数字28個の中から7つの数字を選ぶので
1等は7C7 * 2C0 * 28C0 = 1
2等は7C6 * 2C1 * 28C0 = 14
3等は7C6 * 2C0 * 28C1 = 196
4等は7C5 * 2C0 * 28C2 = 7938

しかし4等がサイトにある9135と異なります。この考え方はどこが誤りで、9135はどのようにして計算されるのでしょうか。

Aベストアンサー

こんにちは

4等、5等の当選数字に、ボーナス数字は関係ありません。ボーナス数字は、ハズレ数字と同じに扱っても良いと思います。

ですので、
7C5*(28+2)C2=9135
となると思います。

3等のばあいは、ハズレ数字がボーナス数字だと、2等になってしまいますので・・・

QExcelですべての組合せ(重複組合せ)を出力するには?

Excelですべての組合せ(重複組合せ)を出力するには?

次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか?

10種類のお菓子の中から、好きなものを3個選んでセットにするとします。
同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。

この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。

いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。
また、Accessを使っても似たようなことができるのでしょうか? 直積?

できれば、3個固定ではなく5個の場合も出来るとうれしいです。
よろしくお願いします。

Aベストアンサー

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
        Cells(rowX, 1).Value = myStr(i)
        Cells(rowX, 2).Value = myStr(j)
        Cells(rowX, 3).Value = myStr(k)
        rowX = rowX + 1
      Next k
    Next j
  Next i
End Sub

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
       ...続きを読む

QエクセルでnCr (組み合わせ)の作成方法

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マスに重複しない数字が入っています。
  数字は毎回変わります。
  1   2 5 6 7
10 4 11 13 15
8 9 17 21 28
14 16 18 20 25
19 22 23 24 27

(2)ロト6の場合は、下記のように6×4マスに重複しない数字が入っています。
  数字は毎回変わります。

  1   2 5 6 7 19
10 4 11 13 5 22
8 9 17 21 28 23
14 16 18 20 25 24

●出力

  VBAを実行すると、新シートにそれぞれ、25C5又は、24C6の全組み合わせが出力される。

【注意事項】
   ・使用しているエクセルは2010です。

以上、ご回答よろしくお願いします。

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マス...続きを読む

Aベストアンサー

過去のQ&A(参考URL)を参照なさってはいかがでしょう?

参考URL:http://oshiete.goo.ne.jp/qa/5571459.html

Qエクセル関数を使って、ランダム抽出をしたいです

エクセル関数を使って、ランダム抽出をしたいのですが
どの関数を使用すればいいのかわからないのです。

現在、1つのシートにいろいろなデータが入っているのですが、
D列のデータを使い、そのデータをランダムに25件抽出したいのです。

よろしくお願い致します。

Aベストアンサー

Sheet1にデータが入っているとして、そのD列のデータをSheet2のA列に取り出して操作をすることにします。
関数で取り出すのでしたらSheet2のA1セルに次の式を入力し下方にオートフィルドラッグします。
=Sheet1!D1
B1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(A1="","",RAND())
C1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(A1="","",RANK(B1,B:B))
D1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(OR(COUNTIF(C:C,ROW(A1))=0,ROW(A1)>25),"",INDIRECT("A"&MATCH(ROW(A1),C:C,0)))
これでSheet2のD列にはランダムに抽出されたデータが並ぶことになります。
なお、F9のキーを押すことで抽出操作を繰り返すことができます。

Q過去のデータから予測を出すには?

数字がランダムに
341
545
779
544




と縦に並んでいるのですが過去の統計から次はこの数字が来るというような予測をしたいのですが、予測関数のようなものはあるのでしょうか?
ど素人な質問で恐縮です。よろしくお願いします。

Aベストアンサー

既知のxと既知のyから、回帰直線、回帰曲線(これらどちらがよいかは、人間が総合的に選択する)を出し、他のxの値に対するyの値をその回帰直線や回帰曲線にxを代入してy求める。
ようなことではないですか。
直線の場合はFORECAST  関数が有る。
FORCAST(X、既知のy、既知のx)
既知のy、既知のxはそれぞれ同一列のセル範囲を指定する。
興味があれば、Googleで「エクセル FORECAST」で照会すること。
http://excel.onushi.com/function/forecast.htm
他膨大な数の記事が有るようだ。


人気Q&Aランキング