• ベストアンサー

くだらない質問ですが・・・MSアクセス

全くをもってくだらない質問ですが、 どうか見放さないで下さい。 ロト6の組合せについての方法なのですが 例えば、 【抽選例】 本数字1個目が、10 本数字2個目が、17 本数字3個目が、28 本数字4個目が、30 本数字5個目が、36 本数字6個目が、42 ボーナス数字が、5 だとします。 【必須条件】 1:ボーナス数字が必ず入っている 2:本数字1個目から6個目の内、5つを使って6つ組合せを作る 3:テーブルに、抽選結果が入っていて、関数かマクロ、モジュールを   使って、クエリーで答えを表示する。 4:左から昇順に並び替えられていること。 【表示例】 05-10-17-28-30-36 05-10-17-28-30-42 05-10-17-28-36-42 05-10-17-30-36-42 05-10-28-30-36-42 05-17-28-30-36-42 バカバカしいとお笑いのことでしょうが、 私は真剣です。 どうかヨロシクご教授ください。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

#1です > 迷惑ついでにお尋ねしたいのですが、 ほにほに あまりいい例ではないと思いますが、#1での関数 MakeNumString を書き換えます。 (関数 MakeNumString2 でやる時には同じような変更で、ということで) Public Function MakeNumString(ParamArray vF()) As String   Dim i As Integer   Dim j As Integer   Dim iNum(1 To 43) As Integer   Dim sRet As String   Dim sTmp As String   sRet = ""   For i = UBound(vF) To LBound(vF) + 1 Step -1     For j = 1 To 43       iNum(j) = 0     Next     For j = LBound(vF) To UBound(vF)       If (i <> j) Then iNum(vF(j)) = 1     Next     sTmp = ""     For j = 1 To 43       If (iNum(j) <> 0) Then sTmp = sTmp & "-" & Format(j, "00")     Next     sRet = sRet & "," & Mid(sTmp, 2)   Next   MakeNumString = Mid(sRet, 2) End Function ボーナス数値 N0 は必ず初めに指定することが条件です。 結果はそれぞれ以下の様になります。 回数 N0 N1 N2 N3 N4 N5 N6 src 1 39 2 8 10 13 27 30 02-08-10-13-27-39,02-08-10-13-30-39,02-08-10-27-30-39,02-08-13-27-30-39,02-10-13-27-30-39,08-10-13-27-30-39 2 5 1 9 16 20 21 43 01-05-09-16-20-21,01-05-09-16-20-43,01-05-09-16-21-43,01-05-09-20-21-43,01-05-16-20-21-43,05-09-16-20-21-43 3 13 1 5 15 31 36 38 01-05-13-15-31-36,01-05-13-15-31-38,01-05-13-15-36-38,01-05-13-31-36-38,01-13-15-31-36-38,05-13-15-31-36-38 回数 N0 N1 N2 N3 N4 N5 N6 解 1 39 2 8 10 13 27 30 02-08-10-13-27-39 1 39 2 8 10 13 27 30 02-08-10-13-30-39 1 39 2 8 10 13 27 30 02-08-10-27-30-39 1 39 2 8 10 13 27 30 02-08-13-27-30-39 1 39 2 8 10 13 27 30 02-10-13-27-30-39 1 39 2 8 10 13 27 30 08-10-13-27-30-39 2 5 1 9 16 20 21 43 01-05-09-16-20-21 2 5 1 9 16 20 21 43 01-05-09-16-20-43 2 5 1 9 16 20 21 43 01-05-09-16-21-43 2 5 1 9 16 20 21 43 01-05-09-20-21-43 2 5 1 9 16 20 21 43 01-05-16-20-21-43 2 5 1 9 16 20 21 43 05-09-16-20-21-43 3 13 1 5 15 31 36 38 01-05-13-15-31-36 3 13 1 5 15 31 36 38 01-05-13-15-31-38 3 13 1 5 15 31 36 38 01-05-13-15-36-38 3 13 1 5 15 31 36 38 01-05-13-31-36-38 3 13 1 5 15 31 36 38 01-13-15-31-36-38 3 13 1 5 15 31 36 38 05-13-15-31-36-38 回数 解 1 02-08-10-13-27-39 1 02-08-10-13-30-39 1 02-08-10-27-30-39 1 02-08-13-27-30-39 1 02-10-13-27-30-39 1 08-10-13-27-30-39 2 01-05-09-16-20-21 2 01-05-09-16-20-43 2 01-05-09-16-21-43 2 01-05-09-20-21-43 2 01-05-16-20-21-43 2 05-09-16-20-21-43 3 01-05-13-15-31-36 3 01-05-13-15-31-38 3 01-05-13-15-36-38 3 01-05-13-31-36-38 3 01-13-15-31-36-38 3 05-13-15-31-36-38 ※ 当てられたら分け前があるかも、ということで

