Main Content

複数の MATLAB 関数を使用するマクロの作成

この例では、可変長入力と可変長出力をもつ関数を含むマクロの作成方法を説明します。

始める前に、MATLAB® Compiler™ Excel® ターゲットの要件がすべて満たされていることを確認します。詳細については、MATLAB Compiler での Excel ターゲットの要件と制限を参照してください。

MATLAB でのアドインの作成

  1. MATLAB に付属している例のフォルダー xlmulti を作業フォルダーにコピーします。

    copyfile(fullfile(matlabroot,'toolbox','matlabxl','examples','xlmulti'),'xlmulti')

    MATLAB コマンド プロンプトで、作業フォルダー内の xlmulti フォルダーに移動します。

  2. 関数 myplotmyprimes、および mysum を確認します。

    myplot は単一の整数入力を取り、1 からその数までのラインをプロットします。

    function myplot(x)
    plot(1:x)

    myprimes は単一の整数入力 n を取り、n 以下のすべての素数を返します。

    function p = primes(n)
    if length(n)~=1, error('N must be a scalar'); end
    if n < 2, p = zeros(1,0); return, end
    p = 1:2:n;
    q = length(p);
    p(1) = 2;
    for k = 3:2:sqrt(n)
      if p((k+1)/2)
         p(((k*k+1)/2):k:q) = 0;
      end
    end
    p = p(p>0);

    mysuminteger 型の varargin の入力を取り、すべての数を合計し、結果を返します。

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

  3. 次の情報を使用して、ライブラリ コンパイラ アプリまたは compiler.build.excelAddIn によって Excel アドインをビルドします。

    フィールド
    ライブラリ名xlmulti
    クラス名xlmulticlass
    コンパイル対象ファイルmyplot.m
    myprimes.m
    mysum.m

    たとえば、compiler.build.excelAddIn を使用している場合は、以下を入力します。

    buildResults = compiler.build.excelAddIn(["myplot.m","myprimes.m","mysum.m"], ...
        'AddInName','xlmulti', ...
        'ClassName','xlmulticlass', ...
        'GenerateVisualBasicFile','on');

    詳細については、MATLAB からの Excel アドインの作成の手順を参照してください。

Function Wizard を使用した Excel マクロの作成

システムで Microsoft® Excel を起動し、新規スプレッドシートを作成します。

MATLAB Compiler に付属の Function Wizard アドインをインストールして、起動します (まだ行っていない場合)。手順については、Function Wizard のインストールを参照してください。

関数 myplot の追加

  1. [Function Wizard Control Panel] の [Setup Functions] エリアで [Add Function] をクリックします。[MATLAB Components] ダイアログ ボックスが開きます。

  2. [MATLAB Components] ダイアログ ボックスの [Available Components] エリアで、ドロップダウン ボックスから [xlmulti 1.0] を選択します。

  3. [Functions for Class xlmagic] というラベルが付いたボックスから関数 [myplot] を選択します。

  4. [Add] をクリックします。[Function Properties] ダイアログ ボックスが開きます。

  5. [Input] タブで、[Set Input Data] をクリックします。[Input Data for x] ダイアログ ボックスが開きます。

  6. [Value] を選択して値 4 を入力します。[OK] をクリックします。

  7. [Done] をクリックします。この時点でマクロを実行すると、関数 myplot は MATLAB Figure ウィンドウで 1 から 4 までラインをプロットします。このグラフィックスは MATLAB 内で Figure を操作する方法と同様に操作できます。ライン スタイルまたは色の変更など、一部の機能は使用できません。

