Excel VBA質問箱 IV

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

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


8224 / 13644 ツリー ←次へ | 前へ→

【34555】配列変数の受渡し APOLLO 06/2/6(月) 17:10 質問[未読]
【34556】Re:配列変数の受渡し Blue 06/2/6(月) 17:18 発言[未読]
【34557】Re:配列変数の受渡し Blue 06/2/6(月) 17:32 発言[未読]
【34558】Re:配列変数の受渡し inoue 06/2/6(月) 17:34 発言[未読]
【34563】Re:配列変数の受渡し APOLLO 06/2/6(月) 19:13 質問[未読]

【34555】配列変数の受渡し
質問  APOLLO  - 06/2/6(月) 17:10 -

引用なし
パスワード
   はじめまして
初歩的な質問ですみませんが、配列変数のプロシージャ間の受渡しを教えてください。たとえば
Sub plot()
Dim 下top(100), 下end(100), 上top(100), 上end(100) As Variant
・・・・・・・・
End Sub
で生成したデータをSub 処理()に渡し、それを使って別の計算をしたいのですが、
表現方法がわからず、うまくいきません。

よろしくおねがいします。

【34556】Re:配列変数の受渡し
発言  Blue  - 06/2/6(月) 17:18 -

引用なし
パスワード
   下記のように処理の方で配列を用意しておくのはどうでしょうか?

Sub 処理()
  Dim a(10) As Integer
  Dim b(10) As Integer
  Dim i As Integer
  
  ' 関数 test で a と b に値を格納
  Call 設定(a, b)
  
  ' 表示(確認用)
  For i = LBound(a) To UBound(a)
    Debug.Print a(i)
  Next
  For i = LBound(b) To UBound(b)
    Debug.Print b(i)
  Next
  
End Sub

Sub 設定(ByRef a() As Integer, ByRef b() As Integer)
  Dim i As Integer
  
  For i = LBound(a) To UBound(a)
    a(i) = i
  Next
  For i = LBound(b) To UBound(b)
    b(i) = -1 * i
  Next
End Sub

【34557】Re:配列変数の受渡し
発言  Blue  - 06/2/6(月) 17:32 -

引用なし
パスワード
   あ〜
普通に Variant の2次元配列を返せばいいかも。

わかり易さを考えてユーザ定義型にするほうがよさげ。

Private Type 情報
  下top(100) As Variant
  下end(100) As Variant
  上top(100) As Variant
  上end(100) As Variant
End Type

Sub 処理()
  Dim info As 情報
  
  info = plot()
  
End Sub

Private Function plot() As 情報
  Dim info As 情報
  
  'ここで設定
  
  plot = info
End Function

Subにして、ByRefで参照渡しで渡す方法もあります。(こっちのほうが私は好きです)

【34558】Re:配列変数の受渡し
発言  inoue E-MAILWEB  - 06/2/6(月) 17:34 -

引用なし
パスワード
   こんにちは。

まず、回答ではありませんが、
>Dim 下top(100), 下end(100), 上top(100), 上end(100) As Variant
この場合では結果的に問題ありませんが、
この書き方だと「上end」以外はデータ型を明示していないことになります。
それぞれの変数に「As ...」は明記しないといけません。

>表現方法がわからず、うまくいきません。
普通に引数に渡すのではいけませんか?
[例]
Sub TEST1()
  Dim A(100) As Variant
  Dim B(200) As Variant
  Call TEST2(A, B)
End Sub

Sub TEST2(HOGE1 As Variant, HOGE2 As Variant)
MsgBox UBound(HOGE1) & "-" & UBound(HOGE2)
End Sub

【34563】Re:配列変数の受渡し
質問  APOLLO  - 06/2/6(月) 19:13 -

引用なし
パスワード
   inoue さん

さっそくありがとうございます。

>まず、回答ではありませんが、
>>Dim 下top(100), 下end(100), 上top(100), 上end(100) As Variant
>この場合では結果的に問題ありませんが、
>この書き方だと「上end」以外はデータ型を明示していないことになります。
>それぞれの変数に「As ...」は明記しないといけません。

文法も知らずやみくもに、コンマで区切って使っていました。この例ではありませんがエラーにならなかったのは「上end」以外はVariantに省略時設定されて動いたということでしょうか?
しかしこんな例でも現在動いているのですが・・なぜでしょう

Public 日付, 日付end As Object

>
>>表現方法がわからず、うまくいきません。
>普通に引数に渡すのではいけませんか?
>[例]
>Sub TEST1()
>  Dim A(100) As Variant
>  Dim B(200) As Variant
>  Call TEST2(A, B)
>End Sub
>
>Sub TEST2(HOGE1 As Variant, HOGE2 As Variant)
>MsgBox UBound(HOGE1) & "-" & UBound(HOGE2)
>End Sub

UBoundがわかりません。なにかの関数ですか?まったく素人で申し訳ありません。
それから私の持っているVBAの参考書にはプロシージャの呼び出しは
Sub TEST1()
  Dim A As Variant
  Dim B As Variant
  TEST2 A, B
End Sub
のように書いてあるのですが、Callを使わなければいけないのでしょうか?

なおVBAの文法書でいいものがあれば教えてもらえませんか・・

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