Main Content

クラス MWUtil

MWUtil クラスには、配列処理とアプリケーションの初期化で使用される一連の静的ユーティリティ メソッドが含まれています。このクラスはシングルトン (Microsoft® Excel® のインスタンスごとに、このクラスの唯一のグローバル インスタンス) として内部実装されます。この型の変数を、使用される各モジュール内のグローバル スコープで 1 つ宣言するのが最も効率的です。MWUtil のメソッドを以下に示します。

関数プロトタイプは Visual Basic® 構文を使用します。

Sub MWInitApplication(pApp As Object)

Microsoft Excel の現在のインスタンスでライブラリを初期化します。

パラメーター

引数説明

pApp

Object

現在の Excel アプリケーションへの有効な参照

戻り値

なし。

注意

この関数は、MATLAB® Compiler™ によって作成された COM コンポーネントを使用する Excel の各セッションで 1 回呼び出されなければなりません。MATLAB Compiler SDK™ の任意の COM コンポーネントのメンバー クラスに対してメソッド呼び出しが行われ、ライブラリが初期化されていない場合、エラーが生成されます。

この Visual Basic サンプルは MWComUtil ライブラリを Excel の現在のインスタンスで初期化します。Object 型の MCLUtil という名前のグローバル変数は、MWUtil クラスのインスタンスを保持し、Boolean 型の bModuleInitialized という名前の別のグローバル変数は、初期化プロセスの状態を格納します。プライベート サブルーチン InitModule()MWComUtil クラスのインスタンスを作成し、MWInitApplication メソッドを引数 Application で呼び出します。この関数が正常に完了すると、それ以降のすべての呼び出しはオブジェクトを再作成せずに終了します。

Dim MCLUtil As Object
Dim bModuleInitialized As Boolean

Private Sub InitModule()
    If Not bModuleInitialized Then
        On Error GoTo Handle_Error
        If MCLUtil Is Nothing Then
            Set MCLUtil = CreateObject("MWComUtil.MWUtil")
        End If
        Call MCLUtil.MWInitApplication(Application)
        bModuleInitialized = True
        Exit Sub
Handle_Error:
        bModuleInitialized = False
    End If
End Sub

メモ

複数のバージョンの MATLAB と MWComUtil.dll で同時に開発している場合、たとえば、次の構文を使用すると、アップグレードのたびに COM モジュールを再コンパイルする必要があります。

Set MCLUtil = CreateObject("MWComUtil.MWUtil")
これを回避するには、MWUtil モジュールの呼び出しをバージョン固有にします。ここで、x.x は固有のバージョン番号です。
Set MCLUtil = CreateObject("MWComUtil.MWUtilx.x")

Sub MWInitApplicationWithMCROptions(pApp As Object, [mcrOptionList])

MATLAB Runtime のオプションを指定して MATLAB Runtime を起動します。mclInitializeApplication (MATLAB Compiler SDK)と同様です。

パラメーター

引数説明

pApp

Object

Excel アプリケーションから呼び出されるときのみ有効な参照

非 Excel COM クライアントは Empty を渡します。

戻り値

なし。

注意

この関数を呼び出して MATLAB Runtime のオプション (nojvmlogfile など) を渡します。この関数をプロセスごとに 1 回呼び出します。

この Visual Basic サンプルは MWComUtil ライブラリを Excel の現在のインスタンスで初期化します。Object 型の MCLUtil という名前のグローバル変数は、MWUtil クラスのインスタンスを保持し、Boolean 型の bModuleInitialized という名前の別のグローバル変数は、初期化プロセスの状態を格納します。プライベート サブルーチン InitModule()MWComUtil クラスのインスタンスを作成し、引数 Application とオプションを含む文字列配列で MWInitApplicationWithMCROptions メソッドを呼び出します。この関数が正常に完了すると、それ以降のすべての呼び出しはオブジェクトを再作成せずに終了します。この関数が正常に実行されると、MATLAB Runtime は JVM™ なしで logfile.txt という名前のログファイルと共に起動します。

