Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

タイトルRe^7: ランダムにレコードを抽出させる方法について
記事No: 76558
投稿日: 2006/04/20(Thu) 21:25
投稿者: 水上
>  VBAを使わない方法を考えてみました。
乱数: (Time()*(Mid([英単語],1,1) & Mid([英単語],2,1) & Mid([英単語],3,1))-Int(Time()*(Mid([英単語],1,1) & Mid([英単語],2,1) & Mid([英単語],3,1))
でTop値をとればランダムチョイスできるのでは?
Mid([英単語],10,1)くらいまでやれればよいのでは
Time()はRnd()でもよい。
Asc(Mid([英単語],1,1)) Ascを抜かしてしまいました。
こんな感じでできるんじゃないかとおもいます。

タイトルRe^8: ランダムにレコードを抽出させる方法について
記事No: 76622
投稿日: 2006/04/21(Fri) 20:10
投稿者: ハルウララ
> >  VBAを使わない方法を考えてみました。
> 乱数: (Time()*(Mid([英単語],1,1) & Mid([英単語],2,1) & Mid([英単語],3,1))-Int(Time()*(Mid([英単語],1,1) & Mid([英単語],2,1) & Mid([英単語],3,1))
> でTop値をとればランダムチョイスできるのでは?
> Mid([英単語],10,1)くらいまでやれればよいのでは
> Time()はRnd()でもよい。
> Asc(Mid([英単語],1,1)) Ascを抜かしてしまいました。
> こんな感じでできるんじゃないかとおもいます。

水上 様
アドバイスありがとうございます。
乱数の式はクエリのところで設定するのでしょうか。
Top値は画面上部にある部分だと思うのですが、“Top値をとる”というのはどういう事でしょうか。
式の内容からみてもかなりハイレベルな設定であることだけは分かるのですが。
(やはりVBAを使わない分、複雑化するのでしょうか)

タイトルRe^9: ランダムにレコードを抽出させる方法について
記事No: 76629
投稿日: 2006/04/22(Sat) 07:27
投稿者: 水上
おはようございます。

SELECT TOP 1 Time()*([ID] & Asc(Right([英単語],1)))-Int(Time()*([ID] & Asc(Right([英単語],1)))) AS 乱数, テーブル1.英単語
FROM テーブル1
ORDER BY Time()*([ID] & Asc(Right([英単語],1)))-Int(Time()*([ID] & Asc(Right([英単語],1))));

TOP 1 1個だけえらんでます。
Time() 1?〜0?をかえします
[ID] & Asc(Right([英単語],1)) 適当な固有の数をつくってます
暗黙の型変換されます。
-Int(Time()*([ID] & Asc(Right([英単語],1))))
整数部を除算
動作確認しました。
ただし 馬名ローマ字、血統ナンバー 使用

タイトルRe^10: ランダ追伸
記事No: 76630
投稿日: 2006/04/22(Sat) 07:34
投稿者: 水上
> ただし 馬名ローマ字、血統ナンバー 使用
Timeが0のとき不具合がおきますね
でもなんか値を返しそうだから無問題かな?

タイトルRe^7: ランダムにレコードを抽出させる方法について
記事No: 76621
投稿日: 2006/04/21(Fri) 19:57
投稿者: ハルウララ
>  VBAを使わない方法を考えてみました。
>
>  マクロ「M_Rnd」を次の内容で登録します。
> アクション「プロシージャの実行」
> プロシージャ名「=Rnd()」
>
>  次にマクロ「AutoExec」を次の内容で登録します。
> アクション「マクロの実行」
> マクロ名「M_Rnd」
> 実行回数「=Right(Time()/1,2)」
>
>  以上で、mdbを開くとき、Time関数から得られた後ろ2桁の回数分だけRnd()を実行します。
>
>  クエリを開くと、そのあとのRnd()からになります。
>  ですからパターンは、99パターンしかありませんが…

kitasue様 ありがとうございます。
早速マクロを作り実行してみたところ、mdbを閉じて再び開いたところ、閉じる前と順番が
変わっておりました!
あとは、なぜ出来たのかをじっくり勉強したいと思います。

誠にありがとうございました。

タイトルRe^8: ランダムにレコードを抽出させる方法について
記事No: 76658
投稿日: 2006/04/22(Sat) 17:58
投稿者: kitasue
 すみません。検証していたら不具合を発見しました。
> 実行回数「=Right(Time()/1,2)」
の部分を
実行回数「=Second(Time())*60+Minute(Time())」
に変えてください。この場合、Rnd()の初期値は3,600通りになります。

[前頁]

このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています


 

ページの先頭へ 前ページへ戻る