質問: ExcelのVBAをC#で実行しようと考えています。 現状、ExcelからボタンクリックでVBAを実行すると1時間かかる処理が、C#側から「Microsoft.Office.Interop.Excel」を使って `xlApp.Run("Sheet1.Btn_Calc_Click");` で同じマクロを実行すると3時間かかってしまします。 Interop.ExcelでExcel処理を行うと遅いというのは聞きますが、Excel側のマクロ実行にも影響するものでしょうか。 原因や、処理速度の短縮方法がありましたらご教授ください。
回答: これが原因なのかわからないため、的外れな回答かもしれませんが、 `Main`メソッドに対し`[STAThread]`属性は指定されていますでしょうか? 指定されていない場合、スレッドは`マルチスレッドアパートメント`として初期化されます。 マルチスレッドアパートメントからシングルスレッドアパートメントのオブジェクトを操作する場合、マーシャリングが必要となり、それによって処理が遅延しているのかもしれません。 コメントによると既に`STAThread]`を指定していたとのことですが、呼び出し元のC#プログラムはコンソールアプリケーションでしょうか? [シングルスレッドアパートメントの要件としてGUIなどのメッセージループを回す必要があります。 `[STAThread]`を外す、別スレッドで実行するなどの方法でマルチスレッドアパートメントで実行したり、`[STAThread]`を付けシングルスレッドアパートメントのまま何らかの方法でメッセージループを回したりすることで、改善されないでしょうか?