• ベストアンサー

VBAで生成した配列の受渡

お世話になります。 エクセルAのVBAで、配列Aを生成・使用しています。 アクセスBのVBAで、その配列Aの中身を使用したいのですが、 現在は、  エクセルA:配列Aの中身をテキストに書き出す。  アクセスB:テキストを取り込む という形で、受渡をしています。 このようなテキストを介さずに、 直接、配列のコピー(もしくは、エクセルの配列Aをアクセスで直接しよう) する方法はあるのでしょうか? 何卒宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

VBAのみで実現する方法としては、Application.Runメソッドを使うというのがあります。 引数にも戻り値にも配列が使えます。 Accessは持っていないのでWordとExcelで試してみました。 まずExcelで標準モジュールに以下のプロシージャを書き込んだブックを開きました。 Function MinMax(a) MinMax = Array(WorksheetFunction.Min(a), WorksheetFunction.Max(a)) End Function 次にWordで以下のプロシージャを実行しました。 Sub test1() a = Array(1, 2, 0, 3, 5, 4) Set xl = GetObject(, "excel.application") m = xl.Run("MinMax", a) Debug.Print m(0); m(1) End Sub 実行結果としてWordのVBEのイミディエイトウィンドウに 0 5 と表示されました。 なお、参照渡し(ByRef)による変数書き換えですが、ちょっと検証したところでは、WordからExcelを呼び出すとうまくいくのですがExcelからWordを呼び出したらだめでした。 これがAccessでどうなるかはわかりませんし、そもそもこの検証結果もまだ不十分です。 よって、引数の参照渡しを用いた変数書き換えは行わないのが無難なように思います。 もう1つ考えられる方法としては、Excelのセル範囲と2次元配列を使う方法です。 たとえば、Excelで何かワークシートを表示しておき、他のアプリケーションのVBAで Set xl = GetObject(, "excel.application") a = xl.activesheet.Range("a1:c2").Value とするとセル範囲a1:c2の値が3×2の配列に取り込まれます。配列をワークシートに書き込むこともできます。

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

アクセスで配列用のテーブルを作成しておいて、エクセルから配列をアクセス側に書き込んで利用するというのはいかがでしょう。 参照: ExcelからAccessのテーブルにADOを使って書き込みを実行する http://infith.com/system/access/excel_access_ado_update/

kgyqk433
質問者

お礼

いけました!!!! ありがとうございます!!!

関連するQ&A

  • VBAで配列をまるごとコピー

    VBAで配列をまるごとコピーする方法を教えてください a(256,256) という配列があり、これの中身を b(256,256) にまるごとコピーしたいのですが どのようにするのが手っ取り早いでしょうか?

  • VBAの配列について

    VBAの配列について質問があります。 以下のような配列Aと配列Bがあったとします。 やりたいことは、配列Cを作成して、配列Aと配列Bを結合したいです。 ----------------------------------------- Dim 配列A(3) 配列A(0) = 10 配列A(1) = 11 配列A(2) = 12 Dim 配列B(3) 配列B(0) = 100 配列B(1) = 110 配列B(2) = 120 ---------------------------------------- Dim 配列C(6) 配列A(0) = 10 配列A(1) = 11 配列A(2) = 12 配列A(3) = 100 配列A(4) = 110 配列A(5) = 120 ---------------------------------------- 配列Cを作るために、配列Aを拡張して、配列Bを挿入すれば可能 でありますが、関数のようなもので簡単に表現できないもので しょうか? 何かご存知でしたが、ご教授願います。

  • 2次元配列の値の受け渡しについて教えてください

    お世話になります。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値を渡したいと考えています。 出来ればPOSTで2次元配列を送りたいと考えていますが、そもそもPOSTで2次元配列を送ることはできるのでしょうか? たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? どなたか教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • VBAで配列の計算

    VBAで配列同士の計算をすることはできますか? たとえば、配列A,B,Cがあったときに C=A+Bみたいな記述はできるのでしょうか?

  • Access VBA での配列

    Access VBAで下記のような配列(ジャグ配列?)を作りたいと考えています。 添字[0] = ("0A","0B","0C") 添字[1] = ("1A","1B","1C","1D") VB.NETでは下記のような感じで書けたと思います。 Dim strArray(1) As Object strArray(0) = New String(2) {"0A", "0B", "0C"} strArray(1) = New String(3) {"1A", "1B", "1C", "1D"} 分かりましたら是非教えてください。 お願いします。

  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • VBAで配列のある部分だけをを配列に入れたい

    VBAを勉強をしております。 例えばA1からG20までをある配列に入れているとします。 その配列のある部分(例えばB1からC20)を、別の配列にいれるにはどうすれば良いのでしょうか。 以下の方法で試してみましたが、上手くいきません。 Dim A() As Variant Dim B() As Variant A = Range("A1:G20") B = Range(Cells(A(1,2),Cells(A(20,3)))

  • VBからDLLへ多次元配列を渡す/配列の添え字

    C++で作ったdllにVBAから配列を渡して、計算結果を再びVBAに戻して、アウトプットはVBAで、ということをしています。(経験豊富な方への相談です。) 具体的には、渡したい配列の先頭アドレスをlong型で記憶し、そのlong型の配列を受け渡ししています。 ただ、ご存知の方が多いかもしれませんが、VBAとC++では配列の添え字の順序が逆になっており、非常に面倒です。どういうことかといいますと、 Dim array(0 to 4, 0 to 9) as long をdllに渡し、array(2,6)を参照したい場合、C++では(Cでの配列名をc_arrayとし、これに先頭アドレスを入れると)、 c_array[(4+1)*6 + 2 ]; としなければならないと思います。これをプリプロセッサで #define C_ARRAY(a,b) c_array[(4+1)*b + a] としたらVBでの配列の感覚で扱えますが、この擬似配列C_ARRAY(a,b)を関数に渡すときなどは結局同じ混乱が再び生じることになってしまいます。 これを、何らかの方法で、簡潔に解決することはできないものでしょうか? VBA(エクセルを念頭においています)のほうで配列の添え字の順序をC++のそれに沿うように変更できたりしたら非常にうれしいですが、無理でしょうか?

  • フォームを通さずに2次元配列の値の受け渡しについて教えてください

    お世話になります。 以前にも質問させて頂きましたが、うまくいかずもう1度質問させてください。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値をフォームを通さずにPOSTで渡したいと考えています。 処理上、2次元配列のままB.phpファイルに値を渡したいと考えています。 そもそもPOSTで2次元配列を送ることはできるのでしょうか? その他の方法で2次元配列のままB.phpファイルに渡すことが出来るのであれば、その方法も教えて頂きたいのですが。 たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? ※2次元配列のサイズは可変です。 どなたか教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • エクセルのVBAでオブジェクトの配列変数は使えますか?

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

専門家に質問してみよう