Dim MCLUtil As Object
Dim bModuleInitialized As Boolean

Private Sub InitModule()
    If Not bModuleInitialized Then
        On Error GoTo Handle_Error
        If MCLUtil Is Nothing Then
            Set MCLUtil = CreateObject("MWComUtil.MWUtil")
        End If
			 Dim mcrOptions(1 To 3) as String
			 mcrOptions(1) = "-nojvm"
			 mcrOptions(2) = "-logfile"
			 mcrOptions(3) = "logfile.txt"
        Call MCLUtil.MWInitApplicationWithMCROptions(Application, mcrOptions)
        bModuleInitialized = True
        Exit Sub
Handle_Error:
        bModuleInitialized = False
    End If
End Sub

メモ

Excel を使用しない場合は、MWInitApplicationWithMCROptionsApplication ではなく Nothing を渡します。

Function IsMCRJVMEnabled() As Boolean

MATLAB Runtime が JVM と共に起動している場合は true を返し、そうでない場合は false を返します。

パラメーター

なし。

戻り値

Boolean

Function IsMCRInitialized() As Boolean

MATLAB Runtime が初期化されている場合は true を返し、そうでない場合は false を返します。

パラメーター

なし。

戻り値

Boolean

Sub MWPack(pVarArg, [Var0], [Var1], ... ,[Var31])

Variant 引数の可変長リストを単一の Variant 配列にパックします。この関数は一般的に個別の入力のリストから varargin セルを作成するために使用されます。リスト内の各入力は、空ではない場合、または不足していない場合にのみ配列に追加されます。(Visual Basic では、不足しているパラメーターは Variant 型で値が &H80020004vbError として表されます)。

パラメーター

引数説明

pVarArg

Variant

結果の配列を受け取ります。

[Var0], [Var1], ...

Variant

配列にパックする Variant のリスト (オプション)。0 から 32 個までの引数を渡すことができます。

戻り値

なし。

注意

この関数はリストを処理する前に必ず pVarArg の内容を解放します。

この例では、数式関数で MWPack を使用して varargin セルを作成し、次のシグネチャをもつ MATLAB 関数からコンパイルされたメソッドに入力パラメーターとして渡します。

function y = mysum(varargin)
    y = sum([varargin{:}]);

この関数は varargin 内の要素の合計を返します。この関数がバージョン 1.0 の mycomponent という名前のコンポーネントに含まれている myclass という名前のクラスのメソッドであるとします。Visual Basic 関数は最大 10 個の入力を許可し、結果 y を返します。エラーが発生すると、関数はエラー メッセージを返します。この関数は MWInitApplication が以前に呼び出されていることを前提としています。

Function mysum(Optional V0 As Variant, _
               Optional V1 As Variant, _
               Optional V2 As Variant, _
               Optional V3 As Variant, _
               Optional V4 As Variant, _
               Optional V5 As Variant, _
               Optional V6 As Variant, _
               Optional V7 As Variant, _
               Optional V8 As Variant, _
               Optional V9 As Variant) As Variant
Dim y As Variant
Dim varargin As Variant
Dim aClass As Object
Dim aUtil As Object
    
    On Error Goto Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Call aUtil.MWPack(varargin,V0,V1,V2,V3,V4,V5,V6,V7,V8,V9)
    Call aClass.mysum(1, y, varargin)
    mysum = y
    Exit Function
Handle_Error:
    mysum = Err.Description
End Function

Sub MWUnpack(VarArg, [nStartAt As Long], [bAutoResize As Boolean = False], [pVar0], [pVar1], ..., [pVar31])

Variant の配列を個々の Variant 引数にアンパックします。この関数は MWPack の逆の機能を提供し、通常 varargout セルを処理して個々の Variant にするために使用されます。

パラメーター

引数説明

VarArg

Variant

処理する Variant の入力配列

nStartAt

Long

処理を開始する配列の開始インデックス (0 ベース) (オプション)。既定値 = 0

bAutoResize

Boolean

