Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


242 / 2272 ツリー ←次へ | 前へ→

【12430】出来た乱数の並び替え トシ 13/12/1(日) 14:19 質問[未読]
【12431】Re:出来た乱数の並び替え hatena 13/12/1(日) 17:38 回答[未読]
【12433】Re:出来た乱数の並び替え トシ 13/12/4(水) 17:22 お礼[未読]
【12434】Re:出来た乱数の並び替え hatena 13/12/4(水) 22:53 回答[未読]

【12430】出来た乱数の並び替え
質問  トシ  - 13/12/1(日) 14:19 -

引用なし
パスワード
   変数を5つ用意して
int a, int b, int c, int d, int e

a〜eまでに1〜5までの値をランダムに入れます。
ただし、a〜eで数字がダブル事がしないようにしたいです。

1〜5までの数字をランダムに生成するのは
Rnd関数を作成すればよいことは分かります。


ただ、同じ数字が入らないようにするには、
どの様にプログラムを書けばよいのか分かりません。
どなたか教えて頂けないでしょうか?

【12431】Re:出来た乱数の並び替え
回答  hatena  - 13/12/1(日) 17:38 -

引用なし
パスワード
   >変数を5つ用意して
>int a, int b, int c, int d, int e
>
>a〜eまでに1〜5までの値をランダムに入れます。
>ただし、a〜eで数字がダブル事がしないようにしたいです。

下記で紹介しているAryShuffle関数を使えばどうでしょうか。

配列をランダムに並べ替える関数 - hatena chips
hatenachips.blog34.fc2.com/blog-entry-121.html


使用例
Sub Test()
  Dim v As Variant
  Dim a As Integer, b As Integer, c As Integer
  Dim d As Integer, e As Integer
  
  v = Array(1, 2, 3, 4, 5)
  AryShuffle v
  
  a = v(0)
  b = v(1)
  c = v(2)
  d = v(3)
  e = v(4)
  
  Debug.Print a; b; c; d; e
End Sub

【12433】Re:出来た乱数の並び替え
お礼  トシ  - 13/12/4(水) 17:22 -

引用なし
パスワード
   ▼hatena さん:
>>変数を5つ用意して
>>int a, int b, int c, int d, int e
>>
>>a〜eまでに1〜5までの値をランダムに入れます。
>>ただし、a〜eで数字がダブル事がしないようにしたいです。
>
>下記で紹介しているAryShuffle関数を使えばどうでしょうか。
>
>配列をランダムに並べ替える関数 - hatena chips
>hatenachips.blog34.fc2.com/blog-entry-121.html
>
>
>使用例
>Sub Test()
>  Dim v As Variant
>  Dim a As Integer, b As Integer, c As Integer
>  Dim d As Integer, e As Integer
>  
>  v = Array(1, 2, 3, 4, 5)
>  AryShuffle v
>  
>  a = v(0)
>  b = v(1)
>  c = v(2)
>  d = v(3)
>  e = v(4)
>  
>  Debug.Print a; b; c; d; e
>End Sub

出来ました。
ありがとうございます。

もし、教えていただけるのであれば、
参考までに次の事もご教授して頂けるとうれしいです。

もし、100個のデータがあった場合に、
変数を配列化したりArray(1, 2, 3, 4, 5)を
簡略化できる方法はありますか?

【12434】Re:出来た乱数の並び替え
回答  hatena  - 13/12/4(水) 22:53 -

引用なし
パスワード
   >もし、100個のデータがあった場合に、
>変数を配列化したりArray(1, 2, 3, 4, 5)を
>簡略化できる方法はありますか?

具体的に、どのようにしたいのか、結果をどのように利用したいのか不明なのですが、とりあえず下記のコードをご参考に。

Sub Test()
  Dim MyArray() As Long '動的配列を宣言
  Dim i As Integer
  
  i = 100
  ReDim MyArray(i) '動的配列のサイズを設定(100件)
  
  For i = 0 To UBound(MyArray) '1〜100 の値を設定
    MyArray(i) = i + 1
  Next
  
  AryShuffle MyArray '配列をシャッフル
  
  For i = 0 To UBound(MyArray) '結果をイミディエイトに出力
    Debug.Print MyArray(i)
  Next
End Sub

242 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free