C#で作成したアセンブリをExcelから呼び出す


ちょっと仕事で必要だったので調べてみました。基本的にはCOMから.NET呼び出しなのでCCWとなるのですが、ググってみるとVB.NETにてComClass属性を使うという例を発見。ComClass属性はVBのみなのでC#からは直接Excel公開は出来ない、という感じでした。が、納得が行かないので、ちまちま試していたらC#でも公開できました。ってか、すごく簡単でした。最初に探した記事はVS.NET時代のなので、VS2005から出来るようになったのかもしれません?

手順は以下の通り。
Excelから呼び出す簡単なアセンブリを作成します。ライブラリプロジェクトを作って、以下のコードを書きます。

using System;
using System.Runtime.InteropServices;

namespace MyClassLibrary
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class Calc
    {
        public int Add(int x, int y)
        {
            return x + y;
        }

        public int Sub(int x, int y)
        {
            return x - y;
        }
    }
}
  • ClassInterface属性
  • publicなメソッド、プロパティ
  • デフォルトコンストラク

これらが必要な条件です。引数を取るコンストラクタを用意する場合は、引数なしも用意しておくことを忘れないように注意です。

では、これをExcelから呼び出せるようにプロジェクトの設定を行います。

ここから、Assembly Informationボタンを押します。

Make assembly COM-Visibleにチェックを入れます。

Register for COM interopにチェックを入れます。
これでビルドすれば、Excelから使うことができます。

では、Excel側。

普通のCOM同様、参照設定を行います。

すると、こんな感じ。