• ベストアンサー

エクセルを使っての方法

エルセルなどを使用して、宝くじロト6過去のデータを入力して、 これから6個の数字を決めるときに、過去に出てしまった1等の数列を避ける方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.3

過去にどんな組み合わせが当選したかということは、次の組み合わせとは何の関係もありません。だから仰るようなsheetを作ったところで無意味です。 それはさておき、どうやって作るかでしたよね。 [1]まず過去に当選した組み合わせを全部入力した表をつくらなくちゃいけません。 worksheetの上から11行目から下にこの表を作りましょう。 横に6つの数を、左から大きい順に並べることにしましょう。例えば過去の当選組み合わせを三つ入れたら こんな感じになる:(|はセルの境界線です。)  A   B   C   D   E   F  41| 30| 26| 11|  5|  2|  39| 31| 30| 22| 20|  8|  42| 35| 33| 31| 28| 12| さらに、桁数を揃えるために全ての数に900(3桁以上なら何でも良いんですが)を加えて文字列に変換したものを第H~M列に作ります。 そして第G列には、これらをくっつけた文字列を作りましょう。つまり11行目に         G                   H      …    M |=CONCATENATE(H11,I11,J11,K11,L11,M11)|=FIXED(A11+900,0)|…|=FIXED(F11+900,0)| を入れて、12行目以下全部、これと同様にします。(やり方は知ってますよね。11行目のG~Mまでを選択しておいて、11行目M列のcellの右下端に出る小さい四角を下へドラッグすれば良いのです。) これで、過去の当選番号のデータベースのできあがりです。 [2]数字の組み合わせを適当に選ぶ部分を作りましょう。 一番上の行の横6つのセルには、Excelが適当に数字を作ってくれる式を入れましょう。A列に式をいれて、A~F列は全部同じにします。    A       …    F =int(rand()*43+1)|…|=int(rand()*43+1)| とりあえずこれで良いでしょう。同じ数が2つ以上出てしまうこともありますが、それはあとで処理することにします。これで6つの数字(1から43のどれか)が並びます。 (勿論、これらのセルに、自分がこれと思う数字を書き込むようにしても良いのです。) [3]数の組み合わせをチェックする部分を作りましょう。 2行目の横6つのセルには、「その列の、1行目の数字が、6つの数字のうち何番目に大きいか」を表す数値を表示させてみましょう。 =RANK(A$1,$A$1:$F$1)| =RANK(B$1,$A$1:$F$1) |…|=RANK(F$1,$A$1:$F$1)| 5行目の横6つのセルに、1行目の数字を大きい順に並べ替えたものを出しましょう。このために、ちょっと準備がいります。 3行目の横6つのセルには、左から順に1から6まで数字を入れます。  A  B  C  D  E  F  1| 2| 3| 4| 5| 6| 1行目の横6つのセルでは、1行目の何列目を持ってくれば良いかを計算します。 =MATCH(A3,$A$2:$F$2,0)|=MATCH(B3,$A$2:$F$2,0) |…|=MATCH(F3,$A$2:$F$2,0)| で、5行目の横6つのセルに、1行目の数字を大きい順に並べ替えたものを出します。 =INDEX($A$1:$F$1,A4)|=INDEX($A$1:$F$1,B4)|…|=INDEX($A$1:$F$1,F4)| さらに5行目に、         G               H      …    M |=CONCATENATE(H5,I5,J5,K5,L5,M5)|=FIXED(A5+900,0)|…|=FIXED(F5+900,0)| を入れてやれば、5行目のG列にはデータベースと同じ形式の文字列が出ますね。 もし1行目の6つの数字に重複があれば、5行目のG列は#N/Aになります。 6行目のG列に、この文字列と同じものがデータベースにあるかどうかを調べる式を入れてみましょう。 =MATCH(G5,G11:G1000,0) もし同じものがあれば数値を、なければ#N/Aを表示するはずです。  これでひとまずできあがりです。どこか関係のないセルに0でも入力してReturnかEnterを押してみてください。すると一行目が再計算されて、別の数字の組み合わせが出てきます。 「5行目G列が#N/Aではなく、6行目G列が#N/Aである」という場合にはオッケーということです。つまり一行目の6個の数字には重複が無く、しかも、過去の当選番号のデータベースにも該当がない。 [4]ではオッケーの場合に、1行目のG列にそう表示するようにしましょう。 1行目のG列に =IF(AND(NOT(ISERROR(G5)),ISERROR(G6)),"おっけー","だめ") と入力すれば良いですね。  はい。もう一度念を押しておきますが、こんなことしても何の意味も無いのですよ。過去に当選した番号が当たりにくいということは全くないのですから。  大変な手間ですが、鰯の頭も信心からと申します。がんばって下さいな。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=53334
noname#84083
質問者

補足

以前ロト6の確率の説明をしてくれた方ですね。有難うございました。闇雲に数字を選らばなくなりました。なんせ一回分の金額が大きいものですから。あの後、毎週同じ金額分、同じ数字を買い続けています。お陰さまで結構いい金額の当たりが出たのですよ。これからも買い続けていきます。 ≫ 過去にどんな組み合わせが当選したかということは、次の組み合わせとは何の関係もありません。 いえいえ、避ける数字配列を決めるだけでなく、これから買おうとした(選んだ)数字が過去の一等にあったのだと判るのも嬉しいじゃないですか。 ただ、今回の説明難しすぎます。と言うか私の頭では理解できません。ただ過去の数字配列を入力しておき、新しい配列を記入するだけで勝手にコンピュータが作動してくれるものかと思っていましたので。 エクセル自体使った事もなく、使い方もまだ理解していません。すみません。

その他の回答 (6)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.7

