• 締切済み

エクセルVBAでサブルーチンへの変数の配列渡し

エクセルVBAで、メインで使用してる配列変数(の値)をサブルーチンに渡したいが、どうすればよいでしょうか。(なお、メインプログラムは大きいためこれ以上は書けないのでサブルーチンを使用) よろしくお願いいたします。

みんなの回答

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

#1さんのやり方が王道だ、ということを十分承知の上で。 「メインのプログラムで、RANGE()= でワークシートに書き出して、 サブで必要な部分のデータを =RANGE() として取り出す」 せっかくワークシートに直接アクセス出来るんですから、有効に 使わない手はないです。Excel-VBAは、ワークシートにデータ を書き出し、ワークシート関数で処理させると速くて簡単、って ことが結構ありますよ。

  • cma3atgoo
  • ベストアンサー率35% (32/90)
回答No.1

メインルーチン Sub Main()  Dim aa(??) As String  Call arraysub(aa) End Sub サブルーチン Sub arraysub(ByRef ary() As String)  処理  中身の書き換えもできる End Sub

関連するQ&A

  • エクセルのVBAでオブジェクトの配列変数は使えますか?

    VBですとオブジェクトの配列変数というか、コピーしたときに自動的に配列になってしまいますが、エクセルのVBAの場合でオブジェクトの配列変数は使えますか? なにをしたいかというと、ボタンが多すぎて一つ一つにプログラム定義は面倒、そこで配列にしてまわすことにしたいのですが、エクセルで可能でしょうか。 どなたかお願いします。

  • 【Perl】サブルーチンから多次元配列を戻したい

    【Perl】サブルーチンから多次元配列を戻したい サブルーチン内で作った2次元配列と1つの変数(例:@listと$i)をリターンしたいのですが、どのようにすれば良いでしょうか? ↓サブルーチン(calc) return (@list, $i); ↓メイン my $a = 12; my (@list, $i) = &calc($a); 間違っていると思いますが、現時点でのプログラムを一部書きました。 ご回答よろしくお願いします!

    • ベストアンサー
    • Perl
  • 配列をグローバル変数にとってやりたい

     今晩は、Cの初心者です宜しくお願いします。  今、ポインターを使わないでグローバル変数でサブルーチンから配列が使えるのかの勉強をしているのですが、 Cでは、配列をグローバル変数にとってやることは出来ないのでしょうか。  どうも正常にプログラムが実行出来ないのですが。  宜しくお願いします。

  • エクセルマクロのサブルーチン引数で配列を使用したい

    VBA初心者です。 エクセルのマクロを組んでいるですが、サブルーチンの引数を配列にしたいのですが、どうすればよろしいでしょうか? 下記に例を示します。 呼び出し(Call)とサブルーチンの配列変数の記載方法がわかりません。 特に気になるのは、サブルーチンの配列に配列数(下記であれば10)を記入する必要があるのか? 必要な場合、元の配列数を変更した場合、どうすればミスなく、漏れなく修正できるか、良い方法はありまんせんか? (例) (呼び出し側) Dim AA(10) As Integer Call Test(AA)     ← 引数はAAでよい?それともAA() Sub Test(ByRef AA As Integer) ← AA or AA() or AA(10) ? AA(3) = AA(2) + AA(1) 以上、お手数をおかけしますが、よろしくお願いします。

  • 配列サイズを明示せずサブルーチンに渡す方法

    プログラムのメインの方で2次元、3次元の高次元配列を設定してそれをサブルーチンに引き渡すことを考えています(しょっちゅうやっていることですが)。 この場合、サブルーチン側に汎用性を持たせるためにできるだけ配列のサイズを自動で渡すようにしたいと思っています(メインが変わるとそれに応じて自動対応)。そうしないとサブルーチンが汎用化せず、ケースバイケース(メイン側の配列のサイズが変わる場合それに応じてコードを書き変えなければならない)に応じなければならず、うっかりミスの間違いもおこりそうです。 配列のサイズを決めないサブルーチンの書き方を教えて頂きたいのですが。 なお、今回は配列はデータとして参照するだけで書き換えることはありません。 言語ですが、”サブルーチン”というだけあってFortranです。(Cのカテゴリだと答えを頂けるかなと思っているのですが。他に適当なところも無いようですが)

  • エクセルVBAでの変数のスコープ

    基本的なことなのですが、教えて下さい。 当方、PHPやjavascriptを中心にプログラムしてきたのですが、 今回、エクセル+VBAでプログラムすることになり、VBAを勉強しているところなのですが、ちょっと戸惑っています。 いままでは、グローバル変数をなるべく使わないように、プログラミングをしてきたのですが、 VBAの勉強で、参考にしている本のコードは、全てグローバル変数を使っています。 そもそも、エクセルのシート・セルがグローバル変数のようなもの(?)なので、変数のスコープにこだわってもあまり意味がないのかな?とも思います。 エクセル+VBAである程度の規模のプログラムを作る際、 変数のスコープはどのように使い分けるのが良いのでしょうか? すみませんが、ご教授の程、よろしくお願いします。

  • エクセルvbaの変数について

    エクセルVBAについて、同じ型の値が複数列あった際に、変数に取り入れる方法として、それぞれ一つずつ別々に変数に入れる場合と、ユーザー定義型変数を定義して入れる場合の二つがあると思いま すが、どちらの方がメモリを使わなくて済むのでしょうか。また、他にも長短があればご教示下さい。

  • VBAの変数をエクセルで表示

    VBAで Dim num as Integer num = 1 のプログラムがあるとします。 このnumの変数をエクセルのセルで表示させたいのですが可能でしょうか? (例) セル(A,1)に変数numの値を表示させたいのですが、 数式バーに =num と入力してもうまく表示されません。 無理なのでしょうか?

  • Excel VBA 配列の分割について

    Excel VBAでコーディングしていますが 行き詰っているのでお助け下さい。 (1)二次元配列に格納されている値の中から 特定の値が格納されている位置をループを使わず 取得したいのですがその方法が分かりません。 <例>  Dim x(2,2) As Valiant   x(0,0) = "あああ"   x(0,1) = "いいい"   x(0,2) = "ううう"   x(1,1) = "えええ"      ・      ・      ・ この配列から"えええ"が格納されている位置をループを使わず 取得する方法を教えてください。 ⇒ 1, 1 (2)二次元配列の指定した列(?)を一次元配列に 格納する方法も重ねて教えてください。 以上、よろしくお願いします。

  • 「配列変数」て何ですか!?

    #include <stdio.h> #include <string.h> int main() { int suuretsu[10]; int *p; for ( p = suuretsu; *p != 0; p++ ){ printf("p=%p *p=%d\n", p, *p); } }  以上のプログラムで!  「配列変数」が”どこ”に当たるのか  ?いまいちピンとこないです!。  参考書にも「配列変数」の解説がありません!  ググッたら・違ったプログラムでの解説はあり、  なんとなく分かりはしました。   しかし!プログラムが変わるとニュアンスの違いで!  また違った関係があるみたいでいまいち分かりません--    ここでいう、「配列変数」はどこに当たりますか!?  宜しくお願いします。  

専門家に質問してみよう