Microsoft Excel 詳細 アドイン Excel アドインの作成 Excel アドインを作成するには ブックを作成し コード ユーザー設定ツールバー 及び メニュー項目を追加して Excel アドインファイルとして保存する 1. 新しいブックを作成してコードを追加し ユーザー設定ツールバー 又は メニューバーを作成する 2.[ ファイル ] メニューの [ プロパティ ] をクリックする 開いて居るドキュメントのプロパティダイアログボックスで [ ファイルの概要 ] タブをクリックし [ アドイン ] ダイアログボックスに追加するアドインの名前を [ タイトル ] ボックスで指定する 3.Visual Basic Editor で [ デバッグ ] メニューの [< プロジェクト名 > のコンパイル ] をクリックして アドインプロジェクトをコンパイルする 4. 必要に応じて Access Excel PowerPoint 又は Word アドインの VBA プロジェクトにセキュリティを設定する で説明されて居る方法で プロジェクトへのアクセスを制限する 5. アドインブックに.xla 拡張子を付けて Microsoft Excel アドインとして保存する 既定では Excel アドインは C: Windows Application Data Microsoft AddIns サブフォルダに 又は ユーザープロファイルが使用されて居る場合は C: Windows Profiles < ユーザー名 > Application Data Microsoft AddIns サブフォルダに保存される 此のフォルダは [ アドイン ] ダイアログボックスで新しいアドインを追加する際に Excel が検索する場所で有る 但し Excel の起動時に自動的にアドインをロードする場合は 目的のアドインを XLStart フォルダに保存する 此の操作は Excel アドインのロード で説明して居る 重要 :Excel アドインを作成する際は コードが実行されて居る状況に注意して欲しい アドインブックへの参照を取得する場合は ThisWorkbook プロパティを使用するか 目的のブックを名前で参照する 現在 Excel で開いて居るブックを参照するには ActiveWorkbook プロパティを使用するか 其のブックを名前で参照する アドインを保存すれば Excel で再度開いてプロジェクトに変更を加える事が出来る 保存されたアドインには関連ブックは表示されないが Visual Basic Editor を使用して其のプロジェクトを操作出来る Excel ドインとしてアドインブックを保存すると 対応する Workbook オブジェクトの IsAddIn プロパティが True に設定される ThisWorkbook オブジェクトに対する此のプロパティは Visual Basic Editor のプロパティウィンドウで設定出来る False に設定すると ブックが再び表示される ロードされて居る Excel アドインはデバッグ可能で有る アドインをロードすると Visual Basic Editor のプロジェクトエクスプローラに其のプロジェクトが表示される プロジェクトにセキュリティが設定されて居る場合 コードを表示するには適切なパスワードを入力する必要が有る 1
Excel アドインのロード 下記の孰れかの方法で Excel アドインをロードする事が出来る [ ツール ] メニューの [ アドイン ] ダイアログボックスで アドイン名の横のチェックボックスをオンにする C: Windows Application Data Microsoft Excel XLStart サブフォルダにアドインを保存すると Excel を起動した時に自動的にロードされる ユーザープロファイルが使用されて居る場合は C: Windows Profiles < ユーザー名 > Application Data Microsoft Excel XLStart サブフォルダに保存する [ オプション ] ダイアログボックス ([ ツール ] メニュー ) の [ 全般 ] タブで XLStart サブフォルダの場所を変更出来る AddIns コレクションの Add メソッドを使用して目的のアドインを利用可能なアドインのリストに追加し 対応する AddIn オブジェクトの Installed プロパティを True に設定する事に依り プログラムに依って此のアドインがロードされる 例えば 下記のプロシージャは 最初に AddIns コレクションにアドインが有るか何うかを確認し アドインが無い場合は追加する事に依ってアドインをロードする 次に アドインの Installed プロパティを True に設定する 此のプロシージャを呼び出すには 追加するアドインのパス 及び ファイル名を渡す Function Load_XL_AddIn(strFilePath As String) As Boolean ' アドインがコレクションに有るか何うかを確認し ロードする ' 此のプロシージャを呼び出すには アドインのパス 及び ファイル名を渡す Dim addxl Dim straddinname As Excel.AddIn As String On Error Resume Next ' ファイル名のみを返すには ParsePath 関数を呼び出す straddinname = ParsePath(strFilePath, FILE_ONLY) ' アドイン名を取得するためにファイル名から拡張子を削除する straddinname = Left(strAddInName, Len(strAddInName) - 4) ' アドインへの参照を取得する Set addxl = Excel.AddIns(strAddInName) If Err <> 0 Then Err.Clear ' アドインがコレクションにない場合は追加する Set addxl = Excel.AddIns.Add(strFilePath) If Err <> 0 Then ' エラーが発生した場合 プロシージャを終了する Load_XL_AddIn = False GoTo Load_XL_AddIn_End End If End If ' アドインをロードする If Not addxl.installed Then addxl.installed = True Load_XL_AddIn = True Load_XL_AddIn_End: Exit Function End Function 2
コードを自動的に実行 Excel アドインがロードされて居る時にコードを自動的に実行するには 下記の 2 通りの方法が有る アドインプロジェクトの標準モジュールに Auto_Open と謂う名前の Sub プロシージャを作成する 此のプロシージャ内のコードは アドインがロードされて居る時に実行される アドインがアンロードされて居る時にコードを実行するには Auto_Close と謂う名前のプロシージャを追加する アドインブックの Open イベントプロシージャにコードを追加する 此のプロシージャのコードはアドインがロードされて居る場合に Auto_Open プロシージャが動作する前に実行される Excel 起動時にアドインを自動的にロードする場合は アドインを C: Windows Application Data Microsoft Excel XLStart サブフォルダに保存する 亦 ユーザープロファイルが使用されて居る場合は C: Windows Profiles < ユーザー名 > Application Data Microsoft Excel XLStart サブフォルダに保存する必要が有る アドインが此のフォルダに保存されて居ない場合 Excel 起動時にアドインはロードされず Auto_Open と Workbook_Open プロシージャは孰れも実行されない エクセルアドイン開発の実例 EXCEL2010 をでも此の方法は通用する様だが 参照設定は VBE 側で指定する必要が有る様で有る 亦 アドインの VBAProject 名も念の為に変更して置いた方が良さそうで有る テスト時は 本体のブックを xlsm アドインを xlam で作成した アドインの作り方 1.VBA でプログラムする ( 念の為 プロジェクト名を任意の名称に変更して置く ) 2. ブックを保存する時 拡張子を.xla で保存する 3.xla ファイルを VB エディタ画面のメニュー 参照設定 (R) アドイン (I) でサブ画面を開き 参照 (B) ボタンを押してブラウズし 登録する 上記 1~3 の方法に依って xla ファイルの標準モジュールで Public で宣言した変数やプロシージャを 共通の変数や関数として使用出来る様に成るが 此れ丈だと 使い処が余り多く無いので アドインツールを簡単な例で紹介する 3
アドインツールの作成 シート上で右クリックした時に表示されるショートカットメニューに項目を追加して アドインのプログラムを呼び出せる様にする 1. 取り敢えず アドインの機能としては 以下を標準モジュールに記載し 上記の要領でアドインを作成する Public Sub AdinTest() Msgbox "AdinTest" End Sub 2. 更に アドインファイルの ThisWorkbook クラスシートに 以下のイベントプロシージャを記述する ブックオープン時の処理で シート右クリック時のメニューに AdinTest を呼び出す項目を追加する Private Sub Workbook_Open() Dim cmdbr As CommandBar Dim cmdbtn As CommandBarButton ' コマンドバーの取得 Set cmdbr = Application.CommandBars("cell") ' コマンドバー項目の作成 ' 引数 Temporary には必ず True を指定する事 Set cmdbtn = cmdbr.controls.add(msocontrolbutton,,,, True) ' コマンドバー項目に属性を追加 With cmdbtn ' 項目の上に区切り線を付加.BeginGroup = True ' 呼び出すサブプロシージャ名.OnAction = "AdinTest" ' 項目の表示名.Caption = " テスト項目 " End With End Sub 3. アドインを作成すれば 一旦 EXCEL を終了し 再度起動して アドインファイルを EXCEL のメニューからアドインに登録する 4. 成功すると ショートカットメニューに下図の様に項目が表示される ワークシート上のセル上で右クリック 但し 表示が 改ページプレビュー だと表示されないので 標準 にして置く 4
コマンドバー CELL は 2 個存在し 1 つが標準表示 今一つが改ページプレビュー表示用の様で有る 改ページプレビュー表示時にも項目を追加するには 両方のコマンドバーに項目追加を行う必要が有る For Each で CommandBars コレクションのアイテムをチェックして名前が CELL なら項目追加と謂う処理に成る 5. 選択するとメッセージが表示される 注意事項 1. アドインに記述する際 対象のワークブック ワークシート等を 明示的に ActiveWorkbook ActiveSheet ActiveCell と指定する事 然うしないと アドインファイルのブックやシートを対象にしてプログラムが処理される 逆にアドインファイルのブックやシートを指定する場合は ThisWorkbook.Worksheets と記述する 2. コマンドバーコントロールを作成する際 Temporary 引数には必ず True を指定する事 指定すると EXCEL の終了とと共に追加した項目も削除される 指定しないと 削除しない限り残る 3. OnAction プロパティに指定出来るのはサブプロシージャ 引数無し而巳で有る 5
Visual Studio Tools for Office を用いた Excel アドイン作成 Excel のカスタマイズには一般的には VBA が用いられて居るかと思うが 今回は VBA ではなく Visual Studio Tools for Office(VSTO) を用いて Excel をカスタマイズして行こうと思う VSTO を用いた Excel のカスタマイズだが 例えば リボンに独自のメニューを追加して機能を付加すると謂う事が可能に成る Excel 2007 から画面上部にリボンと謂うメニューが用意されて居り 此処に独自の機能を追加する事が出来る様に成った 下記は Excel 2013 のリボンのホームタブの内容で有る 良く使う 貼り付け は大きなアイコンで フォントの設定 はリストボックスでと謂う様に 非常にリッチなインターフェースに成って居る 開発環境 此の記事の開発環境は Windows 8 Visual Studio 2012(C#) Excel 2013 で有る Visual Studio 2012 には Office 2013 アドインを作成する環境はデフォルトではインストールされて居ない 下記記事を参考に開発環境を構築して置いて欲しい Excel 改造 Visual Studio 2013 での Office アドイン開発 準備編 Office アプリケーションの種類 Office を改造する Office アプリケーションには アプリケーションレベルアドインとドキュメントレベルアドインの 2 種類の物が存在する アプリケーションレベルアドインは Excel を例にすると 一旦 Excel にインストールされると 其の Excel で開いたドキュメント総てで機能を実行出来る物で有る ドキュメントレベルアドインは VBA を用いたアプリケーションと似て居て 特定のドキュメントやテンプレートに関連付けられるアプリケーションで有る Office アプリケーションは上記の様にアドインと謂う形で Excel 等にプラグインする形に成る Excel アドインプロジェクトの作成 今回は Excel アドインと謂う Excel 其の物にインストールするタイプのアプリケーションを作成する ファイル > 新規作成 > プロジェクト テンプレート >Visual C#>Office>2010>Excel 2010 アドインを選択 プロジェクトの名前を ExcelAddIn_Hello とする OK ボタンをクリック 6
今回は Excel 2013 で動作を試して居るが Excel 2013 専用のアドインは無く Excel 2010 用のアドインを作成して居る ソリューションエクスプローラを確認すると Excel 其の物と其のコードビハインドが確認する事が出来る 此の関係は WPF 開発等と同じイメージで解り易い構成で有る 亦 其のコードビハインド (ExcelAddIn_Hello.cs) は下記のコードが自動的に生成されて居る 見慣れた C# のコードなので 安心して Excel が改造出来る namespace ExcelAddIn_Hello Public partial class ThisAddIn private void ThisAddIn_Startup(object sender, System.EventArgs e) private void ThisAddIn_Shutdown(object sender, System.EventArgs e) #region VSTO で生成されたコード /// <summary> /// デザイナーのサポートに必要なメソッドです /// 此のメソッドの内容をコードエディターで変更しないでください /// </summary> private void InternalStartup() this.startup += new System.EventHandler(ThisAddIn_Startup); this.shutdown += new System.EventHandler(ThisAddIn_Shutdown); #endregion イベントハンドラの追加 作成されたアドインアプリケーションには Startup イベントと Shutdown イベントにイベントハンドラが設定されて居る 夫々 Excel 起動時 終了時に実行されるイベントのイベントハンドラに成る 此の Startup イベン 7
トハンドラに Application.WorkbookBeforeSave イベントのイベントハンドラを追加する 此のイベントは ワークブックが保存される前 に実行されるイベントで有る private void ThisAddIn_Startup(object sender, System.EventArgs e) this.application.workbookbeforesave += Application_WorkbookBeforeSave; ワークブック保存時処理の実装 先程作成した Application_WorkbookBeforeSave イベントに簡単な処理を記述する ( 下記の処理を実施して居る ) (Excel の保存処理が行われる ) アクティブなワークシートを取得する シート内の C4 に有るセルを取得する セルの値を "Hello World" にする コードは下記に成る : void Application_WorkbookBeforeSave(Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel) Excel.Worksheet activeworksheet = ((Excel.Worksheet)Application.ActiveSheet); if (activeworksheet!= null) Excel.Range namecell = activeworksheet.get_range("c4"); namecell.value2 = "Hello World"; アプリケーションの実行 アプリケーションを Visual Studio で実行すると 空の Excel ファイルが開く 其処で Ctrl+S 等でファイルを保存する事にする ファイル名等を入力して保存を終了すると C4 セルに "Hello World" とテキストが表示される 8