エクセルのワークシート関数をC#で作成するには

調べたことをするすると忘れてしまうので、メモしておきます。

マイクロソフト的にはC/C++で作るのを推奨しているみたいで、C#で作る方法は見つからなかった。

ただ、エクセルのVBAを使えばC#で作ったメソッド関数を間接的に呼び出して、ワークシート関数のように使うことはできるようだ。




ワークシート関数というのは、エクセルのセルに設定できる計算式で使える関数のこと。A列の2行目から10行目までの合計値がほしいときはSUM関数を使って、以下のように書く。

=SUM(A2:A10)

ここでC#で作った自作の関数を使いたい。たとえば、

=MySum(A2:A10)

のように。

まず手順として、エクセルからC#のメソッドを参照できるようにするには、エクセルアドインのプロジェクトを作って、そこにクラスを追加してメソッドを作り、エクセルから参照できるように設定する。

他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し

次にエクセルのVBAで、エクセルアドインのオブジェクトを参照してメソッドを呼び出すMySum関数を定義する。

VBAで定義した関数はワークシート関数として参照できるので、これで目的達成。

あと、エクセルVBAはファイルごとに保存されるので、テンプレートして起動時に自動的に読み込むようにしておけばよいかと。



C#で全部できないのは残念だが、事情があるのだろうなあ。VisualStudio2005のヘルプにはC#のメソッドを直接呼び出す手順が説明されているのに、次の2008では消えている。

方法 : Excel 用のオートメーション アドインとしてマネージ コードを使用する






コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。