6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#でXLLアドインを作成する

Last updated at Posted at 2023-03-12

はじめに

Excel-DNAを使用してC#で自作のワークシート関数(ユーザー定義関数、User-defined functions、UDFs)を作成する方法です。VBAマクロで作成した関数と異なり、高速で処理をすることができます。

Free and easy .NET for Excel | Excel-DNA
Excel-DNA · GitHub
NuGet Gallery | ExcelDna.AddIn

サンプルとして引数を倍にするだけの関数を作成します。
nibai.gif

作成方法

  1. nugetでExcel-DNAをダウンロードします。(作業フォルダをC:\workとします)

    C:\work>nuget install ExcelDna.AddIn -version 1.5.1

  2. C:\work\ExcelDna.AddIn.1.5.1\toolsを開きます。

  3. Excel-DNAを使用する場合「xllファイル(ExcelDna64.xll)」と対になる「dnaファイル(ExcelDna64.dna)」が必要で、このdnaファイルにコードを記載します。以下のコードをExcelDna64.dnaとして保存します。これで完成です。

    csxll010.png

    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をアドイン登録して使用します。詳細は以下を参照願います。

C++でXLLアドインを作成する - Qiita

補足説明

  • 「xllファイルとdnaファイル」でワンセットです。この2つのファイルは同じ名前で同じ場所に置きます。同じ名前であれば、ExcelDna64.xllExcelDna64.dnaではなく例えばsample.xllsample.dnaのようにリネームしても構いません。

  • 32bitの場合はExcelDna.xllを使用します。つまりデフォルトのファイル名のまま使用する場合はExcelDna.xllExcelDna.dnaの組み合わせで使用します。

  • xllファイルとdnaファイル(と外部ライブラリ)を1つのファイルにまとめる場合は、ExcelDnaPack.exeを利用します。

    C:\work\ExcelDna.AddIn.1.5.1\tools\ExcelDnaPack.exe ExcelDna64.dna

    これにより1ファイル化されたExcelDna64-packed.xllが作成されます。もしsample.xllsample.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で利用しています。

  1. 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;
          }
       }
    }
    
  2. ExcelDna64.dnaと同じ場所にClass1.dllを置きます。

  3. ExcelDna64.dnaの内容を下記のように変更します。

    ExcelDna64.dna
    <?xml version="1.0" encoding="utf-8"?>
    <DnaLibrary RuntimeVersion="v4.0" Language="CS">
    <ExternalLibrary Path="Class1.dll" Pack="true" />
    </DnaLibrary>
    
  4. 必要に応じてExcelDnaPack.exe ExcelDna64.dnaで1ファイル化します。

参考

その他XLLに関連する記事

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?