fine-top
質問者

お礼

おはようございます、30246kikuさん。 早速貼り付けてやっているんですが (1日中、やってましたのでお礼が遅くなりました。) なぜか上手く行っていません。 私の勉強不足です。 絶対完成したいと思っていますので もう少し時間を下さい。 一先ず、ありがとうございました。

その他の回答 (3)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.3

訂正します C1=SUBSTITUTE(TRIM(SUBSTITUTE(TEXT(MIN($B$1:$B$7),"00")&" "&TEXT(SMALL($B$1:$B$7,2),"00")&" "&TEXT(SMALL($B$1:$B$7,3),"00")&" "&TEXT(SMALL($B$1:$B$7,4),"00")&" "&TEXT(SMALL($B$1:$B$7,5),"00")&" "&TEXT(SMALL($B$1:$B$7,6),"00")&" "&TEXT(MAX($B$1:$B$7),"00"),TEXT(LARGE($B$1:$B$6,ROW(A1)),"00"),""))," ","-")

fine-top
質問者

お礼

おはようございます、sige1701さん。 エクセルですね!ありがとうございます。 今回はロト6ですので最低約610万行が必要となりますので エクセルでは行数が足りません。 一度何かやってみたいと思います。 こんな私のくだらない質問に真剣にお答え頂きまして 本当に感謝しています。ありがとうございました。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.2

関数で作ってみました    A     B    C 1 本数字1個目 10  10-17-20-28-30-36 2 本数字2個目 17   20-17-20-28-30-42 3 本数字3個目 28   10-17-20-28-36-42 4 本数字4個目 30   10-17-20-30-36-42 5 本数字5個目 36  10-20-28-30-36-42 6 本数字6個目 42   17-20-28-30-36-42 7 ボーナス数字 20 C2=SUBSTITUTE(TRIM(SUBSTITUTE(TEXT(MIN($B$2:$B$8),"00")&" "&TEXT(SMALL($B$2:$B$8,2),"00")&" "&TEXT(SMALL($B$2:$B$8,3),"00")&" "&TEXT(SMALL($B$2:$B$8,4),"00")&" "&TEXT(SMALL($B$2:$B$8,5),"00")&" "&TEXT(SMALL($B$2:$B$8,6),"00")&" "&TEXT(MAX($B$2:$B$8),"00"),TEXT(LARGE($B$2:$B$7,ROW(A1)),"00"),""))," ","-")

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

