Windows Dev. Site

Excel-DNA

Excelと外部ツールが連携できるものをいろいろと調べていたら、Excel-DNAというものが面白そうだったので試してみました。
ver 0.30 (Wed Dec 12, 2012 at 4:00 PM)

http://exceldna.codeplex.com/

また以下サイトに大変詳しく説明されています。

http://supermab.com/wp/

今回これを参考にさせていただきました。

ExcelDna-0.30を上記サイトからダウンロードしDistributionフォルダの以下のファイルをワークフォルダにコピーします。
ExcelDna.dna
ExcelDna.xll
この二つのファイルは同じフォルダに置き、拡張子以外のファイル名は変更してもいいですが同じものにします。
編集するのは.dnaファイルのみで.xllファイルはExcelへのインポート(ドラッグ&ドロップまたはアドイン追加)に使用します。

ExcelDna.dna

<![CDATA[
using System;
using System.Numerics;

public class Test
{
	public static object [] TestArray(int n)
	{
		int x = 10;
		object [] arr = new object[x];

		for(int i=0;i<x;i++){
 			arr[i] = n + i;
 		}
 		return arr;
 	} 
} 
]]>

C#のソースをコンパイルをすることなく、テキストエディタで編集するだけというのがとても手軽です。
そしてこれだけで、なんとTestArry()がユーザ定義関数として、Excelで利用できます。ちょっと驚きです。

私がやりたかった「ユーザ関数から配列を返した結果を複数のセルに表示させる」ことにはちょっと戸惑いました。
そもそもExcelの配列数式なるものを知らなかったためです。
あと、配列をint[]で返すとExcelから見えないようです。エラーをださないので原因がわかりませんでした。

以下に手順をメモしておきたいと思います。

excelDna1
上のような状態で、CTRL + SHIFT + Enter を押します。セルは複数選択しておく必要があります。
選択したセルが一つだったり、Enterキーだけ押した場合は、一つのセルにしか表示しません。
excelDna2
無事表示できました。^^;
個人的にはVSTOが好きですが、この手軽さはとても魅力に思いました。