• 締切済み

配列を引数で渡したりするには?

初心者なので困っています。配列をほかのサブルーチンへ渡して、その中で配列の値を書き換えて、上層のルーチンへ渡すにはどうしたらよいのでしょうか? 初心者なので、みなまさまのお知恵を拝借させてください。よろしくお願いします。 Private Sub Print() Dim C_ALL(3) As Integer Dim D_ALL(3) As Integer Data_Set(C_ALL(), D_ALL()) MsgBox(C_ALL() & " " & D_ALL()) '配列内容すべて表示 End Sub Private Sub Data_set(ByRef C_ALL As Integer, ByRef D_ALL As Integer) Dim i As Integer For i = 0 To 4 C_ALL(i) += i D_ALL(i) += i i += 1 Next End Sub

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

> Data_Set(C_ALL(), D_ALL()) ... > Private Sub Data_set(ByRef C_ALL As Integer, ByRef D_ALL As Integer) 呼び出し時の引数には()を付けず、サブルーチンの引数定義では()を付ければよかったかと。 #つまり逆って事ですね

noname#127172
noname#127172
回答No.1

実行したい処理内容がイマイチわかりませんが 単に配列に値を入れて戻して表示するだけなら こんな感じですかね? デバックはしてません。 Private Sub Print() Dim C_ALL(3) As Integer Dim D_ALL(3) As Integer Dim i As Integer Data_Set(C_ALL(), D_ALL()) For i = Lbound(C_ALL) To Ubound(C_ALL) MsgBox C_ALL(i) Next End Sub Private Sub Data_set(ByRef C_ALL() As Integer, ByRef D_ALL() As Integer) Dim i As Integer For i = 0 To 3 C_ALL(i) = C_ALL(i) + 1 D_ALL(i) = D_ALL(i) + 1 i = i + 1 Next End Sub

hibarichan
質問者

お礼

nish0707さま、さっそく回答ありがとうございます。

hibarichan
質問者

補足

いまでバックしてみたのですが、5行目のC_ALL()と D_ALL()で、下記のエラーになってしまいます。 「インデックスの数がインデックス付き配列の次元より少ない値です。」 えっと、本来はSQLでデータを取りに行って、レコードを配列で合計して、印刷処理に渡すことを目的にしています。

