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

 今回は、.NetFramework を使った関数を .dna ファイルに記述して、Excek-DNA で XLL にしてみたいと思います。
利用する .NetFramework のバージョンは v4 を使います。v4 にはいくつか新しい機能が追加されていて、今回はその中から System.Numerics 名前空間にある、BigInteger 構造体を利用します。この構造体は任意の桁数の整数データを表すことが出来るので、多倍長整数演算機能を簡単に実装することが出来ます。これをVBAのコードで実現するのはちょっと骨が折れますね?
では、早速やってみましょう。

Excel-DNA に必要な2つのファイル(ExcelDna.xll と ExcelDna.dna)を任意の場所にコピーして、ファイル名をそれぞれ、BigICS.xll と BigCS.dna に変更します(VB.net で書きたい方は BigVB.xll と BigVB.dna)。 .dna ファイルをエディターで開いて以下のコードを記述します(オリジナルのコードは全て削除して以下のコードに置き換えてください)。
今回は、同じ内容の処理を C# と VB.net の2種類のコードで記述してみました。

C# で記述した場合↓

<DnaLibrary RuntimeVersion="v4.0" Name="BigInteger" Language="CS">
<Reference Name="System.Numerics" /> 
<!&#91;CDATA&#91;

using System;
using System.Numerics;

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

&#93;&#93;>
</DnaLibrary>


VB.net で記述した場合↓

<DnaLibrary RuntimeVersion="v4.0" Name="BigInteger" Language="VB">
<Reference Name="System.Numerics" /> 
<!&#91;CDATA&#91;

Imports System
Imports System.Numerics

Public Class MyAddIn
	Public Shared Function BigAdd(strX As String, strY As String) As String
		Dim x As BigInteger = BigInteger.Parse(strX)
		Dim y As BigInteger = BigInteger.Parse(strY)
		Dim ans As BigInteger = BigInteger.Add(x, y)
		Return ans.ToString()
	End Function
End Class

&#93;&#93;>
</DnaLibrary>

簡単に解説しますと・・・

1行目で、
ランタイムバージョンはv4を使うよ。このアドインの名前はBigInteger だよ。言語はCS (VB)だよ。と宣言しています。

2行目で、
System.Numerics を参照設定しています。

5行目以降で、
BigAdd 関数を定義しています。

これだけです(笑)

さっそくテストしてみましょう。
わたしは、BigIntTest というフォルダを作って、そこに C# で書いたものと VB で書いたものを保存しました。
(こんな感じ↓)
BigIntTest フォルダー

Excel を開いて、BigVB.xll をドラグ&ドロップし、アドインを有効にすると、BigAdd 関数が使用できるようになっていて、大きな桁数の足し算が出来るようになっています。(BigCS.xll でも同じです)
(こんな感じ↓)
BigAddFunction

大きな桁の整数を文字列として入力しておくと、ちゃんと計算されるのが確認できますね♪
(こんな感じ↓)
BigAddResult

 このように、Excel-DNA を使うと、簡単に .NetFramework のクラスを利用することが出来ます。
このコードに減算・乗算・除算など追加して遊んでみてください♪ 遊んでみると、BigInteger 構造体にどんなプロパティーやメソッドが実装されているか、インテリセンスで表示される IDE を使ってコーディングしたくなりますよね?

次回は、VisualStudio のような IDE を使って自作関数の DLL を作成し、作成した DLL を Excel-DNA によって XLL 化する方法について書いてみたいと思います。

では、また(笑)

カテゴリー: Excel タグ: パーマリンク

Excel-DNA で XLL をつくる(その2) への2件のフィードバック

  1. sako のコメント:

    C# などで dll を作らずとも、ソースを直接実行してくれるんですね。
    今までは、C や C++ のままでもいいやと思っていましたが、こりゃ真剣にC# を勉強しなくては。
    次回はインテリセンスで表示される IDE を使ってコーディングですね。
    ワクワク・・・・・・。

  2. supermab のコメント:

    >今までは、C や C++ のままでもいいやと思っていましたが、こりゃ真剣にC# を勉強しなくては。・・・

    C++/CLR で.NetFramework を利用するって方法もありますね。
    その場合、DLL を作ってそれを利用するのが手っ取り早いかもしれません。
    やはり、使い慣れた言語のほうがしっくりきますよね♪

コメントを残す

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