テーブル名が「loto6」 フィールド名が「回数」「N0」「N1」「N2」「N3」「N4」「N5」「N6」で 「N0」(エヌゼロ)がボーナスとします。 フィールドの型は、整数 テーブルサンプル 回数 N0 N1 N2 N3 N4 N5 N6 1 39 2 8 10 13 27 30 2 5 1 9 16 20 21 43 標準モジュールに以下関数を作成します。 Public Function MakeNumString(ParamArray vF()) As String   Dim i As Integer   Dim j As Integer   Dim sRet As String   Dim sTmp As String   sRet = ""   For i = UBound(vF) To LBound(vF) + 1 Step -1     sTmp = ""     For j = LBound(vF) To UBound(vF)       If (i <> j) Then         sTmp = sTmp & "-" & Format(vF(j), "00")       End If     Next     sRet = sRet & "," & Mid(sTmp, 2)   Next   MakeNumString = Mid(sRet, 2) End Function Public Function MySplit(vF As Variant, iNum As Integer) As String   MySplit = ""   If (Not IsNull(vF)) Then     MySplit = Split(vF, ",")(iNum)   End If End Function 関数 MakeNumString では、1つ目に指定されてものを必ず使い 2つ目以降のものを1つ抜いた形で文字列を作ります。 1度の呼び出しで複数のレコードに値を戻せないので , 区切りで戻します。 (ミニロトでも使えると思います) 関数 MySplit では、, 区切りの文字列何番目を得たいか指定します。 関数名は適宜変更してください。 クエリは2段階の作成になると思います。 クエリ「Q1」のSQLビューの内容が以下 SELECT 回数, N0, N1, N2, N3, N4, N5, N6 , MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]) AS src FROM loto6; クエリ「Q1」の結果が以下 回数 N0 N1 N2 N3 N4 N5 N6 src 1 39 2 8 10 13 27 30 39-02-08-10-13-27,39-02-08-10-13-30,39-02-08-10-27-30,39-02-08-13-27-30,39-02-10-13-27-30,39-08-10-13-27-30 2 5 1 9 16 20 21 43 05-01-09-16-20-21,05-01-09-16-20-43,05-01-09-16-21-43,05-01-09-20-21-43,05-01-16-20-21-43,05-09-16-20-21-43 クエリ「Q1」をもとにしたクエリのSQLビューの内容が以下 SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],0) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],1) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],2) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],3) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],4) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],5) AS 解 FROM Q1 ; そのクエリの結果が以下 回数 N0 N1 N2 N3 N4 N5 N6 解 1 39 2 8 10 13 27 30 39-02-08-10-13-27 1 39 2 8 10 13 27 30 39-02-08-10-13-30 1 39 2 8 10 13 27 30 39-02-08-10-27-30 1 39 2 8 10 13 27 30 39-02-08-13-27-30 1 39 2 8 10 13 27 30 39-02-10-13-27-30 1 39 2 8 10 13 27 30 39-08-10-13-27-30 2 5 1 9 16 20 21 43 05-01-09-16-20-21 2 5 1 9 16 20 21 43 05-01-09-16-20-43 2 5 1 9 16 20 21 43 05-01-09-16-21-43 2 5 1 9 16 20 21 43 05-01-09-20-21-43 2 5 1 9 16 20 21 43 05-01-16-20-21-43 2 5 1 9 16 20 21 43 05-09-16-20-21-43 クエリ「Q1」をもとにしたクエリのSQLビューの内容が以下 SELECT 回数, MySplit([src],0) AS 解 FROM Q1 UNION SELECT 回数, MySplit([src],1) AS 解 FROM Q1 UNION SELECT 回数, MySplit([src],2) AS 解 FROM Q1 UNION SELECT 回数, MySplit([src],3) AS 解 FROM Q1 UNION SELECT 回数, MySplit([src],4) AS 解 FROM Q1 UNION SELECT 回数, MySplit([src],5) AS 解 FROM Q1 ; そのクエリの結果が以下 回数 解 1 39-02-08-10-13-27 1 39-02-08-10-13-30 1 39-02-08-10-27-30 1 39-02-08-13-27-30 1 39-02-10-13-27-30 1 39-08-10-13-27-30 2 05-01-09-16-20-21 2 05-01-09-16-20-43 2 05-01-09-16-21-43 2 05-01-09-20-21-43 2 05-01-16-20-21-43 2 05-09-16-20-21-43 また、自分で指定するやり方では、 Public Function MakeNumString2(ParamArray vF()) As String   Dim i As Integer   Dim sRet As String   sRet = ""   For i = LBound(vF) To UBound(vF)     sRet = sRet & "-" & Format(vF(i), "00")   Next   MakeNumString2 = Mid(sRet, 2) End Function で、クエリの内容を SELECT 回数, MakeNumString2([N0],[N1],[N2],[N3],[N4],[N5]) AS 解 FROM loto6 UNION SELECT 回数, MakeNumString2([N0],[N1],[N2],[N3],[N4],[N6]) AS 解 FROM loto6 UNION SELECT 回数, MakeNumString2([N0],[N1],[N2],[N3],[N5],[N6]) AS 解 FROM loto6 UNION SELECT 回数, MakeNumString2([N0],[N1],[N2],[N4],[N5],[N6]) AS 解 FROM loto6 UNION SELECT 回数, MakeNumString2([N0],[N1],[N3],[N4],[N5],[N6]) AS 解 FROM loto6 UNION SELECT 回数, MakeNumString2([N0],[N2],[N3],[N4],[N5],[N6]) AS 解 FROM loto6 ; そのクエリの結果が以下 回数 解 1 39-02-08-10-13-27 1 39-02-08-10-13-30 1 39-02-08-10-27-30 1 39-02-08-13-27-30 1 39-02-10-13-27-30 1 39-08-10-13-27-30 2 05-01-09-16-20-21 2 05-01-09-16-20-43 2 05-01-09-16-21-43 2 05-01-09-20-21-43 2 05-01-16-20-21-43 2 05-09-16-20-21-43 ※ MakeNumString2([N0],[N1],[N2],[N3],[N4],[N5]) の記述部分は、関数を使わなくても [N0] & "-" & [N1] & "-" & [N2] & "-" & [N3] & "-" & [N4] & "-" & [N5] の記述で、2桁に合わせるのならそれぞれ Format([N0],"00") とすればよいと思います。 ※今までの関数を組み合わせて SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),0) AS 解 FROM loto6 UNION SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),1) AS 解 FROM loto6 UNION SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),2) AS 解 FROM loto6 UNION SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),3) AS 解 FROM loto6 UNION SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),4) AS 解 FROM loto6 UNION SELECT 回数, MySplit(MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]),5) AS 解 FROM loto6 ; でも上記結果は得られます。 ※ できても、使える使えないはあるので、検討してください。 ※ 抽出条件を記述する時には、作成した関数をできるだけ呼ばないようにすると速くなります SELECT * FROM ( SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],0) AS 解 FROM Q1 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],1) AS 解 FROM Q1 ) WHERE N0=5; より SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],0) AS 解 FROM Q1 WHERE N0=5 UNION SELECT 回数, N0, N1, N2, N3, N4, N5, N6, MySplit([src],1) AS 解 FROM Q1 WHERE N0=5; より SELECT 回数, N0, N1, N2, N3, N4, N5, N6 , MakeNumString([N0],[N1],[N2],[N3],[N4],[N5],[N6]) AS src FROM loto6 WHERE N0=5;

