投稿者 るきお  (社会人) 投稿日時 2011/3/1 13:22:13
こんにちは。

プログラム側でやりたいことが見えないのですが、すべてVBAで処理するわけにはいかず、.NETの力が必要ということでしょうか?
※VBと書いてあるのはVB6ではなく、VB.NETですよね?バージョンはいくつを想定しているでしょうか?
もし、VBAだけで済むのであればVBAが一番シンプルな解決方法と思います。

>1.VBAでExcelからcsv出力し、VBのexeを実行させcsv読込・結果をcsv出力、それを再度VBAで読み>込む。
>-Formアプリケーションに対して使いにくい?
Formアプリというのが何を指しているのかよくわかりません。
csvを中間ファイルとして使用するため汎用性はあり、個々のプログラムはシンプルにできるのではないかと思います。(その代りちょっと面倒ですね。)

VSTOは経験がないので割愛します。
バージョンは限られますが2003向けのVSTOはあったと思います。

>3.Microsoft.Office.Interop.ExcelでExcelを開いて操作する
>-Excelを開いているとき閉じているとき、対象ブックを開いているときも閉じているときも、適切に動作できるか?
できます。

>-Excelのプロセスが残るらしい?
適切に処理しないと残ります。

>4.VBでDLLを作成してVBAから使用する
>-レジストリ登録が必要、使用可能になるまでに結構な準備が必要
レジストリ登録は必要ですが、コマンド1つでできます。(regsvr32 or regasm)

>-DLLのクラスの引数としてList(Of String)のようなものは渡せるか?
よく状況がわからないです。
DLLを呼び出すもの → DLL
という構造と思います。今回は「DLLを呼び出すもの」 = Excel VBAなんですよね?
Excel VBAにはそもそもList(Of String)はないので、DLLにList(Of String)を渡すということはありえないと思います。


質問の雰囲気から私が勝手に現場のイメージを想像すると、以下の順でお勧めです。
1.VBAだけでつくる。
2.VBAでExcelからcsv出力し、…
3.Microsoft.Office.Interop.ExcelでExcelを開いて操作する
4.VBでDLLを作成してVBAから使用する
5.VSTO

この順位はプログラムのシンプルさと情報量の多さを重視しました。
どれもよく知っている人なら「VBでDLLを作成してVBAから使用する」を選ぶ状況かなと思います。
※あくまで、私が勝手に状況を想像して言っています。