関連するQ&A

  • 配列を関数に渡す方法

    VB6.0のプログラムで質問があるのですが 下のプログラムのように配列num、num1を関数AAAに 渡したいと思うのですがどうすればいいのでしょうか? よろしくお願いいたします。 Option Explicit Private num(10) As Integer Private num1(10) As Integer Private Sub Write_Click()    AAA(num)    AAA(num1) End Sub Private Function AAA(???)    Dim i As Integer    For i = 1 To 10       ???(i) = i    Next i End Function

  • 配列

    エクセルvbaなのですが Sub test() ' 配列 Dim arr() As Integer= {0, 1, 2, 3, 4, 5} ' 抜き出した要素を格納するための変数 Dim i As Integer ' すべての要素について繰り返す For Each i In arr Console.WriteLine (i) Next End Sub これって何でエラーになるのでしょう? Dim arr() As Integer= {0, 1, 2, 3, 4, 5} でエラーになりますが、なぜだかわかりません。

  • 配列と互換性のない型の要素にアクセスしようとしまし

    以下のソースでサブルーチン呼び出し行で例外「配列と互換性のない型の要素にアクセスしようとしました」が出ます。 -------------------------------------------------------------------------- Private Sub メインルーチン()  Dim Rows() As Data.DataRow = MyDataSet.Tables(MyTableName).Select("条件") if Rows.Count <> 0 then サブルーチン (Rows(0)) end if End Sub Private Sub サブルーチン(ByRef Row As Data.DataRow) '処理 End Sub ---------------------------------------------------------------------------- サブルーチンを呼び出す前に以下のようにするとエラーはでません。 Dim Row as Data.DataRow = Rows(0) サブルーチン (Row) これはなぜなのでしょうか?RowはData.DataRow型であり、配列の要素Rows(0)もData.DataRow型でありエラーが出る意味が分からないのですが。

  • VB6.0の参照渡し

    VC++6.0で作成したDLLへVBの配列を渡そうと思っています。 いくつかためしたのですが、 「配列引数は ByRef でなければなりません。」 というエラーがでてしまいます。 標準モジュール内の記述 Declare Function fncTest Lib "Test.dll" (ByRef test() As Long) As Long フォーム内 Private Sub Test_Click() dim test() as Long dim i as integer for i = 0 to 3 test(i) = i next i fncTest(Test()) End Sub とりあえず、こんな形でかいてみましたが、 Sub内のtest()の宣言方法、使用法等ご指導お願いします。

  • クラスに配列を渡す方法

    こんにちは、VB.NET初心者です。 メインプログラムからクラスに配列を渡したいのですが、どうやって渡せばいいのかわかりません。 一応、いろいろなサイトやMSDNを覗いたのですが、よく分かりませんでした。 よろしければ、教えてください。環境はVB2005です。 下記のは現在書いているソースなのですが、この場合エラーがでます。 メインプログラム Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click  Dim abc() as integer  ’配列に何かを入れる処理を記述  ’何個の要素が入るかはわかりません。通るときによって変わります。  Dim 123 As New clsAAA  123.ABC = abc  123.処理1() End Sub clsAAA Private pABC() As Integer Public Property ABC() As Integer  Get   Return pABC  End Get   Set(ByVal value As Integer)   pABC = value  End Set End Property

  • VBAのUserFormでサブルーチンを用いる

    UserFormのコードに次のように書いてbuttomを押してみると コンパイルエラー:ByRef引数の型が一致しません。 と出てしまいます。 どこが間違っているのでしょうか?ご回答お願いします。 Private Sub buttom_Click() Dim i As Integer Dim name As String i = 1 name = "名前" Call test(i , name) End Sub ---------------------------------------------- Sub test(i As Integer, name As String) Cells(i , 1) = name End Sub

  • VB6で配列を引数にするときの2通りの方法について

    VB6で引数に配列を渡す方法が2通りあるよう?ですが以下のような配列があり、渡し方によって引数の定義の仕方が異なると思うのですが、(2)番目の関数の書き方が知りたいです。 dim ary_dat(10) as integer (1)test_A( ary_dat ) は、sub test_A( byref ary() as integer)という関数を作れば動作することはわかりましたが、 (2)test_B( ary_dat(0) ) は、関すでどのような引数を定義すればできるのでしょうか?

  • C++で作成したDLLにVBAから配列渡し

    VC++初心者です。よろしくお願いします。 VC++2008ExpressでWindowsアプリケーションのDLLを作成してみました。 Excel2007VBAにて、そのDLLを呼び出して関数を使用したいのですが VBAの配列を参照渡しで渡すと、配列のデータをうまく渡せません。 コードは以下の通りです。 配列ではないデータはうまくいきますが。。。 配列の場合はもっと他に必要なことがあるのでしょうか? よろしくお願いします。 //VC++ DLLコード #include <windows.h> int APIENTRY Add(int[] a) {    return a[0] + a[1] ; } '''VBAのコード Private Declare Function Add Lib "TEST_DLL.dll" (ByRef a() As Integer) As Integer Dim a(1) As Integer Sub test() a(0) = 1 a(1) = 2 MsgBox (Add(a)) End Sub メッセージボックスには3が表示されるはずですが 変な数字に化けてしまいます。 どなたか、ご存知の方、よろしくお願いします。

  • VB6コントロール配列をパラメータとして渡す方法

    フォーム上にcmdStartというコマンドボタンが3個あります。それをクリックすると使用不可になるというプロシージャーですが、(1)のイベントに対して、(2)で処理する場合、下のようにやると、型がちがうといってエラーになります。 この場合、コントロールの配列を次のモジュールに渡すにはどのように書いたらいいのでしょうか? (1) Private Sub cmdStart_Click(Index As Integer) processGet cmdStart() End Sub (2) Public Sub processGet(pcmdStart() As Control) Dim i As Integer For i = 0 to 2 pcmdStart(i).Enabled=False Next i End Sub

  • プロパティの引数(バイト配列)でエラー

    いつもお世話になっています。 実際に使用することがないようなロジックですが,下記のソースを実行するとVBが落ちてしまいます。原因がわからないので皆さんのお力をお借りしようと思い投稿させていただきました。 よろしくお願いします。 ■開発環境■ OS:Windows XP + SP2 言語:Visual Basic 6.0 + SP5 =============== Form1 =============== Option Explicit Private Property Let Array1(ByRef bytArray() As Byte) Array2 = bytArray End Property Private Property Let Array2(ByRef bytArray() As Byte) '(省略) End Property Private Sub Command1_Click() Dim bytArray() As Byte ReDim bytArray(2) bytArray(0) = 1 bytArray(1) = 1 bytArray(2) = 1 Array1 = bytArray End Sub

専門家に質問してみよう