電子書籍の厳選無料作品が豊富!

お世話になります。

エクセルAのVBAで、配列Aを生成・使用しています。
アクセスBのVBAで、その配列Aの中身を使用したいのですが、
現在は、
 エクセルA:配列Aの中身をテキストに書き出す。
 アクセスB:テキストを取り込む
という形で、受渡をしています。

このようなテキストを介さずに、
直接、配列のコピー(もしくは、エクセルの配列Aをアクセスで直接しよう)
する方法はあるのでしょうか?

何卒宜しくお願いします。

A 回答 (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の配列に取り込まれます。配列をワークシートに書き込むこともできます。
    • good
    • 0

アクセスで配列用のテーブルを作成しておいて、エクセルから配列をアクセス側に書き込んで利用するというのはいかがでしょう。



参照:
ExcelからAccessのテーブルにADOを使って書き込みを実行する
http://infith.com/system/access/excel_access_ado …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/19 11:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!