[Excel] C#Addinでプルダウンリストを作る

久しぶりにExcel+C#を触って調べ方とかすっかり忘れていたので
メモついでに、ExcelのプルダウンをC#で作りたい場合のメモをば。

Excelのプルダウンリストは、手でつくる場合 データ→データの入力規則をクリック
設定で 入力値の種類をリストにして、プルダウンに表示したい内容を , で区切ることで
作成することが出来ます。

そのコードをVBAで記録すると

こんな感じになります。
しかしこれだけだとC#でどう書いたら良いのかさっぱり分からない・・・
そもそもVBAの文法すら怪しい。

ので、まず基本的な読み方をざっくり調べてみました。

Selection.Validation 以降の .XXX 部分が設定用の関数にあたります。
Validationは、入力規則のことを指しています。
ので、この場合現在のCellの入力規則の設定をしてるよーというコマンドになると言うことですね。

次に := という見慣れない代入記号は、いわゆる関数の引数指定用の記号になります。
この場合 Addの引数 Type AlertStyle Operator Formula1 に対して
それぞれ引数を指定しているという意味になります。

xlValidateList のような列挙型は、Microsoft.Office.Interop.Excel の名前空間内にあるので
ドキュメントを元に探します。

Validation.Addメソッド内に、C#での記述方法と列挙型の書き方があるので
それを元にC#で書き直します。

xlValidateListの場合は、Microsoft.Office.Interop.ExcelのXlDVTypeにあるので、
using Excel = Microsoft.Office.Interop.Excel;
のように読み込んでいる場合であれば、
Excel.XlDVType.xlValidateList のように書き換えます。

この辺の書き換えの考え方があまり資料がなくて、Microsoft系でのプログラミングに
慣れていない自分にはなかなかキツイです。

以上の感じで他も翻訳して、C#にしたコードが

こんな感じ。
RibonUIのボタンを押すと、現在のCellにプルダウンリストが作成されます。

プルダウンとは別になりますが、ActiveCellとActiveSeetの取得をするときに
ActiveCellはアプリのオブジェクトなのに対して、SheetはBookのオブジェクトから
取得するという違いがあり、(勘違いしてたこともあり)若干苦戦しました。

Pythonメインにしていると、C#でコードを書くときにものすごい苦戦するので
しばらくはExcelアドインでリハビリしつつ、書ける範囲を広げていこうかなと思います。

コメントを残す

メールアドレスが公開されることはありません。

*