関数 mysum の追加

  1. セル A1 に「1」を入力します。

  2. セル B1:J1 を選択します。式「= A1 + 1」を入力してから CTRL+Enter キーを押して、選択したセルに式を適用します。

    この手順により、範囲 B1:J1 は 1 から 10 の区間が 1 ずつインクリメントして埋められます。

  3. [Function Wizard Control Panel] の [Add Function] をクリックして、[xlmulti 1.0] コンポーネントから関数 [mysum] を追加します。

  4. [Input] タブで、[Add][Set Input Data] を順にクリックします。[Input Data for varargin[1]] ダイアログ ボックスが開きます。

  5. [Range] フィールドの端にあるボタンをクリックして、ワークシートのセル範囲 A1:J1 を選択します。テキスト ボックスに範囲 Sheet1!$A$1:$J$1 が入力されます。

  6. 入力セルが変化した場合に Excel が合計を動的に更新できるように、[Auto recalculate on change] を選択します。

  7. [OK] をクリックします。[Select Input Ranges/Values] エリアに入力引数 varargin[1] = Sheet1!$A$1:$J$1 が追加されます。

    オプションで、入力引数として追加のセル範囲または値を追加できます。セル範囲が同じサイズである必要はなく、選択したセルに値は必要ではありません。

  8. [Output] タブの [Set Output Data] をクリックして、[Range] フィールドからセル A2 を選択します。

  9. [Done] をクリックします。指定した入力引数および出力引数と共に、関数 mysum が [Active Functions] リストに追加されます。

  10. マクロを実行すると、セル A2 に合計値 55 が表示されます。入力範囲内のセルを変更すると、自動的に出力セルが更新されます。

関数 myprimes の追加

  1. セル A4 に「10」を入力します。

  2. [Function Wizard Control Panel] の [Add Function] をクリックして、[xlmulti 1.0] コンポーネントから関数 [myprimes] を追加します。

  3. [Input] タブの [Set Input Data] をクリックして、[Range] フィールドからセル A4 を選択します。

  4. 入力セルが変化した場合に Excel が動的に更新できるように、[Auto recalculate on change] を選択します。

  5. [OK] をクリックします。[Select Input Ranges/Values] エリアに入力引数 n = Sheet1!$A$4 が追加されます。

  6. [Output] タブの [Set Output Data] をクリックして、[Range] フィールドからセル B4 を選択します。

    出力で近傍セルを埋めることができるように、必ず [Auto Resize] をオンにします。

  7. [Done] をクリックします。関数 myprimes が [Active Functions] リストに追加されます。

  8. マクロを実行すると、A4 の値より小さいすべての素数が行 4 のセルに表示されます。このセルを変更すると、自動的に出力が更新されます。

マクロの作成と実行

  1. [Create Macros] エリアの [Macro Name] フィールドにマクロの名前を入力します。

  2. [Store Macro In] フィールドのドロップダウン メニューを使用して、マクロの保存場所を選択します。

  3. (オプション) マクロの説明を追加します。

  4. [Create Macro] をクリックして、選択したワークブックにマクロを保存します。

    Function Wizard により、指定した引数と共に関数を呼び出す VBA コードが生成されます。

  5. マクロを実行するには、Excel のメイン ウィンドウで "Alt" + "F8" キーを押すか、[開発] タブの [マクロ] を選択して、[マクロ] ダイアログ ボックスを開きます。

(オプション) Microsoft Visual Basic コードの検査

  1. [開発] タブで [Visual Basic] をクリックするか、ALT + F11 キーを押して [Visual Basic エディター] を開きます。古いバージョンの Excel では、これは [ツール][マクロ][Visual Basic エディター] にある可能性があります。

  2. [プロジェクト - VBAProject] ウィンドウで、VBAProject (Book1) をダブルクリックして展開します。

  3. Modules フォルダーを展開し、matlabMacros モジュールをダブルクリックします。これにより、このプロジェクトのコードを表示した VB コード ウィンドウが開きます。このコードを使用して、独自のカスタム VBA マクロを開発できます。

その他の例について

matlabroot\toolbox\matlabxl\examples\xlmulti にある Microsoft Excel スプレッドシート xlmulti.xls では、いくつかの方法でこれらの関数が実際に示されています。

この例ではカスタム関数構文を使用して、関数 myplotmysum がワークシート内で直接呼び出されます。マクロ "myprimes" が関数 myprimes を実行し、動的に出力のサイズを変更します。

参考

| (MATLAB Compiler SDK) |

関連するトピック