- 締切済み
アクセスでLOTO6の絞込みを行いたい
アクセスでLOTO6のデータベースを作りました。 600万通りの組合せの中から、自分が設定した条件に 見合う組合せを選択したいと思います。 テーブルは い・ろ・は・に・ほ・へ の6つのフィールドがあり、それぞれ 1・2・3・4・5・6 から 38・39・40・41・42・43 までのすべての組合せが入っています。 設定したい条件としては 1.A1-6 B7-12 C13-18 D19-24 E25-30 F31-36 G37-43 というグループわけをした数字の組合せが ABCCDE などという配列の条件に組み合わされたとき。 2.偶数と奇数の比率が 2:4 3:3 などという割合になったとき 3.自分が希望する数字が組合せの中に含まれているとき の三つです。 できればフォームで 条件1 配列:ABCDEF 条件2 比率:3:3 条件3 含める数:15 のように抽出を行いたいと思います。まず何から取り掛かればよいのか そこからわからないので、申し訳ありませんが教えてください。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- keikan
- ベストアンサー率42% (75/176)
No2です。遅くなりました^^;; チャレンジされると言うことですので、少しずつ行ってみましょうか^^ ちなみに、No4,5さんのSQLも結構おもしろくシンプルでよいのですが、 条件1を随時選択できないので、その都度SQL組み直す必要があります。 その条件の都度、そのSQLを生成するコードを書いていくのもおもしろいと思います。 ただ、下記のSQLはそのままではアクセスでは動かないので、関数や演算子をアクセス用に変えてあげる必要があります。 ちなみにSQLというのはアクセスや、そのほかのデータベースと言われる物をデータを取り出したり(抽出)、加工(変更、削除)したりすることをするための一般的な言語になっています。いろいろ決めごとがそれぞれあって、各データベースとも大まかには同じような命令などで操作できるようになっています。ただ、部分的に(結構)差違があって、それなりに変更をくわえないと動かなかったりします。 でも、知っていると便利ですよ さて本題です。 下記のSQL利用してもよいのですがNo4さんのご意見もありますので、ここはシンプル(?)にアクセスのモジュールを使っていこうと思います。 1.まず、手っ取り早く [Numbers]というテーブルを造りましょう。[]かっこはそれが何かの前だと言うことを示してあります。 でもって中身は [N1],[N2],[N3],[N4],[N5],[N6]・・・ですべて数値型でOKです。値は43までなので整数型でいいと思います。 で。このテーブルにコードをつかってデータを書き込んでいきます。 2.モジュールタブをクリックして、次に新規作成を選んでください。 すると”Microsoft Visual Basic -dbname -[Module*(コード)]なるウインドウが開くと思います。 中央上段に(General)と書いてあるテキストボックスがあると思います。 その下の広い空間がコード(プログラム)を書く場所になります。 一番上の方に”Option *****”という行が1,行ないし2行ぐらいあるかもしれません。それはおまじないなのでそのままにしておいてください。 マウス等でその領域内をクリックしてカーソルを表示させて、上記のおまじないの下の方にコードを書いてみてください。(コピペでもいいと思います^^;;) Sub test() Debug.Print "This is TEST!!" MsgBox "こんにちは!!" End Sub 3.メニューバーから表示-イミディエイトウィンドウをクリックしてイミディエイトを表示させてください。(たぶんコードの下あたりに出てくると思います) 4.でてきたら、イミディエイトないでtestと入力してEnterキーをたたいてください。 メッセージボックス表示されましたか? メッセージボックスを綴じるともとの画面に戻ると思いますが、イミディエイトにもメッセージが表示されていると思いますが確認してください。 まずはここまで。頑張ってみてください。 終了するときは、一番右上のペケで閉じるか、アクセスを終了すれば閉じたと思います。名前は適当でかまわないので保存しておいてね^^
横レス失礼します。 クエリを新規作成で開き、「表示」→「SQLビュー」を選ぶとSQL文が入力可能になりますので、あとは、コピペでいけます。
- masayuki0511
- ベストアンサー率46% (14/30)
アクセスでも、SQLを記述することができます。 若干、特殊な記法もありますが、 基本的には他のDBMSのSQLと同じです。 アクセスが手元にないんで、試してみることはできないんですが、 同等のことをアクセスでもできるはずです。
- masayuki0511
- ベストアンサー率46% (14/30)
さっきのより、こっちの方がいいですね。 結果は同じです。 SELECT N1.n,N2.n,N3.n,N4.n,N5.n,N6.n, N1.odd+N2.odd+N3.odd+N4.odd+N5.odd+N6.odd AS odds FROM (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='A') AS N1, (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='B') AS N2, (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='C') AS N3, (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='D') AS N4, (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='E') AS N5, (SELECT n,IF(MOD(n,2) = 1, 1, 0) as odd FROM Numbers WHERE category='F') AS N6 WHERE 15 IN (N1.n,N2.n,N3.n,N4.n,N5.n,N6.n) HAVING odds = 3
- masayuki0511
- ベストアンサー率46% (14/30)
アクセスじゃないんですが、一般的なSQLで書いてみました。 MySQL4.1 で試しています。 2430 ヒットしました。 アクセスのSQLだったら、この程度はかけるのでは。 SELECT N1.n,N2.n,N3.n,N4.n,N5.n,N6.n, COUNT(N1.odd)+COUNT(N2.odd)+COUNT(N3.odd)+COUNT(N4.odd)+COUNT(N5.odd)+COUNT(N6.odd) AS odds FROM (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='A') AS N1, (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='B') AS N2, (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='C') AS N3, (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='D') AS N4, (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='E') AS N5, (SELECT n,IF(MOD(n,2) = 1, 1, NULL) as odd FROM Numbers WHERE category='F') AS N6 WHERE 15 IN (N1.n,N2.n,N3.n,N4.n,N5.n,N6.n) GROUP BY N1.n,N2.n,N3.n,N4.n,N5.n,N6.n HAVING odds = 3; テーブルには、数字(n)、種別(category)が入っています。
データベースを使用する必要があるのでしょうか? 問題を単純化します #サイコロを二回振る。一回目が「3だったとき」二回目に出る目は? データベースにサイコロ二回の出る目、全てを登録し、一回目が3で絞れば解答はでますが、ほとんど無意味です。単純比較は出来ませんが、データベースを使わない方が効率よく出来そうです。
お礼
ご意見ありがとうございます。 なるほど・・・。データベースを作らないということは、 組み合わせを一覧表にして作るということですか?
- keikan
- ベストアンサー率42% (75/176)
条件3がない場合だと10000通りぐらいは出てきそうな気がします。 超単純に考えても 6*6*6*6*6*6=46656通り 偶数奇数の比率も 0:6=1通り 1:5=6通り 2:4=15通り 3:3=20通り 4:2=15 5:1=6 6:0=1 ・・・・64通り 15/64=0.234・・・10917通り 20/64=0.313・・・14650通り 約15000/43≒350 もっとも条件1が重複を許しているのでその分数は減るとは思いますが。 絞り込みをもっとしないと結構大変だと思います。 条件1をコンボボックス等を6個造って、絞り込みを行い、その値をもとにVBAでforループ等を使って組み合わせは出力できるので、その結果を保存するテーブルを造った方がいいかも。その後、条件2,条件3に合うようクエリーで絞り込むとできそうな気がします。チャレンジしますか?
お礼
ご意見ありがとうございます。 条件に設定する数字はもう少し増やそうと思っています。 例えば条件3:2 18 のように2数の設定です。 それでもまだまだ多いかもしれませんが。 ぜひともチャレンジしたいです。
面白そうなことしてますね。 質問ですが、条件1,2,3は、必ず指定するのでしょうか? それとも、例えば、条件3は指定しない、といった場合もあるのでしょうか?
お礼
ご意見ありがとうございます。 条件は3つとも必ず設定します。 が、条件2に関しては 0:6 1:5 5:1 6:0 という組み合わせは 削除して考えても良いと思っているので、 実質条件2で選択する条件は 4:2 2:4 3:3 の三つになると思います。
お礼
ご意見ありがとうございます。 初歩的な質問で申し訳ないのですが、書いていただいたSQLというのは Accessのモジュールに貼り付ければいいのでしょうか? それともお書きのとおり、Accessとは違う何か他の ソフトウェアで使用するものなのでしょうか。