オプションの自動サイズ変更フラグ。このフラグが True の場合、任意の Excel 範囲の出力引数は、コピー対象となる Variant の次元に合うようにサイズ変更されます。サイズ変更処理は、指定された範囲の左上隅を基準にして適用されます。既定値 = False

[pVar0],[pVar1], ...

Variant

VarArg に含まれる配列項目を受け取る Variant のリスト (オプション)。0 から 32 個までの引数を渡すことができます。

戻り値

なし。

注意

この関数は、nStartAt パラメーターを使用して、単一の呼び出しで、あるいは複数の呼び出しを通じて Variant 配列を処理できます。

この例では MWUnpack を使用して、各範囲を自動でサイズ変更しながら、varargout セルを処理していくつかの Excel 範囲にしています。varargout パラメーターは MATLAB 関数からコンパイルされたメソッドから提供されます。

function varargout = randvectors
    for i=1:nargout
        varargout{i} = rand(i,1);
    end

この関数は i 番目のベクトルの長さが i に等しい一連の nargout 乱数列ベクトルを作成します。この関数が含まれている myclass という名前のクラスは、バージョンが 1.0 で mycomponent という名前のコンポーネントに含まれているとします。Visual Basic サブルーチンは引数を取らず、結果を Excel の A1、B1、C1 および D1 から始まる列に配置します。エラーが発生すると、メッセージ ボックスにエラー テキストが表示されます。この関数は MWInitApplication が以前に呼び出されていることを前提としています。

Sub GenVectors()
    Dim aClass As Object
    Dim aUtil As Object
    Dim v As Variant
    Dim R1 As Range
    Dim R2 As Range
    Dim R3 As Range
    Dim R4 As Range
    
    On Error GoTo Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Set R1 = Range("A1")
    Set R2 = Range("B1")
    Set R3 = Range("C1")
    Set R4 = Range("D1")
    Call aClass.randvectors(4, v)
    Call aUtil.MWUnpack(v,0,True,R1,R2,R3,R4)
    Exit Sub
Handle_Error:
    MsgBox (Err.Description)
End Sub

Sub MWDate2VariantDate(pVar)

MATLAB からの出力日付を Variant 日付に変換します。

パラメーター

引数説明

pVar

Variant

変換する Variant

戻り値

なし。

注意

MATLAB は、0/0/00 00:00:00 を 0.0 で表現する倍精度浮動小数点数として日付を扱います。既定では、コンパイルされた MATLAB 関数からの出力パラメーターである数値の日付は、COM 日付バイアスによるデクリメントと COM 日付への型強制の必要がある Double として渡されます。MWDate2VariantDate メソッドはこの変換を実行し、さらに、文字ベクトル形式の日付を COM 日付型に変換します。

この例では MWDate2VariantDate を使用して次の MATLAB 関数からコンパイルされるメソッドが返す数値の日付を処理します。

function x = getdates(n, inc)
    y = now;
    for i=1:n
        x(i,1) = y + (i-1)*inc;
    end

この関数は長さ n で現在の日付と時刻で始まる日付を表す数値の列ベクトルを作成します。各要素は inc 日ずつインクリメントされています。この関数が含まれている myclass という名前のクラスは、バージョンが 1.0 で mycomponent という名前のコンポーネントに含まれているとします。サブルーチンは Excel 範囲と Double を入力として取り、生成された日付を指定された範囲に配置します。エラーが発生すると、メッセージ ボックスにエラー テキストが表示されます。この関数は MWInitApplication が以前に呼び出されていることを前提としています。

Sub GenDates(R As Range, inc As Double)
    Dim aClass As Object
    Dim aUtil As Object
    
    On Error GoTo Handle_Error
    Set aClass = CreateObject("mycomponent.myclass.1_0")
    Set aUtil = CreateObject("MWComUtil.MWUtil")
    Call aClass.getdates(1, R, R.Rows.Count, inc)
    Call aUtil.MWDate2VariantDate(R)
    Exit Sub
Handle_Error:
    MsgBox (Err.Description)
End Sub