はじめに
Excel-DNAを使用してC#で自作のワークシート関数(ユーザー定義関数、User-defined functions、UDFs)を作成する方法です。VBAマクロで作成した関数と異なり、高速で処理をすることができます。
Free and easy .NET for Excel | Excel-DNA
Excel-DNA · GitHub
NuGet Gallery | ExcelDna.AddIn
作成方法
-
nugetでExcel-DNAをダウンロードします。(作業フォルダを
C:\work
とします)C:\work>nuget install ExcelDna.AddIn -version 1.5.1
-
C:\work\ExcelDna.AddIn.1.5.1\tools
を開きます。 -
Excel-DNAを使用する場合「xllファイル(
ExcelDna64.xll
)」と対になる「dnaファイル(ExcelDna64.dna
)」が必要で、このdnaファイルにコードを記載します。以下のコードをExcelDna64.dna
として保存します。これで完成です。ExcelDna64.dna<?xml version="1.0" encoding="utf-8"?> <DnaLibrary RuntimeVersion="v4.0" Language="CS"> <![CDATA[ namespace exceldna_sample { public class Class1 { public static double nibai(double x) { return x * 2; } } } ]]> </DnaLibrary>
使用方法
C:\work\ExcelDna.AddIn.1.5.1\tools\ExcelDna64.xll
をアドイン登録して使用します。詳細は以下を参照願います。
補足説明
-
「xllファイルとdnaファイル」でワンセットです。この2つのファイルは同じ名前で同じ場所に置きます。同じ名前であれば、
ExcelDna64.xll
、ExcelDna64.dna
ではなく例えばsample.xll
、sample.dna
のようにリネームしても構いません。 -
32bitの場合は
ExcelDna.xll
を使用します。つまりデフォルトのファイル名のまま使用する場合はExcelDna.xll
とExcelDna.dna
の組み合わせで使用します。 -
xllファイルとdnaファイル(と外部ライブラリ)を1つのファイルにまとめる場合は、
ExcelDnaPack.exe
を利用します。C:\work\ExcelDna.AddIn.1.5.1\tools\ExcelDnaPack.exe ExcelDna64.dna
これにより1ファイル化された
ExcelDna64-packed.xll
が作成されます。もしsample.xll
とsample.dna
の組み合わせであればExcelDnaPack.exe sample.dna
で作成します。 -
以下のようなことも可能です。
using System;
によりConvert
クラスのメソッドを使用しています。ExcelDna64.dna<?xml version="1.0" encoding="utf-8"?> <DnaLibrary RuntimeVersion="v4.0" Language="CS"> <![CDATA[ using System; namespace exceldna_sample { public class Class1 { public static string DEC2BINex(int x) { return Convert.ToString(x, 2); } public static int BIN2DECex(string x) { return Convert.ToInt32(x, 2); } public static string BIN2HEXex(string x) { return Convert.ToString(Convert.ToInt32(x, 2), 16).ToUpper(); } public static string HEX2BINex(string x) { return Convert.ToString(Convert.ToInt32(x, 16), 2); } } } ]]> </DnaLibrary>
-
実装はクラスライブラリで行い、Excel-DNAではそれを読み込むだけ、という方法も可能です。以下の例では引数を倍にするライブラリ
Class1.dll
を作成し、それをExcel-DNAで利用しています。
-
Visual Studioなどで
Class1.cs
からClass1.dll
を作成します。Class1.cs//csc /target:library Class1.cs namespace ClassLibrary1 { public class Class1 { public static double nibai(double x) { return x * 2; } } }
-
ExcelDna64.dna
と同じ場所にClass1.dll
を置きます。 -
ExcelDna64.dna
の内容を下記のように変更します。ExcelDna64.dna<?xml version="1.0" encoding="utf-8"?> <DnaLibrary RuntimeVersion="v4.0" Language="CS"> <ExternalLibrary Path="Class1.dll" Pack="true" /> </DnaLibrary>
-
必要に応じて
ExcelDnaPack.exe ExcelDna64.dna
で1ファイル化します。
参考
- Excel-DNA Packing Tool | Excel-DNA
- Excel-DNA で XLL をつくる(その1) | supermab's blog
- Excel-DNA で XLL をつくる(その2) | supermab's blog
- Excel-DNA で XLL をつくる(その3) | supermab's blog
- Excel-DNA で XLL をつくる(その4) | supermab's blog
- Excel-DNA で XLL をつくる(その5) | supermab's blog
- Excel-DNA | OPCDiary
- Excel-DNA(1) - 静かに暮らしたい
その他XLLに関連する記事