<<< アドインの素 説明書  '21/4/17 by だるま(鈴木正国) >>> 【ソフト名称  】アドインの素 【バージョン  】4.22 【主ファイル名】アドインの素.xla 【動作環境   】OS : WindowsXP/7/8.1/10          Excel : Excel2000-2019         (動作確認:Windows8.1+Excel2016(32ビット), Windows10+Excel2019(64ビット)) 【ソフト種別  】シェアウェア 本体\5,500(消費税10%込み) 【シェアレジ  】http://shop.vector.co.jp/service/servlet/NCart.Add?ITEM_NO=SR335140 【著作権    】だるま(鈴木正国)が保有しています。          雑誌等への掲載は自由です。但し、事前または事後連絡願います。 【免責     】作者は一切責任を負いません。ご自身の責任でご使用ください。 【Vector作品番号】SR335140 【E-mail    】daruma3.vbaアットマークoffice.tnc.ne.jp      (スパムメール対策です↑を「@」に変えてください。) 【ホームページ 】http://hp.vector.co.jp/authors/VA033788/index.html 【ベクターだるまのページ】http://www.vector.co.jp/vpack/browse/person/an033788.html ■更新履歴■ Ver. 4.02 cFunction.DateInput(カレンダーフォームによるセルへの日付入力)を追加 Ver. 4.03 cFunction.TableItem(行・列項目名によるセル参照取得)を追加 Ver. 4.10 cTableクラス公開(cFunction.TableItemで使用しているクラス)==>コード高速化 Ver. 4.11 祝日法の改定に伴い、2016年以降の「山の日(8/11)」に対応 Ver. 4.12 Sort関数をフリーウエアとして本体に搭載      (アドインサンプル.xlaで提供していたソート【関数】を本体に搭載し本体のみで       ソート関数が使用できるようにしました。この機能には使用期限は設けてありま       せんので本体の試用期限後もライセンス無しで継続して利用できます。) Ver. 4.13 cFunction.JoinAry():一方がEmpty値でも正常に配列連結結果を返すよう修正 Ver. 4.14 無料試行期間を120日に変更 Ver. 4.16 cLoadPicture:セル内余白設定のバグ修正 Ver. 4.17 cFunction.MergeAreas:シート使用範囲外指定時、エラーになるバグを修正 Ver. 4.20 祝日法の改定(予定)に伴い、天皇誕生日等の変更に対応 Ver. 4.20.1 2月になり春分日、秋分日が確定したのでCalendar.ini更新 Ver. 4.21 祝日法の改定(2021年の特例)に伴う更新 Ver. 4.22 64ビット版のExcelでエラーになる不具合を修正 ■■■ 目次 ■■■ ●アドインの素とは ●インストールについて ●同梱ファイルについて ●アドインの素の基本的な使い方 ●【クラス】について ●ユーザーアドインのサンプルについて ●ユーザーアドインの作成方法(一般) ●ユーザーアドインの作成方法(簡易雛形利用−【超初心者向け】) ●アドイン化のヒント ●ヘルプの参照方法 ●アドインの素への参照設定について ●ライセンスについて ●お問い合わせ **************************************************************************** ●アドインの素とは **************************************************************************** Excelアドインファイル(*.xla, *.xlam)を【簡単】に作成する為に、便利な各種機能をクラス で提供するものです。 各種機能には例えば、メニューの構築、Eメール送信、ソート関数、配列どうしの比較、画像 読み込み、プログレスバー、ファイルリストの取得、テキストファイルの読み書き、など20 個以上のクラスがあります。 あなたの作成したアドインファイルからアドインの素を参照設定すればこれらすべての機能が 利用可能になり、プログラム作成が格段に簡単になります。 そして、そのアドインの素を参照設定して作成したアドイン(以下、ユーザーアドインと言い ます。)を、【配布】することも出来ます。 (配布数は無制限で、配布先には基本的にライセンスは不要です。) **************************************************************************** ●インストールについて **************************************************************************** 特にインストールというほどの作業は必要ありません。 解凍したファイルを、適当に作成したフォルダの中に放り込んでおいてください。 そして、ユーザーアドイン作成時に必要なファイル(アドインの素.xlaは必須、後のサンプル などは適宜)をそれ用に作成したフォルダの中に入れるだけです。 (勿論、アドインの素.xlaへの参照設定は必須です。) ※WindowsVista以降ではシステムフォルダに対する制限が厳しくなっていて、ProgramFiles  フォルダの下などでは動作時にシステムエラーになったり、エラーにはならなくても正常に  動作しているように見えているのにプログラムからのファイル作成が失敗していたりなどと  いうことがあります。  ですので、ユーザーアドイン用のフォルダとしては【システムフォルダ以外】の例えば  C:\Addins\myAddin1などというフォルダの作成をお勧めします。 アンインストールは、フォルダごと削除してください。 ※アップデート方法 旧バージョンからのアップデートは、解凍したファイルで旧ファイルを上書きしてください。 **************************************************************************** ●同梱ファイルについて **************************************************************************** ★はじめに.txt  ご挨拶文です。 ★アドインの素.xla  本体プログラムです。 ★アドインの素_説明書.txt、アドインの素_説明書.xls  説明書ファイル、本ファイルです。  Excel版の方はハイパーリンクで読み易くなっています。内容は同じです。 ★Help.xls  全クラスの機能詳細説明です。一クラス一シートの構成になっています。 ★アドインサンプル.xla  アドインの素の全クラスのサンプルプログラムを詰め込んだ雛形ファイル(詳細版)です。 ★アドインサンプルLight.xla  上記ファイルから必要最小限のサンプルプログラムを抜粋した初心者用雛形(簡易版)です。 ★アドインサンプルSP.xla  アドインの素とは直接は関係ないものも含めて、便利であろうと思われるテクニックを、  私のホームページから抜粋し(多少のデフォルメを加え)たものです。  プログラム作成の参考にしてください。 ★メール一括送信.xla  メール送信クラス(cMessage)を利用した【本格的な】メール一括送信プログラムサンプルです。  このまま利用することも出来ますし、自分用に手を加えて下さっても結構です。  使い方は、これをアドイン設定しておき、下記テンプレートファイルで新規ブックを開きます。 ★メール一括送信.xlt  メール一括送信.xla用のテンプレートファイルです。 ★メール一括送信Light.xla  メール一括送信.xlaの簡易版です。 ★メール一括送信Light.xlt  上記用のテンプレートファイルです。 ★Calendar.ini  カレンダー(cCalendar)クラスで使用する設定ファイルです。 **************************************************************************** ●アドインの素の基本的な使い方 **************************************************************************** 1.まず第一に「アドインの素.xla」を【参照設定】することが必要です。 2.次に【cMainクラス】のインスタンスを生成しその参照を取得します。  ※インスタンス:実メモリー上に展開されたクラスのコピー=操作対象【オブジェクト】)  例:   Dim cM As cMain   Set cM = SourceOfAddin.GetClass (SourceOfAddin:アドインの素のプロジェクト名、GetClass:cMainオブジェクト取得用メソッド) 3.そしてcMainオブジェクトから【必要なクラス】のインスタンス【オブジェクト】を得ます。  例:   Dim cFL As cFileList   Set cFL = cM.FileListClass 4.取得したオブジェクトに対して必要なプロパティを設定したりメソッドを実行したりします。 5.不要になった時点でオブジェクトを解放します。  例:   Set cFL = Nothing   Set cM = Nothing 簡単にまとめますと、まず【参照設定】が必要、 次に【cMainの取得】、そしてそこから【必要なクラスのオブジェクト】の取得となります。 「必要なクラス」が何なのかは、インテリセンス機能(オブジェクトの後に「.」を打つと候補 が表示される)とヘルプからの検索で容易にわかるようにしてあります。 **************************************************************************** ●【クラス】について **************************************************************************** ◆クラスは苦手? ここまであたりまえのように【クラス】という言葉を使ってきましたが、実際のところクラス は苦手、クラスなんて使ったことが無い、と言う方もいらっしゃるのではないかと思いますが、 全く心配はありません。 ◆実は既に使っていた? 少しでもVBAでプログラムを書いたことのある方は実は知らない内にクラス(オブジェクト)を 操作していたのです。ブック、シート、セル(Range)、これらは皆クラスです。 ActiveWorkbook.Save ActiveSheet.Name="xxx" Range("A1").Value=123 これらはすべてクラスから生成されたオブジェクトに対して、メソッドの実行やプロパティの 設定をしています。アドインの素もこれらと【同じ感覚】で簡単に色々なことが出来ます。 ◆クラスの一般手順 ところで、クラスを使用する場合の一般的な手順はこのようになります。 Dim myClass As Class1 'オブジェクト変数の宣言 Set myClass = New Class1 '新規インスタンス(オブジェクト)生成 myClass.xxx 'オブジェクトに対する操作 ActiveWorkbook.Save などとは随分と趣が違うように見えますが、これはMicrosoftが【工夫を凝らし】ユーザーが クラス(オブジェクト)を意識しなくてもプログラムが書けるようにしているためです。 これをクラス(オブジェクト変数)を使用する一般的な書き方に変えるとこうなります。 Dim myBook As Workbook Set myBook = ActiveWorkbook myBook.Save ◆オブジェクト取得方法は2つ おや、2行目が少し違いますね。そうなんです、オブジェクトの取得方法には大きく言って 2つの方法があるのです。 Newキーワードによる新規オブジェクト生成と、親オブジェクトからのオブジェクト取得です。 上記は後者で、ActiveWorkbookの前にApplication(=Excelそのもの)という親オブジェクト が省略されています。 ◆アドインの素でのオブジェクト取得方法 実はアドインの素ではオブジェクトの取得方法として後者を採用しています。 採用というか、そうせざるを得なかったのですが。 ExcelVBAの仕様で、他のブックのクラスのインスタンス(オブジェクト)の取得は、 Newキーワードによる新規作成では出来ないのです。 そこでアドインの素では、元となるcMainオブジェクトを.GetClassで提供し、実際に使用する 各クラスのインスタンス(オブジェクト)はcMainから取得するという方法を採っています。 それが、前節「アドインの素の基本的な使い方」の説明になります。 ◆クラスの【利用】は簡単 繰り返しになりますが(クラスを作るのはそれなりに大変ですが)出来合いのクラスを利用する のは、ブックやシートなどを操作するのとほとんど同じ感覚です。 **************************************************************************** ●ユーザーアドインのサンプルについて **************************************************************************** ◆アドインサンプル.xla(雛形) アドインの素には便利な機能が満載なのですが、それをよりよく理解していただき、さらに簡単 に使いやすくする為にサンプルとして、【アドインサンプル.xla】を同梱しました。これには アドインの素のすべてのクラスのサンプルコードを掲載し、さらに基本的なメニューサンプルを 複数個構成してありますので、これを雛形として簡単にユーザーアドインを作成することが出来 ます。 ◆そのまま使える関数 サンプルには、クラスを利用して作成した【そのまま使える関数】もあります。 Sort関数、テキストファイルへの値やリストの読み書き関数などです。 例えばSort関数を使えば【配列のソートは次の一文】で出来てしまいます。 V = Sort(V) 'Vはバリアント型変数で中身は配列 勿論、昇順・降順、二次元配列、対象列指定、複数列対象のソートなどにも対応しています。 サンプルプログラムですのでコードは編集が可能です。お好みでカスタマイズも出来ます。 ◆ほぼそのまま使えるFileSearch代用クラス Excel2007以降ではApplication.FileSearchオブジェクトが無くなってしまったために苦労され ている方も多いようです。 アドインの素のcFileListとcFileList2クラスはその代用的な、ファイルリストを取得する為の クラスなのですが、さらにFileSearchに近づけてプロパティ名やメソッド名を同じにし、ほぼ その代用として使えるクラスをアドインサンプル.xlaに作りました。 【cFileSearchLight】クラスです。cFileList2クラスを利用しています。 ところでなぜLightなのかというと、FileSearchオブジェクトの機能を完全に再現するのは非常 に難しいので、その極基本的なよく使われる機能だけに絞ったクラスにしたからなのです。 それでも通常使用するには充分な機能があると思います。 ◆アドインサンプルLight.xla(簡易雛形) アドインサンプル.xlaにはすべてのクラスのサンプルコードと各種のメニュー構成のサンプルを 掲載していますが、より簡単に雛形として利用しやすいように、必要最小限の内容に絞った サンプルも同梱しました。【アドインサンプルLight.xla】です。 ◆アドインサンプルSP.xla(テクニック集) もう一つ、こちらはアドインの素とは直接は関係ないものも含めて、テクニックとして控えて おきたいと思ったものを私のホームページから抜粋(&多少のデフォルメ)し、 【アドインサンプルSP.xla】として同梱しました。 以上は、汎用の雛形ということになりますが、もう2つサンプルがあります。 ◆メール一括送信.xla(本格版) まずは、【メール一括送信.xla】です。 実はこれは、メール送信クラス(cMessage)の動作確認の為に作成したのですが、段々あれもこれ もと欲が出てきて、いつの間にか【本格的な】メール一括送信プログラムに仕上がってしまった ものです。このまま利用することも出来ますし、自分用に手を加えて下さっても結構です。 使い方は、これをアドイン設定しておき、テンプレート(メール一括送信.xlt)で新規ブック を開きます。 ◆メール一括送信Light.xla(簡易版) もう一つは、メール一括送信.xlaがあまりにも手が込み過ぎてしまったので、雛形として利用 するには複雑すぎるかなとの思いから簡易版として作成した【メール一括送信Light.xla】です。 こちらは初心者の方でも比較的カスタマイズしやすい構成になっています。 使い方は同様で、アドイン設定しておき、テンプレートファイル(メール一括送信Light.xlt) で新規ブックを開きます。 **************************************************************************** ●ユーザーアドインの作成方法(一般) **************************************************************************** ■■■ ユーザーアドイン作成手順(雛形を利用しない場合−上級者向け) ■■■ 1.普通のブックに適当なコードを記述し名前を付けて保存でアドインブックとして保存します。 2.一旦Excelを終了し再度Excelを起動します。(アドインブックを直接は開かないで下さい。) 3.そのアドインブックをアドインとして設定します。 4.「アドインの素.xla(SourceOfAddin)」を参照設定し、上書き保存します。 5.以後はアドインの素の機能が使えるので必要な処理を記述します。 ■■■ 作成時のポイント(雛形、簡易雛形ファイルを利用する場合) ■■■ 1.プロジェクト名を【一意の名前】に変更する事。 2.mCommon内のAppliNameを上記プロジェクト名【一意の名前】にする事。 3.メニューにバージョン情報を残す場合は、mCommon.Setバージョン情報、で設定する事。 4.ライセンス登録時用に、アドイン設定する事。 ■■■ ユーザーアドイン作成手順(簡易雛形を利用−初心者向け) ■■■ 1.アドインサンプルLight.xlaをコピーして任意の名前(例:myアドイン.xla)に変更します。 2.myアドイン.xlaを開き(マクロは有効にする)、VBE画面(Alt+F11)にします。 3.プロジェクト名を「SampleProjectL」から【一意の名前】(例:myProject)に変更します。 4.標準モジュールmCommon内の設定    AppliNameを上記のプロジェクト名【一意の名前】にします。(★重要)    AppliCaptionにも適当な名前を設定します。    一旦上書き保存します。(★重要) 5.ThisWorkbookのWorkbook_Openを実行します。(★重要、cMainオブジェクトの再取得です。)   (ブックを閉じて開き直しても良いです。) 6.バージョン情報設定   mCommon内のSetバージョン情報()を実行し、バージョン情報を設定します。 7.ここで上書き保存して、一旦Excelを終了します。(★重要) 8.Excelを起動し(myアドイン.xlaを直接開かない)myアドイン.xlaをアドイン設定(★重要)   します。  ※ライセンス登録時にはアドイン設定されている必要があります、ライセンス登録後はアドイン   設定をはずして直接ダブルクリックなどで起動しても構いません。 9.処理内容に応じて、メニューモジュール(mMenu1_light)の編集、実行プロシージャの作成   などを行ないます。(mMenu1_light, Module1, Module2などを適宜編集します。) ■■■ ユーザーアドイン作成手順(雛形を利用−中級者向け) ■■■ 1.アドインサンプル.xlaをコピーして任意の名前(例:myアドイン.xla)に変更します。 2.myアドイン.xlaを開き(マクロは有効にする)、VBE画面(Alt+F11)にします。 3.プロジェクト名を「SampleProject」から【一意の名前】(例:myProject)に変更します。 4.標準モジュールmCommon内の設定    AppliNameを上記のプロジェクト名【一意の名前】にします。(★重要)    AppliCaptionにも適当な名前を設定します。    一旦上書き保存します。(★重要) 5.ThisWorkbookのWorkbook_Openを実行します。(★重要、cMainオブジェクトの再取得です。)   (ブックを閉じて開き直しても良いです。) 6.バージョン情報設定   mCommon内のSetバージョン情報()を実行し、バージョン情報を設定します。 7.メニューの雛形を決めます。   mMenu#_xxxという名前のモジュールが7つありそれぞれがメニューの雛形となっています。   各モジュールのAddMenu()を実行するとその雛形メニューに切り替わります。   モジュール内の説明を参考にし、実際に切り替わったメニューも動作確認して、どの雛形   を利用するかを決めます。 8.決めたメニューの雛形用モジュール以外のmMenu#_xxxを解放します。(右クリックから)   (エクスポートしますか、に対しては「いいえ」) 9.ThisWorkbook.Workbook_Open内のメニューの記述を上記で決めたものを有効にして、残り   を削除します。 10.ここで上書き保存して、一旦Excelを終了します。(★重要) 11.Excelを起動し(myアドイン.xlaを直接は開かない)myアドイン.xlaをアドイン設定(★重要)    します。  ※ライセンス登録時にはアドイン設定されている必要があります、ライセンス登録後はアドイン   設定をはずして直接ダブルクリックなどで起動しても構いません。 12.処理内容に応じて、メニューモジュール内の編集、他のモジュール・プロシージャの作成、    不要なモジュールの解放などを行ないます。  ※不要なモジュールの目安:mXXXSampleという、後ろにSampleが付いているモジュールは   基本的に解放して構いません。 **************************************************************************** ●ユーザーアドインの作成方法(簡易雛形利用−【超初心者向け】) **************************************************************************** 本来アドインは他のアドインとかぶったりしないようにプロジェクト名の変更をするなどの対応 が必要なのですが、一つしか作らないから構わない、あるいはとにかく簡単に済ませたい、とい う初心者用の手順です。 1.アドインサンプルLight.xlaを任意の名前(例:myアドイン.xla)に変更します。 2.Excelを起動し(myアドイン.xlaを直接は開かないこと)、myアドイン.xlaをアドイン設定   します。(★重要)  ※アドイン設定:Excel2002の場合、[ツール] - [アドイン] - 「参照」から     Excel2016の場合、「ファイル」-「オプション」-「アドイン」-「設定」-「参照」から  ※ライセンス登録時にはアドイン設定されている必要があります、ライセンス登録後はアドイン   設定をはずして直接ダブルクリックなどで起動しても構いません。 以下、VBE画面(Alt+F11)で作業します。 3.処理内容に応じて、メニューモジュール(mMenu1_light)の編集、実行プロシージャの作成   などを行ないます。(mMenu1_light, Module1, Module2を適宜編集します。)  3−1.メニューのバージョン情報部分をmMenu1_lightの中から削除します。(一行だけです)  3−2.実行プロシージャの記述    Module1, Module2には初期設定でメッセージボックス表示だけが書かれていますので、    それを実際の処理プログラムに置き換えます。  3−3.メニュー表示(mMemu1_light中の記述)を調整します。    例:    .AddButton("メニュー1", False).OnAction = "Module1.Menu1"    「メニュー1」はメニューの表示名、=の右辺の""の中は、そのメニュークリックで動作    する「モジュール名.プロシージャ名」です。これらを必要に応じて書き換えたり、不要    な行は削除、逆にさらに必要ならコピーして行を増やしてください。    メニュー表示名の隣のFalseはメニューの上に区切り線を入れるかどうかの指定です。    メニュー項目をグループに分ける場合、グループの最初のメニューで、Trueとすれば    区切り線が引かれます。  3−4.上書き保存(★重要)    編集が済んだら上書き保存(画面左上のフロッピーアイコンが便利)しますが、編集の    途中でも随時上書きすることをお勧めします。    アドインブックの場合、通常のブックと違って変更した後で保存せずに閉じようとした時    でも「保存しますか」とは聞いてきません。充分ご注意ください。 **************************************************************************** ●アドイン化のヒント **************************************************************************** ◆最終保存の前に VBE画面内で編集の為に開いたウインドウ([ウインドウ]メニューで確認できるウインドウ)は 基本的には保存前に閉じておいた方が良いです。詳しい理屈は分かりませんが、経験上その方が トラブルが少なくて済むようです。 ◆できるだけ【コンパイル】してから保存、実行して下さい。 特に雛形ファイルを利用して作成する場合は、以前の参照情報が影響しているせいか、変更 したメニューから実行した時にエラーが発生する場合があります。その時はコンパイルで正常 に直ります。 ◆実行プロシージャについて 初心者の方の中には、マクロの記録を少し手直ししたくらいのものしか作ったことが無く、 アドイン用のプログラムなんてどうやって書いたらいいんだ、と思っている方もいらっしゃる かもしれませんが、これはとりあえずは心配有りません。 その現在手持ちのプログラムが、アクティブなブックやアクティブなシートを対象としたもの であれば(初心者の方の場合、大抵そうです)そのままそれを使用できます。 また、Select, Activate, Selection などを多用したプログラムであっても現在正常に動作し ているものであれば大抵は問題なくそのまま動くと思います。 (そういう記述のプログラムが、プログラムとして良いかどうかは別問題として。) ◆シート上の「ボタン」への対応 現在、シート上にボタンを配置して、シートの切り替え、プロシージャの実行、を行なっている 方は次のようにしてみてください。 シートの切り替えをしているボタンは廃止して、ハイパーリンクにしましょう。 オートシェープの「額縁」を使えばボタンっぽく見えます。それにハイパーリンクを設定します。 図形を右クリック - ハイパーリンク プロシージャの実行を行なっているボタンも廃止し、メニューから実行するようにします。 ただし、実行するプロシージャが特定のシートを対象にしている場合は、下記いずれかあるいは 複数の対応が必要な場合もあります。 ◆対象シートをアクティブにする 一番単純な対応策です。プロシージャの先頭に、 Worksheets("対象シート名").Select と追加して下さい。 ◆コード上でブックとシートを明示する 現在のコードが、Range("A1").Value=123 あるいは Cells(1, 1)="ABC" などでしたら、 Worksheets("対象シート").Range("A1").Value=123 というようにシートを明示しましょう。 もし複数のブックが開いている可能性のある時は、さらにブックも明示しましょう。 Workbooks("対象ブック").Worksheets("対象シート").Range("A1").Value=123 ◆オブジェクト変数を活用する ブックとシートの明示では、対象のコード行すべてに対して行なう必要があり、大変面倒だし コードとしても冗長で見にくくなります。 そこでオブジェクト変数の登場です。説明の前にまず簡単なサンプルコードです。 Dim shtA As Worksheet Set shtA = Workbooks("対象ブック").Worksheets("対象シート") shtA.Range("A1").Value=123 一見、反って長くなったようですがそうではありません。プロシージャの先頭で上の2行を 記述しておけばあとは、Workbooks("対象ブック").Worksheets("対象シート").と書く代わりに shtA.だけで済むのですから。 (shtAは単純な記述の例ですが、変数名はその規則に従えば自由に付けることが出来ます、 例えば、shtCopySourceとすればそれがコピー元のシートなのだなということがコード上で はっきり分かるようになる、という利点もあります。) ◆ツールバーまたは右クリックメニューからの実行 今までシート上のボタンから実行できていたのに、いちいちメニューから実行するのは面倒だ、 と思われる方もいるでしょう。それに対してはツールバーまたは右クリックメニューで対応 して下さい。 右クリックメニューにするのは簡単で、mMenu1_light.AddMenuの中を以下のようにします。 変更前:.ParentBarName = "Worksheet Menu Bar" 変更後:.AddtoTop = True '先頭へ挿入する指定、これが無いと最下行へ追加される     .ParentBarName = "Cell" 'セル右クリックメニューの指定 ツールバーにするには、.ParentBarName = "Worksheet Menu Bar"を単に、.NewBarとしますが、 これだけだとメニュー名表示が出ません。 ツールバーの例は、アドインサンプル.xla(雛形)のmMenu1_light2を参考にしてください。 (雛形、簡易雛形の両方を開いておき、VBE上で「mMenu1_light2」モジュールをドラッグ& ドロップでコピーすることが出来ます。) ただ、ツールバーの場合、Excel2007からはリボンのタブに収納されてしまいメニューと同じ ような扱いになってしまいましたので、2007以降の場合は意味がありません。 ◆セルそのものをボタン代わりにする、イベントプロシージャ セルそのものをボタンとして機能させるようにすることも出来ます。(但し、クリックではなく 右クリックまたはダブルクリックになりますが。) その例が、メール一括送信.xlaです。 サンプルプログラムですのでコードは公開していますから、参考にして作り込むことは可能です。 ただし、初心者の方にはちょっと難しすぎるかもしれませんが。^^; ◆データとマクロ分離の必要性 このような対応は面倒であり無駄ではないか、今までどおりの方がずっと簡単で分かり易かった と思われる方もいるかもしれませんが、それは間違いです。 マクロをアドイン化してユーザーデータとプログラムを分離できれば保守性がぐんと上がります。 マクロ(プログラム)というものは使って行くうちにバグを修正したり機能追加したりという 保守作業が必ず発生します。 その時、データ+マクロというブックが多数あった場合、そのすべてのブックでプログラムの 保守が必要になります。 しかし、データブックとマクロブック(アドインブック)が分かれていれば保守はマクロブック 1つだけで済みます。 データ+マクロブックがどのくらいあるのか、プログラムの保守内容がどれほどのものなのか にもよりますが、その保守作業量の差は歴然です。 (しかも、多数のブックのプログラム修正作業の繰り返しのような  【単調な作業を間違いなく実行できる保証】もありません。) 多少の手間をかけてでも、マクロブック(プログラム)を独立させておく意味は大きいのです。 **************************************************************************** ●ヘルプの参照方法 **************************************************************************** ◆クラス.Help アドインの素によって提供される各クラス(オブジェクト)の詳しい説明は、各クラスの.Help メソッドによって、文字配列で提供されます。 個別に各クラス毎のHelpを取得することも出来ますが、それでは面倒だし、配列で得られただけ では、見るもの大変ですよね。 ◆cMain.Help そこで、cMainオブジェクトのHelpメソッドで全Helpを一つのブックに書き出せるようにしてあ ります。具体的には、まずイミディエイトウインドウ(Ctrl+G)を開いておき、プロジェクト エクスプローラ(左上の階層表示のウインドウ)上でアドインの素またはアドインの素を参照 しているブックを選択した状態で、イミディエイトウインドウ内で下記コードを実行します。 SourceOfAddin.GetClass.Help もし、アドインサンプル.xlaまたはアドインサンプルLight.xlaを開いた直後であれば、cMain オブジェクトは変数 cM に設定されていますので、そのブック(アドインの素ではありません、 アドインの素を参照している方のブックです。)を選択した状態で、 cM.Help でも同じことが出来ます。 ◆Help.xlsを同梱 慣れれば簡単ですが、やはりいちいち実行するのは面倒ですし、お客様にお手間を取らせては 申し訳ありませんので、出来たブックをHelp.xlsとして同梱してあります。 (始めからHelpをクラス内に持ったりせずにHelp.xlsを独立させて作っておけば良いんじゃな いの、と思われるかもしれませんがそれはNGなのです。 クラスもプログラムです。ですから、使って行くうちに必ずバグ修正や機能追加などの変更が 生じます。Helpが別ブックになっていると、その変更部分のHelpの修正に手間が掛かったり抜 けが生じたりする可能性が大なのです。 また、クラスは基本的に独立した一つのプログラムの集合体ですので、あるクラスを別のプロ ジェクト(ブック)で使うという場合があります。その時、Helpがクラス内にある方が好都合 なのです。) ◆Help.xls内の検索 一クラス一シートの構成になっています。 目的のクラスが分かっている時はその【シート】内を、分かっていない時は【ブック】を対象 として、Excel標準の検索機能(Ctrl+F)で検索して、内容を参照して下さい。 機能詳細にはHelpを見ないと分からないものもいくつかありますが、大抵は目的のオブジェクト が取得出来れば、あとはインテリセンス機能(.の後の候補表示、引数のガイド表示)で、どう 使えば良いのか判断がつくと思います。 また、雛形(アドインサンプル.xla)にはすべてのクラスのサンプルコードを掲載しています ので、これを参考にしていただければ、そんなにHelpに頼らなくても済むと思います。 雛形のコード内の検索は、これもVBE標準の検索機能(Ctrl+F)を使ってください。 **************************************************************************** ●アドインの素への参照設定について **************************************************************************** ◆参照先のパスは絶対パス アドインの素は参照設定して使います。Excelで、あるブックで他のブックを参照設定すると その参照先の情報は絶対パスで記録されるようです。 ですから例えばA.xlaでc:\test\sample\B.xlaを参照設定したとすると、A.xlaをどこへ移動 しようがコピーしようが、c:\test\sample\B.xlaへの参照設定を保持しています。 ◆単一PC内では問題無し 単一のPC内で使う場合は、これは特に問題無いというよりむしろありがたい機能と言えます。 A.xlaをコピー(利用)して別のアドインC.xlaを別フォルダに作成するなどといった時でも、 参照先のB.xlaは元の一つのままで、特に何もしなくて済みますし、B.xlaの保守も一つで済み ます。 ◆配布する場合は問題あり? しかし、都合が悪い場合もありますね。ユーザーアドインを配布する場合、その配布先毎に 参照設定を調整する必要が生じてしまいます。 ところが実はその必要が無いのです。というのは、参照先であるアドインの素を、作成した アドインと共に配布して両方を同じフォルダに入れておけば良いのです。 ◆参照設定の仕組み もう少し、参照設定の仕組み(動作)を詳しく説明しますと、まず記録される参照設定先は 絶対パスのようです。確認の為に、同一PC内でA.xla==>B.xla(==>は参照先という意味)を 作成し、A.xlaとB.xlaを両方共に別フォルダにコピーしてA.xlaを開きます。 B.xlaを参照していますので当然同時にB.xlaも開きますが、この時開くのはコピーした同一 フォルダ内のB.xlaではなく、元の位置のB.xlaなのです。 ここで一旦Excelを閉じ、元のB.xlaの名前を変えて「存在が無い」状態にします。 あらためてA.xlaを開くと、今度は同一フォルダ内のB.xlaが開きます。 つまり、参照先のファイルの検索順として、まず記録されている絶対パスの位置のファイル、 それが見つからなければ参照元のファイルと同じフォルダ内のファイルとなるようです。 ◆配布先で参照設定について問題無し? 「となるようです」と書いたのは、そういうことを明示したものが見つからないからです。 Microsoftのサイトを探しても分かりませんでした。 しかし、以前Excel97を使用していた時もこの動作は確認していますし、その後Excel2002 と2010そして2016でも確認しましたが、間違いありませんでした。 ◆万一の時はどうする 万一、配布先で同じフォルダに入れたのにうまく参照設定されない、ということになったと しても対策はあります。以下のような記述によりプログラムで参照設定をすることが出来ます。 ThisWorkbook.VBProject.References.AddFromFile FileName:=配布先のアドインの素の絶対パス 何だ、だったら最初からそのようにしておけば良いのに、と思われるかもしれませんが、実は このコードを実行するにはExcelのセキュリティ設定を変える必要があるのです。 Excel2002の場合ですと、[ツール] - [マクロ] - [セキュリティ]で、「信頼のおける発行元」の 「Visual Basic プロジェクトへのアクセスを信頼する」をチェックしておく必要があるのです。 なら初めからそのチェックを入れるようにして使うようにすれば何ら問題ないのでは?と思わ れたかもしれませんが、そうは行かないのです。 開発環境のPCなら、開発者はそれなりの知識と注意力を持っているでしょうから、まあ構わない かもしれませんが、配布先のエンドユーザーの環境でこのチェックを入れておくのは好ましく ありません。マクロウイルスの被害に遭う可能性が高くなります。(多少ですが。) ではどうするのがいいのかと言えば、 A.多少の危険を承知で、配布先でセキュリティレベルを調整してもらい、上記コードを記述 B.開発環境のPCと配布先のエンドユーザーのPCで同じ絶対パスを準備する のどちらかぐらいでしょうか。 ここで、配布先で参照設定をやり直してもらえば簡単に済む話では、と思われた方もいるかも しれませんがそれは無理です。開発ライセンスの無い配布先では、エンドユーザーがユーザー アドインに変更を加えて上書き保存することは出来ない仕様になっていますので。 ◆問題ありません 参照設定に関して長々と、わざわざ心配させるようなことを書きましたが、これはあくまでも 万一の場合であり、まず問題はありませんのでご安心ください。 (インターネットで検索すると、ブック間の参照設定に関して上記のプログラムを実行すること を推奨しているような記事も見かけます。当然、セキュリティ設定の変更も含めて。しかしこの やり方は私は好ましくないと思っています。そのような記事を書いている人は、ブック間の参照 設定が動的に変更されることを知らないのではないかと思われます。) ◆お勧めの参照設定 ということで、単一PC内(開発環境であり実行環境でもある場合)で複数のユーザーアドイン を作成する時には、アドインの素はどこか一箇所に一つだけ配置しておくことをお勧めします。 ユーザーアドイン(作成したアドイン+アドインの素)を配布する時には、配布先では基本的 にはセットで同じフォルダに入れて使用するようにしてください。 通常はそれで問題ありません。 ◆配布先で問題が発生しないように 上にも書きましたが、参照設定のパスは絶対パス(c:\...のようなドライブ名から)で記録され ているようですので、もし配布先に同じ絶対パスの場所があり、且つそこと別の場所の複数の フォルダに複数のユーザーアドインを入れた場合には誤動作の原因になる場合があり得ます。 (誤動作の可能性はかなり低いですが。) その可能性を限りなく0に近づけるためには、開発環境のフォルダ名を他ではまず使われない であろうと思われる名前にすることです。 例えば、c:\DarumasFolder\Addins\個人名\ProjectA\とか。 **************************************************************************** ●ライセンスについて **************************************************************************** ◆シェアウェアです このソフトはシェアウェアです。 無料のお試し期間は120日間としますが、その後継続して使用するにはライセンス料の支払い が必要です。 お試し期間中の機能制限はありません。(但し【配布】を除きます。) ◆ライセンス条項 一、開発ライセンス単位  開発者またはアドインの素をインストールするPCの内、少ない方の数のライセンスを必要とし  ます。つまり、一人の開発者が複数のPCにアドインの素をインストールして利用する、または  一台のPCにアドインの素をインストールして複数の開発者が使用するという場合は、一ライセ  ンスで構いません。 一、配布用ユーザーアドインの作成  ユーザーアドイン(アドインの素を利用して作成されたユーザー作成アドイン、以下同様)を  配布する場合は、【所定の方法】によってユーザーアドインを加工して下さい。その加工によ  りエンドユーザーは、開発用PC以外のPCでユーザーアドインを使用することが出来るようにな  ります。(【所定の方法】は、ライセンスキー送付時にお知らせします。) 一、ユーザーアドインの配布制限  開発ライセンスを取得するまで(無料お試し期間中)はユーザーアドインの配布は禁止します。  配布しても配布先での動作は保障されません。 一、アドインの素の二次利用の禁止  エンドユーザーが、配布されたユーザーアドインに変更を加えて別のユーザーアドインを作成  することは禁止します。変更するには開発ライセンスの購入が必要です。 ※ユーザーアドインの配布に際し、エンドユーザーに対してアドインの素のライセンスキーを提  示することは禁止します。(明らかに違法行為ですので当然ですが念のため。) 一、ユーザーアドインの使用ライセンス  ライセンスは上述の開発ライセンスのみ、ユーザーアドインの配布と使用に関してその数に制  限はありません。 ※エンドユーザーが、配布されたユーザーアドインに変更を加えることは基本的には出来ません  が、使用PCを開発用PC扱いにする、つまりエンドユーザーが開発ライセンスを取得すれば、当  然のことながら変更は可能です。また、その場合は、ユーザーアドインの配布に際して【所定  の方法】を適用する必要はありません。同じ開発用PC上でそのまま使用するのと同じことにな  るからです。 ◆お支払い お支払いは基本的にベクターのシェアレジでお願いいたします。 http://shop.vector.co.jp/service/servlet/NCart.Add?ITEM_NO=SR335140 但し、金融機関からの振込でもお支払いいただけます。その場合はソフト名と必要ライセンス数、 を明記の上、E-Mailにてお申し付けください。 折り返しライセンス料金、振込先口座番号を連絡いたします。 (振込み手数料はお客様のご負担になりますのでご了承ください。) お振込いただいた後、その旨をE-Mailにてご連絡ください。その後、ライセンスキーを送付させ ていただく、という手順になります。 (ベクターシェアレジの場合は連絡の必要はありません、システムによって自動処理されますので) ◎振込先金融機関:三菱東京UFJ銀行 ◆ライセンス登録方法 ライセンス料のお支払いをしていただきますと、ライセンスキーと共にその登録方法をご案内 させていただきます。 **************************************************************************** ●お問い合わせ **************************************************************************** ・電子メールにて承ります。 ・一般的な質問はいつでも受け付けます。  (但し、この説明書に書いてある、あるいは無料お試し期間中に【試せばわかる】ような   質問はご遠慮ください。) ・具体的、詳細な使用方法に関する質問は、お支払い手続きが完了してから承ります。 ・ライセンスを購入されている場合は、ご購入時のお名前とメールアドレスおよびお申込番号  をお知らせください。(銀行振込の場合はお申込番号はありません。) ・◆必ずOSとExcelのバージョンもお知らせください。 ・ご回答に多少時間がかかる場合がありますので、予めご了承ください。 ・お問い合わせ先   だるま(鈴木正国)   E-mail:daruma3.vbaアットマークoffice.tnc.ne.jp   (スパムメール対策です↑を「@」に変えてください。) 以上