• ベストアンサー

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
質問者

お礼

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