Excel-DNA で XLL をつくる(その3)

 前回まで、.dna ファイルに 自作関数を直接記述して、Excel から利用する方法について試してみたわけですが、今回は自作のライブラリを マネージDLL として作成し、これを Excel から利用する方法をやってみます。
IDE として、VisualStudio2010 を使って説明していきます(フリーの VisualStudio2010 Express でも可)。

 なにを作るかというと、サイトで配布している 多倍長整数演算アドインの XLL 版です ⇒ BigInt ダウンロード

 ダウンロードして解凍したら、BigInt(xll).xls を開いてみてください。計算結果に #NAME? エラーが表示されていると思います。次に、同じフォルダにある BigInt.xll をドラグ&ドロップして、アドインを有効にしてみましょう。
(Excel(x64) の場合は、BigInt.dna を BigInt64.dna とリネームしてください。)
F9 ボタンを押して再計算すると、正しく計算されて結果が表示されるはずです。

では、さっそく作っていきましょう。

 VisualStudio2010(以下VS) を立ち上げ、「ファイル」メニューの「新規作成」から、「プロジェクト」をクリックします。
(こんな感じ↓) 今回は C# で書いていきますが、VB.NET でも同じです。
プロジェクトの新規作成

作るのは、クラスライブラリですので、クラスライブラリテンプレートを選択します。
(※このとき、今回使用する .NetFramework 4 を選択しておいてください。)
(こんな感じ↓) 
クラスライブラリテンプレートを選択

これで、空っぽのプロジェクトが作成されました。
(こんな感じ↓)

 まず、これから作成するライブラリの名前空間(namespace)を設定しなおしましょう。いま、ClassLibrary1 と表示されている部分にカーソルをおいて右クリックし、「リファクター」から「名前の変更」をクリックして名前を BigIntXLL に変更します。同じように、Class1 となっているクラス名を、BigIntCalc に変更します。
どんな名前でもいいのですが、今回はBigInt(XLL).xlsのシートを作成してあるので上記の名前としてください。
(こんな感じ↓)
namespace と Class名 を変更する

 次に、System.Numerics を参照設定します。ソリューションエクスプローラの「参照設定」から「参照の追加」をクリックします。
(こんな感じ↓)
System.Numerics を参照設定する

 .Net タブから System.Numerics を選択します。
(こんな感じ↓)
System.Numerics を選択して追加する

 参照設定したので、using 句を追加します。using System.n と入力すると、Intellisence が働いて、Numerics が一覧に表示されます。
(こんな感じ↓)
using 句 を追加する

 これで、コーディングの準備が整いました。
前回、.dna ファイルに記述した加算メソッドを書きます。

        public static string xllAddition(string strX, string strY)
        {
            BigInteger x = BigInteger.Parse(strX);
            BigInteger y = BigInteger.Parse(strY);
            BigInteger ans = BigInteger.Add(x, y);
            return ans.ToString();
        }

このまま記述します。
(こんな感じ↓)
xllAddition メソッドを記述

 もう一つ、xllAddition のオーバーロードメソッドを書いてみましょう。先ほどのコードでは2つの引数に string (文字列)をとっています。でも、Excel のセルには、int (整数) が入っているかもしれません。VBA から呼ばれるときも同様にいろいろな変数が利用できた方が便利です。なので、int (整数)が渡された場合も正常に動作するように、オーバーロードを記述しておきます。

       public static string xllAddition(int intX, int intY)
        {
            BigInteger x = new BigInteger(intX);
            BigInteger y = new BigInteger(intY);
            BigInteger ans = x + y;
            return ans.ToString();
        }