>お答えして頂いた書き込みの >Public Function >  ~ >End Function >までをコピー&ペーストしていいのでしょうか? その通りです。 Public Function ~ End Function がユーザー定義関数になります。VBA側の仕掛けはこれだけです。 説明が足らず、すいませんでした。うまく機能するといいですが。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

チョッと仕掛けを作っておけばPCが教えてくれます。こんな表を作ってみました。   | A | B | C | D | E | F |  ―┼―――┼―――┼―――┼―――┼―――┼―――┼  1| 10| 11| 29| 30| 32| 43| 1行目は予想値入力場所  2| あり| あり|   | あり|   | あり| 2行目は有り無しを表示  3|   |   |   |   |   |   |  4|  1|  5| 10| 15| 16| 43| ここから下は過去データ  5| 11| 15| 20| 25| 26| 42| どんな順番でも可  6| 21| 25| 30| 35| 36| 41|  7|  2|  6| 10| 16| 26| 40|  8|  3|  7| 11| 15| 16| 39|  9| 34| 38| 12|  5|  6|  8| (1)A4~F9に過去のデータを入れます。 (2)A1~F1には予想する好きな数字を入力します。 (3)ユーザー定義関数を作ります。(これが仕掛けになります)  メニューでツール→マクロ→Visual Basic Editor でVBE画面に移り、  VBE画面のメニューで挿入→標準モジュール で標準モジュールを挿入し、  開いたコードウインドウに下の関数をコピーして貼り付けます。   (手順を追っていけば可能と思います) Public Function 過去データ照合(myData As Integer) As String   Dim rg As Range '過去データの値   過去データ照合 = ""   For Each rg In Range("A4:F9")     If rg = myData Then       過去データ照合 = "あり": Exit Function     End If   Next End Function (4)シートに戻り、A2~F2にはユーザー定義関数を使った式を設定します。   A2に =過去データ照合(A1) と入力し、F2までコピーします。   これで入力値が過去データにあれば『あり』と表示されます。   『あり』と表示された時、条件付書式でセルの色を変えたりするとよりはっきりします。 ご参考に。

noname#84083
質問者

補足

≫ メニューでツール→マクロ→Visual Basic Editor でVBE画面に移り、VBE画面のメニューで挿入→標準モジュール で標準モジュールを挿入し開いたコードウインドウに下の関数をコピーして貼り付けます。 お答えして頂いた書き込みの Public Function   ~ End Function までをコピー&ペーストしていいのでしょうか?

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.5

 Excelのようなspread-sheetシステムは自分でちょっとした道具を作るのにとても便利です。そしてNo.3で書いたのは、「過去に出てしまった1等の数列を避ける」ことを自動的にやってくれるような道具の作り方。  ですから、一度作っちゃえば、あとは過去の当選データを追加していくだけです。 No.3の訂正: > 1行目の横6つのセルでは、1行目の何列目を持ってくれば良いかを計算します。 は > 4行目の横6つのセルでは、1行目の何列目を持ってくれば良いかを計算します。 の誤りでした。  でも使ったことがないとなると、アノ説明じゃ難しいかも。もし「使ったことはないけど持っている」という事なら、ともかく試しに入力してみて下さいな。

noname#84083
質問者

補足

すぐ回答いただきまして有難うございます。 来週あたりPCに精通している先輩に会いますので、このページを見せて教えてもらおうと思っています。 また、常時接続でないPHS接続をこのまま続けたら、来月はいったい幾らになるか?という質問もしてみたいと思っています。(Just kidding you) なんせ3週間で114時間(1時間約514円)ですからねえ。

  • comv
  • ベストアンサー率52% (322/612)
回答No.4

こんばんは! ロト6の数値列を知らないので不確かですが 先頭の数値に0(ゼロ)も来るようでしたら 入力は予め文字型(書式設定 文字列)に しておいた方が確かでしょう!(過去データも含め) その上で例えばA1に6桁の数字があるとして B1に =IF(ISERROR(MATCH(A1,過去1等の範囲,0)),"","●") 過去1等の一覧表に同値の記載があれば●が表示される式です。 <余談> 6桁の内、5桁まで同順同値であるものもチェックするには 例えば C1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,1,1,"?")),"■","") D1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,2,1,"?")),"■","") E1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,3,1,"?")),"■","") F1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,4,1,"?")),"■","") G1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,5,1,"?")),"■","") H1に =IF(COUNTIF(過去1等の範囲,REPLACE($A1,6,1,"?")),"■","") としておけば、何れかの5桁が順番も含め揃っている場合 何れかにマークが表示されます。

noname#84083
質問者

補足

せっかく答えていただいたのですが、私の頭では、、、。 ロト6の数字配列は、01~43までの数字を6個選んだものです。

  • taropoo
  • ベストアンサー率33% (34/103)
回答No.2

基本的な事かもしれませんが ロトって過去に出た当選数列はそれ以降当選にしない事になってるんですか?

noname#84083
質問者

補足

いいえ、そうではなく、6個の数字が全く同じものが、再度選ばれる事はないだろうという私の勝手な思い込みです。 でも、やっぱり全く同じものが6個も揃わないと思うのですが、、、。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

まず、過去の当選結果を一覧にしなければなりませんね。 つぎに任意の方法で作成した6個の値の要素が過去の当選と比較し、 該当があれば「再抽出」を繰り返す、でしょうね。 比較のポイントは1~9までの1桁の値を「01」から「09」とすること。 抽出した6個の要素を昇順(または降順)に整列させること。 12桁の文字列で比較することを回数分のループにすることでしょうね。 でも、31までの数値が該当の回の当選者が多いところを見ると 何らかの「年月日」で申し込みしている人が多いのかな、という気がします。

関連するQ&A