重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

a,b,c,d,e (100) という配列があり、それぞれ、
1~100までの数字をばらばらに入れたいのです。
↓のプログラムを変数の分書かなくてはいけないのでしょうか?
(Control変数は使えないようですし・・・)


For for_i = 1 To 200
x = Int(Rnd() * 100) + 1
y = Int(Rnd() * 100) + 1

st = a(y)
a(y) = a(x)
a(x) = st
next

For for_i = 1 To 200
x = Int(Rnd() * 100) + 1
y = Int(Rnd() * 100) + 1

st = b(y)
b(y) = b(x)
b(x) = st
next

以下省略!!

A 回答 (4件)

For ~ Next の部分をサブプロシージャにして、引数としてa(),b()… を渡すようにすれば、多少は楽を出来そうです。





もしくは
変数の名称自体を仮想化することは出来ないので、例えば、2次元配列として
dim a(4,100) as long
などとして宣言し
For i=0 to 4
 For j=1 to 200
  (略)
  a(i,j) = st
  (略)
 Next j
Next i
のように書いても良いかもしれません。
    • good
    • 0

先ほどよりかは効率いいです。


Sub Randmize(ByVal ParamArray ran() As Integer)
Dim i, j As Integer
For i = 1 To 100
Application.DoEvents()
ran(i) = Int(Rnd() * 100) + 1
For j = 1 To i - 1
If ran(i) = ran(j) Then
i = i - 1
Exit For
End If
Next
Next
End Sub

Private Sub Bu_Click(ByVal sender As System.Object, ByVal f As System.EventArgs) Handles Bu.Click
Dim a(100), b(100), c(100), d(100), e(100) As Integer
Randmize(a)
Randmize(b)
Randmize(c)
Randmize(d)
Randmize(e)
End Sub
    • good
    • 0
この回答へのお礼

皆様 ご回答・アドバイス等ありがとうございます。
がんばってみます。w

お礼日時:2004/05/08 02:45

関数にしてみました。


100件は時間かかります。
Sub StudentScores(ByVal ParamArray ran() As Integer)
Dim i, j As Integer
For i = 1 To 10
Application.DoEvents()
Txt1.Text = Int(i / 10)
ran(i) = Int(Rnd() * 10) + 1
For j = 1 To i - 1
If ran(i) = ran(j) Then
i = i - 1
End If
Next
Next
End Sub

Private Sub Bu_Click(ByVal sender As System.Object, ByVal f As System.EventArgs) Handles Bu.Click
Dim a(100), b(100), c(100), d(100), e(100) As Integer
StudentScores(a)
Txt1.Text = a(1)
Txt2.Text = a(2)
Txt3.Text = a(3)
Txt4.Text = a(4)
Txt5.Text = a(5)
Txt6.Text = a(6)
Txt7.Text = a(7)
Txt8.Text = a(8)
Txt9.Text = a(9)
Txt10.Text = a(10)
End Sub
    • good
    • 0

1.collection使うとか。



Dim a(10), b(10), col(10) As Integer
Dim myCol As New Collection()

myCol.Add(a)
myCol.Add(b)

For Each col In myCol
col(0) = 123
Next

Console.WriteLine(a(0))


2.クラス使うとか。
Public Class Test

Public value(10) As Integer

Sub New()
    Me.value(0) = 123
End Sub

End Class
ためしにTestクラスつくって

    Dim a As New Test()
Dim b As New Test()

Console.WriteLine(a.value(0))
って使う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!