IDE 上で、 BigInteger x = new BigInteger( と入力すると、BigInteger 構造体に実装されているオーバーロードが表示されますので、使い慣れないクラスを利用するときでもわかりやすいですね♪
(こんな感じ↓) この場合9個のオーバーロードがあり、6番目のオーバーロードが引数に int をとることがわかります。
BigInteger コンストラクタのオーバーロード

こんな感じでメソッドを実装してゆくのですが、長くなるので割愛します(笑)
BigInteger 構造体のプロパティー・メソッドなどをヘルプで参照しながら実装していってみると楽しいです^^
面倒な方は、プロジェクトを圧縮したのでダウンロードしてご利用ください。⇒ プロジェクトフォルダのダウンロード
このプロジェクトでは、上記の手順に加え、配布する ファイルをプロジェクトに追加して、ビルド時にコピーされるようにしてあります。
ビルドすると、実行ファイルが bin > release フォルダに生成されます(ページの最初にダウンロードしたのと同じです)。

 最後に、ビルドした BigIntXLL.dll の使い方について。
前回までの方法ですと、メソッド自体を .dna ファイルに記述していましたが、今回は DLL を使います。BigInt.dna ファイルをテキストエディタで開いてみましょう。このように記述されています。

<DnaLibrary RuntimeVersion="v4.0">
<ExternalLibrary Path="BigIntXLL.dll" />
</DnaLibrary>

外部のライブラリとして、BigIntXLL.dll を使いますよ。 って宣言してるだけです!これだけ
ですので、配布するときも、BigInt.xll 、BigInt.dna 、 BigIntXLL.dll の3個のファイルを一つのフォルダに入れて配布すれば動作します。(Excel(x64) で動作させたい場合は、BigInt.dna ファイルを BigInt64.dna と名前変更して、BigInt64.xll と一緒に配布します。)

今回は、.NetFramework 4 の機能を使うライブラリを作成して Excel から利用してみました。
わかりにくいところがあれば、コメントしてください。わかる範囲で説明します♪

次回(その4)は、WebAPI を手軽に Excel から利用する方法について書いてみようと思ってます^^
今のところ・・・セルに入力された文字列を、 Google Translate を使って翻訳する関数を作ってみようかと♪

では、また(笑)


このエントリーをはてなブックマークに追加
Share on Facebook

カテゴリー: Excel, .NetFramework   タグ:   この投稿のパーマリンク

Excel-DNA で XLL をつくる(その3) への4件のコメント

  1. kinuasa より:

    こんばんは。

    .NET製DLLがこうも簡単に呼べるのは良いですね~。
    セットアッププロジェクト?何それ??なんてレベルになってしまいます(^^)
    DNAすごい!!

    > 今のところ・・・セルに入力された文字列を、 Google Translate を使って翻訳する関数を作ってみようかと♪

    そういえば前にMicrosoft Translator APIで翻訳するVBAコードを書いた記憶があります。
    .NETだと大分コードも短くなるんだろうなぁ~、なんて(^^)

  2. supermab より:

    >こんばんは。

    師匠~♪
    こんばんは! blog リンクありがとうございます!
    コメントでリンクするのも失礼なので、あらためて記事でご紹介させていただきますね♪

    >そういえば前にMicrosoft Translator APIで翻訳するVBAコードを書いた記憶があります。

    ふつうは・・・
    少なくとも、わたしには・・・無理(笑)

    >.NETだと大分コードも短くなるんだろうなぁ~、なんて(^^)

    日本語→英語 とか一方的な翻訳だと・・・
    メソッドの記述としては・・・
    ズルしてますが・・・

    3行です(笑)

  3. y sakuda より:

    一通り眺めてやっと分かった^^
    しかし不思議な代物ですねーー
    ところで、勝手にEWの仲間の所nLinkさせてもらいました。
    http://www16.plala.or.jp/ysakuda/ystop.htm

  4. supermab より:

    >しかし不思議な代物ですねーー

    ですね~。
    どうなってんだ?って感じですよね♪

    >ところで、勝手にEWの仲間の所nLinkさせてもらいました。

    光栄です!
    こちらにもはらせていただきます♪

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>