fine-top
質問者

お礼

こんばんわ、30246kikuさん (^-^)/ いやぁ~!おみごとです。うれしいです。 ありがとうございます。 迷惑ついでにお尋ねしたいのですが、 今回の例ではボーナス数字が【5】と一番若い数字で一番左側に 来る組合せになるのですが、【5】ではなく、 【29】だったとしたら ほぼ真ん中辺りに並べ替えられますよね? 左から昇順に並べ替えるということは かなり難しいプログラムになりそうですね!? この《並び替える》というプログラムの方法を ご存知でしたら再度、ご教授いただけませんか? ヨロシクお願いします。 ありがとうございました。

関連するQ&A

  • ACCESSのマクロに関しまして

    お願いします。 ACCESS97で追加クエリを作成し、その後自動起動にしようと思い、マクロで追加クエリを項目に入れマクロを作りました。 マクロを作成する際に、モジュールでレコード追加するテーブルを一度削除しようと思い、「DELETE文」でモジュールを作成し、マクロの追加クエリの前に「プロシージャの実行」でモジュールのプロシージャを実行するようマクロに記述しました。 <マクロ内容> (1)「プロシージャの実行」  (追加クエリで追加するテーブルの中身をDELする) (2)「クエリを開く」  (追加クエリでレコード追加) この用に記述し、マクロ名を「AutoExec」で記述して、ファイルを実行してもマクロが起動しません。 (1)の「プロシージャの実行」までは、実行されているようなのですが(テーブル内確認)、以降の追加クエリが実行されません。 何か他の設定があるのでしょうか? お願い致します。

  • アクセスに関する疑問!

    Accessで「モジュールが見つかりません」ってメッセージが出るんですが、テーブルとクエリは開けるのでそこからレポートに行くためのマクロ?が変になってしまったみたいなんですが、アクセスでそんなことってあるのですか? どの様にしたら原因がわかるんですか?

  • Access リレーションシップの設定・解除

    2種類のクエリーをテーブルにインポートさせた後、リーレーションシップを貼るのに マクロかモジュールで自動化させていのですが? リレーションシップの設定・解除を行う方法(マクロかモジュール)を教えてください。

  • アクセスのクエリで

    アクセスのクエリで、テーブルAのフィールド1には数字、×、アルファベットの組み合わせの文字がありますが、この中からアルファベットを消去した表示にする事はできますか? 例えば、T24.70×17.5 ならば、 24.70×17.5にしたいです。 誰か教えて下さい。よろしくお願いします。

  • ACCESS内の検索

    お世話になります。できるのどうかわからないのですが宜しくお願いします。 ACCESSを利用し在庫管理などを行っているのですがその際、例えばクエリ名「A」というクエリをレコードソースとしフォームを作るとします。さらに同じクエリをレコードソースとしレポートを作ります。こういったように同じクエリやテーブルを使用する場合、システムの規模が大きくなるとクエリやテーブルがどこでどのように使用しているか把握しきれなく、また時がたつにつれ忘れていってしまいます。そこで、クエリやテーブルがどこで(クエリ、フォーム、レポート、マクロ、モジュールなど)使用されているか検索できるようにするにはどうしたらよいでしょうか? 宜しくお願いします。

  • ミニロト・ロト6のビジュアル化

    どなたかご存じでしたら回答をお願いします。 数字選択式宝くじのミニロトとロト6の抽選結果をエクセルに登録しております。 ※()内の数字はボーナス数字です。 【ミニロト】 01 12 13 18 21 (06) 【ロト6】 01 12 23 34 35 43 (07) 上記結果を見やすくするために、本数字には「○」をつけて、ボーナス数字には「●」をつける方法 が知りたいです。 【ミニロト】       01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ・・ 01 12 13 18 21 (06) ○         ●           ○○          ○    ○ 【ロト6】         01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22・ 01 12 23 34 35 43 (07)○           ●         ○    使用しているエクセルは2007です。 以上、よろしくお願いします。       

  • Access97をAccess2002にするには

    Access97で作成したmdb(オブジェクトは、テーブル(リンクテーブル有り)、クエリ、フォーム、レポート、マクロ(AutoExecのみ)、モジュールを使用)をAccess2002へ移行させようと思うのですが、単純に[ツール]→[データベースユーティリティ]→[データベースの変換]で良いものでしょうか。 もし、何か気をつけなければならないこと、やらなければならないこと等、または変換方法等をご教授いただけないでしょうか。

  • ロト6で毎回同じ組み合わせを買っている方へ質問

    ロト7、ロト6、ミニロト、ナンバーズなどで、毎回同じ数字の組み合わせを購入されている方たちに質問です。 もし、その同じ数字の組み合わせで小額の当選をした場合(具体例:ロト6で5等の1,000円が当たった場合)、次回からそれまでとは違う組み合わせを購入するのですか?それともまだ買い続けるのですか?もし、買い続けるとしたら、いつ何をきっかけにその組み合わせを変えるおつもりですか? 理由が重要なので、その理由を添えてお答え下さい。 納得いく回答の方にベストアンサーを差し上げます。

  • ACCESS97での不具合

    ACCESS97で開発しているものが、突然、テーブル名・クエリー名・マクロ名・モジュール名全てが消え、そして、新規作成ボタンや、開くボタン、デザインのボタンまでもが、表示できなくなり、そのACCESSを開こうとしても、開けなく、修復しようとしても、途中で固まってしまいます。(でも、フォームはきちんと立ち上がっていて、、、)何度も修復を試みて、なんとか、復活したのですが、何故、そのような事になったのかが、全然分からなく、対応に困っています。 誰かご存知の方宜しくお願いいたします。

  • アクセスで曜日の並び順を変えたい

    ACCESS 2003を利用しています。 曜日を昇順でソートしたいのですが、テーブルでもクエリでも昇順でソートすると「火、金、月、水、土、日、木」と表示されます。 日曜日から、もしくは月曜日から並べたいのですが、どうすればよいのでしょうか? よろしくお願いいたします。

専門家に質問してみよう