作成した Excel アドインを使用すると Excel がクラッシュしたり、​メモリ不足になったり​するのはなぜですか?

19 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2017 年 1 月 17 日
回答済み: MathWorks Support Team 2017 年 1 月 17 日
32-bit 版 MATLAB Compiler を使用して .m ファイルから Excel アドインを作成しました。.m ファイルは問題なく動作しますが、アドインを使用すると Excel 上でメモリ不足のエラーとなったり、Excel そのものが突然終了したりします。
 

採用された回答

MathWorks Support Team
MathWorks Support Team 2017 年 1 月 17 日
一般的に Excel アドインはインプロセスまたはアウトオフプロセスで動作可能です。
アドインがインプロセスで動作する場合は、アドインを使用するExcelと仮想メモリを共有する必要があります。一方、アドインがアウトオブプロセスで動作する場合は、Excelとアドインのそれぞれで仮想メモリ領域を確保します。
ほとんどのバージョンの Excel のように、/LARGEADDRESSAWARE を使用しない32-bit アプリケーションのために、メモリスペースは2GBに制限されています。したがってインプロセスのアドインが動作する際、特に扱うデータのサイズが大きいアドインを使用する場合のメモリ不足によるエラーは一般的な問題です。
R2015a およびそれ以前で作成された Excel アドインはインプロセスのみで動作可能でした。これは 32-bit Excel では 32-bit Excel アドイン(= 32-bit MATLAB Compiler により作成される)のみが動作可能ということです。
しかし、R2015b 以降によるものはアウトオブプロセスでも動作が可能で、これにより 64-bit MATLAB Compiler でも 32-bit Excel で動作可能なアドインを作成することができるようになりました。
 
上記より、32-bit Excel 上でメモリ不足問題となった場合の最適な回避方法は、R2015b 以降の、64-bit MATLAB Compiler を使用して 64-bit Excel アドインを作成することとなります。
すでに 32-bit MATLAB Compiler/ Builder EXを使用、64-bit MATLAB Compiler/ Builder EX は使用しない場合:
32-bit MATLAB Compilerにより作成された Excel アドインは 32-bit Excel にてインプロセスとして動作しますが、MATLAB Compiler により供給される VBA コードの変更によりアウトオブプロセスにすることが出来ます。
 
MWUtilの行を以下のように変更します。
変更前:
Set MCLUtil = CreateObject("MWComUtil.MWUtil9.0")
変更後:
Set MCLUtil = CreateObject("MWComUtil.MWUtil9.0", "localhost")
 
同様に、アドインのロードの部分も変更します。
変更前:
Set Class1 = CreateObject("YourAddin.YourClass.1_0")
変更後:
Set Class1 = CreateObject("YourAddin.YourClass.1_0", "localhost")
 
 
MATLAB Compiler/ Builder EX を R2015b 以降にアップグレードできない場合:
64-bit Excel に変更し、MATLAB Compiler も 64-bit 版を使用します。
 
 
MATLAB Compiler/ Builder EX を 64-bit 版に変更出来ない場合:
前述のように 32-bit Excel は 2GB までのメモリとなります。この制限は 32-bit Windows システムでは 3GB まで、64-bit Windows システムでは 4GB まで拡張することが出来ます。このためには以下のようにします。
 
  1. Excel が起動していないことを確認します。
  2. 管理者権限を使用して Visual Studio コマンドウィンドウを開きます。
  3. 以下のコマンドを実行します
         cd <location of EXCEL.exe>
         editbin /LARGEADDRESSAWARE EXCEL.exe
 
 
<location of EXCEL.exe> はバージョンにもよりますが、一般的には "C:\Program Files (x86)\Microsoft Office\Office15" にあります。
 
32-bit Windows の場合は 3GB まで拡張されます。詳細は以下を参照ください。
https://technet.microsoft.com/en-us/library/bb124810(v=exchg.65).aspx
 
 
以上のいずれも出来ない場合:
MATLAB のプログラムが JVM を使用しない場合(グラフィックを表示しない場合やデータベース、ハードウェアへの接続が無い場合など)、JVM を使用しない方法もあります。JVMを使用する場合は多くのスレッドを起動し、メモリを消費します。このためには、Excel の「開発」タブ内で「Visual Basic」ボタンによりエディタを起動し、MATLAB Compiler によるアドインに関連付けられた VB コードの最初の行を以下のように編集します。
 
変更前:
Call MCLUtil.MWInitApplication(Application)
 
変更後:
Dim mcrOptions(1 To 1) as String
mcrOptions(1) = "-nojvm"
Call MCLUtil.MWInitApplicationWithMCROptions(Application, mcrOptions)
 
 
 

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeExcel アドイン についてさらに検索

製品


リリース

リリースが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!