- 締切済み
サブプロシージャ内の配列名を条件によって変更して動作させたいのですが・・・
宜しくお願い致します。 VB2005を使ってます。 今までは行数が少ない簡単なプログラミングを行ってましたが、少し繰り返しの多い行数的に結構な量になるプログラミングを作っています。 小さなプログラムばかり組んでいたのでサブプロシージャとかはあまり使ったことがありませんが、本を見ていると同じことを繰り返し処理する際には便利が良いということが書かれてました。 そこでサブプロシージャの使用に挑戦しようと少しコードを書いたのですが、速攻壁に衝突してしまいました。 そこで質問ですが、基本的にはサブプロシージャでの処理を行う際にデータの受け渡しが必要ですが、簡単な数値などでないと仮引数として渡すことはできないのでしょうか?? 現在書いているコードの一部ですが・・・ private sub one1 (byval ・・・・・・・・・・・?? Dim i, j, l, m As Integer For i = 0 To 8 If i = 9 Then Exit For If blocountid(i) < 0 Then GoTo p21 Else For j = 0 To 8 If lincountid(j) < 0 Then GoTo p22 Else For l = 0 To 8 For m = 0 To 8 If blo(i, l) = lin(j, m) Then If kazu(b) = 0 Then 'blotopが最小でlintopが2番の時に該当し、 one = lin(j, m) 'かつそこに1以上の数値が入っていなかったら Else 'oneにindex番号を格納 one = -1 End If If one <> -1 Then GoTo p25 ・・・・・・・・・・ blocountid(i)やlincountid(j)という配列が全部で3種類あるのですがを条件によっては変更して処理を行いたいのですがサブプロシージャ内から配列を変更して呼び出すということは不可能なのでしょうか?? 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ainax
- ベストアンサー率45% (5/11)
間違ってたらすみません。 サブプロシージャに渡す引数の指定方法が分からないので、現在は、 GoTo文でやりくりしているということかな? で、実際には配列を引数にして渡したいと。その場合は下記のようにします。 Private Sub Hoge(Byval TestData() As Integer) ~処理~ End Sub このようにプロシージャを指定すればOKです。 配列を渡す場合は、 Dim data(8) As Integer Hoge(data) とすれば配列を渡せます。複数の配列を渡したい場合は Private Sub Hoge(Byval Data_A() As Integer, Byval Data_B() As Integer) です。 注意ですが、配列を渡した先で配列を変更しても、渡した元の配列は上の例では変更されません。 変数を渡して、渡した変数が変更されて欲しい場合は、 Private Sub Hoge(Byref Data As Integer) のように、Byval を Byref にしてください。 でもなるべくならByrefは使わずに、Functionプロシージャで 変数を返してやったほうがコードが分かりやすくなると思います。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
何をどうしたいのかあまり良く理解できなかったので見当違いでしたら すみません。 条件によって利用される配列が異なるという意味合いでしたら 配列を引数に持ったメソッドを1つ作れば良いと思います。 また余計なお世話かもしれませんが、GoTo文の利用は控えた方が宜しい かと思います。 見直した際に急に別な行にジャンプして、いったりきたりを繰り返したり、 分かり易さに欠けます。 結果できあがったコードは、スパゲティコードと呼ばれ、嫌われる コードになります。