◆日付入力2.xla 【機能】 カレンダーフォーム(祝日表示有)でセルへの日付入力を行なうアドインの雛形。 起動はセルのダブルクリック。 セルの種類は「指定セル」「項目名下」「セルの色」など。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セルのダブルクリックでカレンダーフォームを表示、年、月、を選択し、日ボタンクリックで 確定入力。 【解説】 日付入力.xlaでは、cCalenderクラスをcFunctionクラスで包み、DateInput関数として使用しま したが、今回はcCalenderクラスをそのまま使用し、祝日名も表示出来るようにしました。 cCalenderクラスをそのまま使用した場合の基本的な記述は下記のようになり、先のDateInput 関数よりはやや複雑になります。 Dim cCl As cCalendar Set cCl = cM.CalendarClass With cCl .PlainMode = False '★祝日表示あり★ .Left = セルLeft位置(要計算) .Top = セルTop位置(要計算) .Value = CDate(セル.Value) '初期表示日付 If .Show Then セル.Value = .Value '日付入力 End If End With 先のDateInput関数の基本的な記述は下記3行のみです。 Dim cFn As cFunction Set cFn = cM.FunctionClass cFn.DateInput ActiveCell ★祝日表示が不要(=【保守不要】)で記述を簡単に済ませたい時には、日付入力.xla(DateInput関数) を使用して下さい。 ★cCalenderクラスの説明(Help.xls)にも書きましたが「祝日」を利用する場合には必ずプログラム またはiniファイルなどの【保守】が必要になりますので、その点を理解した上でご利用ください。 (保守が必要になるのは私が作成したプログラムだからではありません。「祝日」の宿命です。) セルのダブルクリックによる起動に関しては前々項(カレンダーフォームによるセルへの日付入力) の説明を参照して下さい。
◆行列名表引き.xla 【機能】 1.極単純な表を用いた、cTableクラスの機能確認用サンプルプログラム 2.cTableクラスを使用した実用サンプルプログラム (DB形式データ=>表引き=>表の該当セルへ転記) 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 【実行方法】 ブックはダブルクリックで開き、VBE(Alt+F11)のコード画面に切り替える。 1.cTableクラスの機能確認 mGeneralモジュールを開き、Sub プロパティ確認()を実行する。 要所要所でSotpで実行が一時停止するので、その時のコードとシート画面を見比べて確認する。 2.実用サンプルプログラム mDbToTableモジュールを開き、以下のプロシージャを適宜実行する。 Sub CreateTestData1() '●1.新規ブックにサンプルデータ作成 Sub SetData1() '●2.値を転記(【cFunction.TableItemメソッド】を使用=低速) Sub ShuffleTable1() '●3.既存サンプルデータのシャッフル(実行結果の再検証用) Sub SetDataByClass1() '●4.値を転記(【cTableクラス】をそのまま使用=高速) 【解説】 cTableクラスの機能を理解していただくための説明用プログラムです。 そのままで何かの実用というプログラムではないので、メニュー関連の部分は省いています。 VBE画面で直接プロシージャを実行します。 cTableクラスは簡単に言って、行項目名と列項目名で表引きして交差セルへの参照を取得する ものです。Excelの表で「このような表引き」はよく行なわれるものですが、「このような表 引き」は直接は出来ない為、Index, Match, VLookUp などの関数を組み合わせて使用せざるを 得ません。 cTableクラスを使えば「このような表引き」が簡単に行なえます。 この機能の実現方法は二つあります。 一つは cFunction.TableItemメソッド、もう一つは cTableクラスを直接使用する方法です。 .TableItemメソッドは、cTableクラスを利用して作成した関数をcFunctionクラスに搭載して メソッドとしたものです。一回の実行毎にcTableクラスのインスタンス生成破棄を行なう為 低速ですが、cFunctionクラスの他のメソッド(関数)も同時に使用するような場合はこちら を使用すると便利です。低速といっても数十件程度の表引きであればほぼ一瞬で終わります。 セルとのデータ授受の速度(遅さ)に比べれば問題にならない速さです。 cTableクラスを直接使用する方法は極めて高速です。 上記、実用サンプルプログラムで処理データを一万件程度にして試したところ、.TableItem メソッドでは10数秒の処理時間が掛かりましたが、cTableクラスを直接使用すればほぼ一瞬 で完了しました。 多量のデータの表引き処理をする際にはcTableクラスを直接使用して下さい。 参考に、各々の簡単なコード例を以下に示します。 'cFunction.TableItemメソッドを使用 Sub 行列名で表引き() Dim cFn As cFunction Dim R As Range 'cFunctionクラスのインスタンス取得 Set cFn = SourceOfAddin.GetClass.FunctionClass '表引き Set R = cFn.TableItem(Range("A1:J100"), "だるま", #4/17/2014#, _ KeyTypeRow:=ktString, KeyTypeColumn:=ktDate, TextMode:=False) '該当セルがあれば If Not R Is Nothing Then '該当セルへの操作 R.Value = "ここ" R.Interior.Color = vbRed End If Set cFn = Nothing 'クラスのインスタンス破棄 End Sub 'cTableクラスを直接使用 Sub 行列名で表引き2() Dim cTbl As cTable Dim R As Range 'cTableクラスのインスタンス取得&プロパティ設定 Set cTbl = SourceOfAddin.GetClass.TableClass With cTbl .TextMode = False .KeyTypeRow = ktString '行の型は文字列型 .KeyTypeCol = ktDate '列の型は日付型 Set .Table = Range("A1:J100") 'テーブルの設定 End With '表引き Set R = cTbl.Item("だるま", #4/17/2014#) '該当セルがあれば If Not R Is Nothing Then '該当セルへの操作 R.Value = "ここ" R.Interior.Color = vbRed End If Set cTbl = Nothing 'クラスのインスタンス破棄 End Sub
◆日付入力.xla 【機能】 カレンダーフォームでセルへの日付入力を行なうアドインの雛形。 起動はセルのダブルクリック。 セルの種類は「指定セル」「項目名下」「セルの色」など。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セルのダブルクリックでカレンダーフォームを表示、年、月、を選択し、日ボタンクリックで 確定入力。 【解説】 cCalenderクラスをセルへの入力で使いやすくするために、cFunctionクラスにDateInput関数を 追加しました。 この関数を使用すれば、セルへの日付入力は次のような簡単な記述だけでカレンダーフォーム を使用した入力が出来ます。 Dim cFn As cFunction Set cFn = cM.FunctionClass cFn.DateInput ActiveCell しかしこれだけではプログラムの「起動」が困ります。どこかに「ボタン」を設置するか、起 動の為のメニューを追加するなどの対策が必要です。 そこで、セルのダブルクリックイベントをアプリケーションレベルで監視して動作させるよう に作成したのが本アドインです。 動作させる、ブック名とシート名の指定が出来ます。また、対象のセルの種類として「指定セ ル」「項目名下」「セルの色」などが選択できます。 これらの変更は、プログラム中に記述してある【要変更】という箇所を変更することで簡単に できます。 監視対象の切り替えは、本アドイン起動時と任意のシート切り替え時です。 プログラムを変更した後は、本アドインを再起動するか、監視対象のシートをアクティブでない 状態からアクティブに切り替えてください。(後者が簡単です。) 初期設定は「指定セル」で「B2,D2,J10:J15」としてありますので、この中のいずれかのセルの ダブルクリックでカレンダーフォームを開くことが出来ます。 なお「項目名下」というのは、例えば「*日付」という指定であれば、「開始日付」「終了日付」 などの下のセルをダブルクリックすることでカレンダーフォームが起動されます。
◆ブック処理の基本.xla 【機能】 アドインブックで他のブックを処理する時の基本的な処理方法のサンプル。 機能はサンプルとして、条件に該当するセルの色塗り。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニュー(Excel2007以降はアドインタブ)の[ブック処理]-[処理開始]を実行し、 処理対象ファイルを選択する。 結果は、セルの色塗りとメッセージボックスで表示される。 【解説】 今さらですが、アドインブックで他のブックを処理する時の基本的な処理方法のサンプルプロ グラムです。余分な雑音を排除して【基本的な処理方法】の解説に重点を置きつつ、メインの 処理(サンプル部分)は別プロシージャにしていますので、その部分のみを自分用に変更して 実用プログラムとするのも比較的簡単に出来ます。 既にいくらかのプログラムが書けるようになった方は「アドインブックで他のブックを処理」 といっても「そんなのはブックを開いて、処理して、上書き保存して閉じるだけで簡単ではな いか」と思われがちです。 ところが実用プログラムというのはそう簡単ではありません。 その対象ブックが既に開いているかどうかの確認が必要で、開いていればそのままその参照を 得る、開いていなければまず開かなければなりません。 さらに開く場合もファイル自体が在るかどうかの確認も必要です。 そして、頻度は稀かもしれませんが対象ブックと同名だが別フォルダのファイルが開いている、 という場合も考慮が必要です。 このように、実際には色々なチェックが必要になってきます。 そこでcGetWorkbookクラスの登場なのです。 本プログラムでは同クラスを使ってそのような種々なチェックを簡単に済ませています。 また、同クラスの機能は他にも色々あり例えば、処理ブックが既に開いていた時にはそのまま 開いたままにしておき、新たに開いたブックの場合は閉じるというようなことも一命令で出来 ます。
◆写真アルバム4.xla 【機能】 先にファイル名を取得、次にファイル名セルを【適宜配置】その後そのファイル名セル の下などに自動的に画像を読み込む。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[写真アルバム4] - [ファイルリスト取得]、- [画像読み込み] から実行。 【解説】 今までの写真アルバム(写真アルバム、同2、同3)は基本的に、フォルダを指定してそ の中の画像ファイルをすべてシート上に貼り付けるものでしたが、今回のプログラムは、 1.まずファイル名を取得(シート上に表示)し( [ファイルリスト取得]メニュー) 2.次にファイル名セルを手作業で【適宜配置】(削除・場所・順番入替など) 3.その後そのファイル名セルの下などに読み込む([画像読み込み]メニュー) という手順をとるものです。 つまり【必要な画像のみ】を【必要な場所】に読み込むプログラムになっています。 その要否、順番などの判断材料として、ファイル名取得時には更新日時とサイズも表示 されます。 [画像読み込み]ではファイル名セルのみが対象になります。更新日時、サイズなどの関 係の無いセルは無視されます。それらは残しておいても消去しても構いません。 取得したファイルリストの削除・場所・順番入替などの編集はそのシート内でなくても 良く、別シート或いは【別ブック】にファイル名をコピーして、そこへ読み込むことも 可能です。 (あらかじめテンプレートファイルを作成しておき、必要なファイル名セルのみをその テンプレートの必要な箇所にコピーして、という使い方も出来るという事です。) 画像の読み込み位置はファイル名セルに対して、「上」「下」「左」「右」「セル上」 が選べます。初期値は「下」つまりファイル名セルの下のセル上に画像が読み込まれま す。 画像は指定した縦横何cmのサイズ以内の大きさで表示されます。(縦横の比率は保持さ れます。)又、読み込んだ画像の圧縮も可能で、表示された大きさに圧縮出来、ファイ ルサイズの縮小が出来ます。 読み込み位置の「上,下,左,右,セル上」、縦横何cm、画像を圧縮するしない、の指定は 実行時ではなくプログラムコード上で指定しています。mMain.画像読み込み の最初の 部分で定義していますので変更は簡単です。 なお、画像ファイルを読み込むにはそのフルパスが必要ですが、セル内にはファイル名 しかありません。パスの部分はファイルリスト取得時に指定したフォルダのパスがアド インファイル内部に一時的に保持されていてそれが使用されます。
◆ファイルリスト取得.xla 【機能】 フォルダを選択、パターンを指定して検索し、ファイル名・フルパス・更新日時・サイズ の一覧表をワークシート上に表示する。サブフォルダ検索の指定も可能。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニュー(Excel2007以降はアドインタブ)の[FileFlist]-[実行]を実行し、 フォルダ選択、サブフォルダ検索の有無、検索パターンの指定、をする。 結果は新規ワークブックに表示される。 【解説】 このプログラムは、一つのフォルダを選択し、その中のファイルリストをワークシート 上に表示するものです。色々なファイル操作をする上でフォルダ内のファイル一覧が必 要になる場面は経験上多々あります。 cFileListクラスとcFileList2クラスはその一覧を取得する為のクラスですがこれらはク ラスですのでプログラム内に組み込んで使うには便利なのですが、ちょっと手軽に一覧 が欲しいと思った時に、その都度、例え簡単な物でもプログラムを作るのはちょっと面 倒です。 そこで「ちょっとファイルリストが欲しい」と思った時に手軽に使えるようにと、作っ たのが本サンプルプログラムです。 ユーザーフォームなどを使ってあまり作り込み過ぎると、サンプルとしての意味が薄れ てしまい(プログラムを理解しにくく改造しにくくなり)ますので、選択や入力は既存 ダイアログやMsgBox関数、InputBox関数を使い、極力シンプルなプログラムにしました。 でも、使い勝手が悪くならないようにも工夫しましたので、実用面でも十分使用に耐え るものと思います。 出力に関してはワークシート上への表示のみとしました。並べ替えはあえてしていませ ん。サブフォルダまで検索した場合、並べ替えをすると反って順番が乱れてしまう場合 がある(※1)ことと、ワークシート上にリストがあればExcelの標準機能で並べ替える のは簡単だからです。 ※1 例えば、ファイル名順にすると、フォルダパスを無視してファイル名順に並びますので フォルダの順番はでたらめになります。また、フルパスで並べ替えた場合、あるフォル ダの下に、直下のファイル名とフォルダ名が入り乱れて並ぶことになります。 テキストファイルとしてリストが欲しい場合もあるかもしれませんが、これもあえて追 加していません。理由は、プログラムをシンプルなものにしたかったことと、ワークシ ート上にリストが出来ていればテキストファイルへは、メモ帳を開き、単純にコピペで 簡単に作成することが出来るからです。 最後に「ファイルリスト比較」と同様の【重要な注意】です。 【重要な注意】 本プログラムとcFileList2クラスではエラーが発生する場合があります。それはアクセス 権限の無いフォルダへアクセスしようとした時です。これは当然のことで、むしろそれを 無視してどこでもアクセスできるプログラムなどというものは基本的に作成してはいけま せん。 ドライブC以下のすべてのサブフォルダを含む、というような指定をすればほぼ間違いなく そのエラーに引っかかります。 でも、そんな無茶な指定をしないで普通に使用しているフォルダを指定するだけであれば エラーになることはまず無いと思いますので、ご安心ください。
◆Application_FileSearch代替えクラス2.xla 【機能】 Excel2007以降で使用できなくなったApplication.FileSearchの代替えクラスと、 Excel2003以前に作成したプログラムからの移行方法の説明。 (※配布先の動作PC上にライセンス登録が必要) 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 「Application.FileSearch代替えクラス」と同じ。 【解説】 基本的には「Application.FileSearch代替えクラス」と同じですのでそちらを参照して下 さい。 違いは、配布先の動作PC上にライセンス登録が必要である、しかしその代わりに配布の為 の余計な作業が必要なく、移行作業もより簡単に出来るようにコードもシンプルになって いるということです。 アドインの素を利用して作成したユーザーアドイン(ユーザー作成のアドイン+アドイン の素)は、基本的には配布先にライセンスが必要ありません。その代わりに配布前にユー ザーアドインには所定の操作を実施する必要があります。 しかし、配布先のPCがライセンス登録されたものであればその所定の操作も必要ありませ んし、そのための余計なコードも必要ありません。このファイルはその余計なコードを省 いてシンプルにしたものです。
◆Application_FileSearch代替えクラス.xla 【機能】 Excel2007以降で使用できなくなったApplication.FileSearchの代替えクラスと、 Excel2003以前に作成したプログラムからの移行方法の説明。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 Application.FileSearchを使用した以前のプログラム例と、その修正後の例が掲載されて いるので、このブックに実行コードを組み込むか、リマークに記した説明文にしたがって 別ブックを作成する(現行ブックを修正する)。 代替えクラスのとりあえずの動作確認は、掲載されているプログラム例を動作環境に合わ せて一部分(フォルダの指定やファイル種別の指定など)を修正すれば可能。 なお、当然のことながら以前のプログラム例はApplication.FileSearchを使用しているの で、Excel2007以降ではそれは実行不可。Excel2007以上の環境ではその部分はリマークに してから実行する。 【解説】 アドインの素にはアドインサンプル.xlaというサンプルプログラムファイルを添付してい て、その中に【cFileSearchLight】というクラスがあります。 このクラスがそもそもApplication.FileSearchの代替えとして作成したものです。 アドインサンプル.xlaの中にその使用例は一応書いてはありますが、その他の機能が色々 あるため、このクラスについての詳細な説明(従来のプログラムからの具体的な代替えの 仕方の説明など)はしていません。 そこで、本ファイルではこの代替えクラスだけを切り離して【cFileSearch】とし、詳細 な説明も加えて従来のプログラムからの移行がし易いようにしました。 詳細な説明は、プログラム例を記載した標準モジュールのトップにリマーク文で記述して あります。 本ファイルに実際の処理プログラムを追加するか、逆に既存の従来のプログラムに変更を 加えてApplication.FileSearchを使用した部分を修正するか、どちらでも出来るように説 明を記してあります。 【cFileSearchLight】(アドインサンプル.xla)と【cFileSearch】(本ファイル)の違い ・基本的には同じものです。 ・クラス名のLightは、最初は本来のApplication.FileSearchの機能に比べて足りない部分 が多々あるので控えめにLightと付けたのですが、実際に使用されているコードをネット などで見ると、足りないと思っていた部分はほとんど使われている様子がありません。 そこで、本ファイルでは名前からLightは取ってしまいました。 (機能としては、複数種類のファイル指定やサブフォルダ検索、さらに検索ファイルの 並べ替えなど、実用上充分な機能を備えています。) ・SelectFolder2メソッド(フォルダ選択ダイアログ) 【cFileSearchLight】では古い形式のダイアログ(SelectFolderメソッド)を使用して いましたが【cFileSearch】では、新しい形式の操作しやすいダイアログを追加しました。 ただ、古い形式にも利点はあります。どちらの形式でも初期表示のフォルダを指定でき るのですが初期表示の後、新しい形式のダイアログでは自由に他へ移動できてしまいま すが、古い形式のダイアログでは初期表示のフォルダ以下の階層しか選択できないよう に【制限】することが出来ます。
◆メール一括送信A.xla(アドイン本体) ◆メール一括送信A.xlt(テンプレート) 【機能】 メール送信クラス(cMessage)を利用した【本格的な】メール一括送信プログラム。 「アドインの素」添付の同様プログラムに対して、メールへの添付ファイルの設定 の仕方を変更。 (一箇所でまとめて指定し、各行では番号で指定 ===> 各行毎に選択設定に変更) 【セットアップ】 システムフォルダ以外の任意の同一フォルダ内に置く。 (メール一括送信A.xlaをアドインとして登録するしないは任意。しない場合はダブル クリックで開く。) 【実行方法】 基本的な使用方法は、ワークシートメニュー(Excel2007以降はアドインタブ)の [一括送信A]-[ヘルプ]に記載。テンプレートファイル(メール一括送信A.xlt)をダブル クリックして新規ブックを開き使用する。編集済の同ファイルを保存して再利用も可能。 【解説】 このプログラムは「アドインの素」添付のメール一括送信.xlaを一部修正して作成しま した。修正箇所はメールへの添付ファイル設定の仕方です。 元のプログラムでは、添付ファイルは一箇所でまとめて(とりあえず5個以内)指定し ておき、各送信先の行では番号(1〜5)を指定するという仕様になっていました。 本プログラムでは、番号ではなく各行の「添付ファイル」欄で直接指定(ダイアログで 選択)するようにしました。 元のプログラムでは、すべての送信先に同じような添付ファイルを送ることを想定して いましたが、本プログラムでは送信先毎に別々の添付ファイルを送ることを想定してい ます。 各行の「添付ファイル」欄は一応ダイアログで選択できるようになっていますが、手作 業またはプログラムによる直接入力も可能です。 送信先の「宛名やメールアドレス」と「添付ファイル名」の間に一定の関係性があるの であれば、そのどちらかをいくつか選択したらもう一方を自動で決定し、表を埋めると いうプログラムを追加すれば、非常に操作性の良い一括送信が可能になります。 たとえば、あるフォルダを決めておき、そのフォルダに送付すべきファイルをいくつか 入れておけば、あとは「実行」するだけで必要な個所に必要なファイルが送付されると いうプログラムを作るのも比較的容易です。 なお、テンプレートファイルではシート上の「黄色いセル」をボタン代わりに使ってい ます(右クリック又はダブルクリック)が、テンプレートファイル自身にはプログラム は一切記述してありません。すべてメール一括送信A.xla側で制御しています。
◆ファイルリスト比較.xla 【機能】 指定した二つのフォルダを検索し、ファイル名と更新日時を比較、追加分、更新分、削除 分などを抽出する。サブフォルダ検索の指定も可能。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニュー(Excel2007以降はアドインタブ)の[CmpFlist]-[実行]を実行し、 フォルダA(Activity)、フォルダB(Backup)を選択する。 【解説】 このプログラムは、現在使用中の(日々作業を行なっている)フォルダとバックアップ フォルダを比較して、バックアップ対象や削除対象のファイルを検索するものです。 但し、実際のバックアップ(FileCopy)や削除(Kill)のコードは含まれていません。 検索結果を配列で取得し、ワークシート上にそれを表示しています。 使用しているクラスは、cFileList(ファイルリスト取得)、cMatchArray(配列比較)、 cFunction(各種関数)です。 バックアップ対象(Aフォルダ側の追加分と更新分)を実際にバックアップ(FileCopy) するのは比較的容易です。対象のフルパスを含む配列が取得済なわけですから。 ただここで、FileCopy時に複数階層のフォルダを一気に作成する必要が生じる場合があり ますが、通常のフォルダ作成命令(MkDirステートメント)では最終の一階層しか作成で きません。 その場合は、cGetAttrのMakeDirメソッドを使用して下さい。複数階層のフォルダを一気 に作成することが出来ます。 なお、このプログラムで実際のバックアップコピーの機能を含めていないのは、ファイル のコピーや削除といった動作は重要な結果を招くからです。その類のプログラムは慎重に 慎重を重ねて作成する必要があります。 一般的に既成のソフトは【自己責任で】使用して下さい、ということになっていますが、 案外平気でバンバン使っている方が多いと思います。そんな状況下で「サンプル」で 多数のファイル操作を含むプログラムを提供するのは危ないという判断をしました。 このサンプルプログラムを改変してファイルコピーなどの機能を追加する場合は、本当に 慎重に行い、【自己責任】で実行して下さい。 それと、基本的にはバックアップ対象ファイルを検索するというプログラムですが、そん なこととは全く関係なくただ単に任意の二つのフォルダを指定することも出来ます。 当然ながらその場合は通常は一致するファイルがありませんので、各々のファイルリスト を表示するだけという結果になりますが、そういう使い方も【有り】かなと思います。^d^ 【猶予時間】について プログラム内に下記記述があります。 Dim ExtensionTime As Date '猶予時間 ExtensionTime = TimeSerial(0, 0, 5) 通常、FileCopyでファイルをコピーすると更新日時もそのままコピーされて、コピー元と バックアップ先のファイルの更新日時は完全に同一になるはずです。ところがそうならない 場合があるのです。 経験上、1〜2秒プラスしたりマイナスしたりする場合があるようです。そうなると更新日時 の完全一致で比較していたのではNGです。そこで「猶予時間」というのを設け、 コピー元日時 > バックアップ先日時 + 猶予時間 のファイルを「更新したファイル」と判断するようにしています。 猶予時間は経験上から一応5秒としていますが、ご自身の環境で確認して適当に変更して 下さい。 最後に【重要な注意】です。 本プログラム及びcFileListクラスではエラーが発生する場合があります。それはアクセス 権限の無いフォルダへアクセスしようとした時です。これは当然のことで、むしろそれを 無視してどこでもアクセスできるプログラムなどというものは基本的に作成してはいけま せん。 ドライブC以下のすべてのサブフォルダを含む、というような指定をすればほぼ間違いなく そのエラーに引っかかります。 でも、そんな無茶な指定をしないで普通に使用しているフォルダを指定するだけであれば エラーになることはまず無いと思いますので、ご安心ください。
◆特定ブック用アドインの雛形2.xla 【機能】 アクティブなブックが変わると、それぞれのブックに応じた独自設定メニューを表示するアドイン の雛形。 実用機能は未搭載。実行コードはメッセージボックスのみ。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 とりあえず2種類のブック(初期値は"B*" と "T*.xls")に対応。 対象の種類のブックがアクティブになると設定したメニューが表示される。 "B*" に対してはワークシートメニューに[特定ブックB]、 "T*.xls" に対してはセル右クリックメニューに[特定ブックT]が表示される。 【解説】 特定のブックに対応したメニュー表示のサンプルは、特定ブック用アドインの雛形.xlaで紹介 していますが、本件は2つ(2種類)以上のブックで切り替える場合の例です。 2つ以上で切り替えを行なう場合は、cMenuクラスの変数をその数分使用します。 初期設定では、cMn, cMn2 の2つのみ定義されています。3つ以上使用する場合はcMn3などと 追加するか、配列を使用するなどしても良いでしょう。
◆特定ブック用アドインの雛形.xla 【機能】 特定のブックがアクティブな時のみ、独自設定したメニューを表示して実行できるアドイン の雛形。 実用機能は未搭載。実行コードはメッセージボックスのみ。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 処理対象の特定ブックの初期設定名は「Target.xls」。 Target.xlsを開くとワークシートメニューとセル右クリックメニューに[特定ブック]メニュー が表示される。 【解説】 特定のブックに対してだけメニューを表示する機能の紹介はアドインサンプル.xla(アドイン の素の全機能のサンプルを掲載したブック)でもしていますが、色々な雑音に紛れて分かりに くくなっているかもしれません。 本雛形では雑音を排除して、【特定ブックによるメニューの切り替え】のみの機能をシンプル に実現しています。 勿論、本雛形を利用して【メニュー切り替え】について理解していただいた後は、他のサンプ ルプログラムを参考にするなどして、アドインの素のすべての機能を組み込んだアドインにす ることが出来ます。 特定ブック用アドインの雛形、だからといってそれしかできないわけではありませんので念の ため。(これは他の雛形についても同じです。)^d^
◆複数ブック処理の雛形.xla 【機能】 複数のブックに対して処理を繰り返すアドインを作成する為の雛形。 実用の機能として、文字検索機能を搭載。 進行状況表示のためのプログレスバー表示機能もあり。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニューの[Books]-[実行]を実行。 【解説】 複数のブックに対して同じ処理を繰り返すというケースはよくあることです。 本サンプルはその雛形として、複数のブックから指定文字列を検索する例を組み込みました。 検索処理の部分はなるべく【ブックの繰り返し】とは分離するようにして、雛形として利用 しやすい形にしました。 それでも処理の流れ上やむを得ずメインプロシージャ内に下記部分が記述されています。 1.'★★★前処理(検索文字入力)★★★ 2.'★★★実処理(アクティブブックに対する処理)★★★ 3.'★★★後処理★★★ 2.はブックのループ内で実処理を行なう別プロシージャをコールする部分なので必須ですが、 1.と3.は実際の処理内容に応じて不要なら削除して下さい。 処理するブック(ファイル)の選択は、フォルダを選択してその中のファイルを検索し対象に するという形式をとっています。 ファイルを、これとこれというように複数選択するというやり方もありますが、その場合、 選択ミスが生じたりする可能性があります。さらに処理の順番が重要な時は、選択順に処理さ れるという保証もありませんので不都合です。 本サンプルのファイルリストの取得では、ファイル名順、更新日付順などで取得することが 出来ます。 本サンプルでは、リストに取得したブックを順に【アクティブ】にしてから処理しています。 ですので、たとえばアクティブブックに対して実行した【マクロの記録】コードをほぼその まま利用するだけで複数のブックに対してその処理を実行するアドインブックを作成すること が簡単に出来ます。 ※この時のマクロの記録のコツのひとつは、まず本当の処理対象セル以外のセルを選択する ことから記録を始めることです。
◆右クリックメニューの雛形.xla 【機能】 表題通りの、右クリックメニューを有したアドインを作成する為の雛形。 実用の機能は未搭載。 初期設定はセル右クリックメニューからの階層メニューになっており、実行コードは メッセージボックスのみ。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[右クリックメニュー]からメニューの動作確認が可能。 【解説】 アドインの素自体、元々メニュー構成がし易いようにしたクラスを備えているのですが、 それでもやはり自在にメニューを構成するのは、特に初心者の方には難しい作業です。 そこで、少しでも簡単に独自のメニュー構成が出来るように、これでもかというくらい の解説を付け、さらにメニュー構成に関係の無い【雑音】的な部分は一切省いた雛形を 作成してみました。 コード自体への注釈もふんだんに付けました。 m手順書モジュールに、注釈文で0から順に手順を書きましたので、その通りに実行して いただければ独自のメニューを持つアドインファイルが作成できるようになっています。 なお、表題は「右クリックメニュー」ですが、実は右クリックメニューもメニューバー もツールバーも皆同じCommandBarオブジェクトであるため扱い方はほとんど同じです。 ということで、本雛形は「右クリックメニュー」と言いながらもすべてのメニューに 対応しています。
◆秒速ダブリ出しLight2.xla 【機能】 指定のセル範囲同士の値を比較し、重複または不一致を高速抽出する。 比較方法は、バイナリモードまたはテキストモードのいずれか。 結果表示は、セルの色塗りのみ。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[MatchL2]-[重複抽出]、[不一致抽出]を実行。 【解説】 このプログラムは「秒速ダブリ出しLight」を改良して、列同士ではなくセル範囲同 士の値を比較するようにしたものです。 勿論のことですが、セル範囲同士の比較といってもそれぞれの相対位置同士で比較する ような単純なものではありません。言わば総当たり方式的な比較であり、各セル範囲内 の位置は任意です。 この仕様は「秒速!ダブリ出しII」「秒速ダブリ出しLight」から継承しています。 結果表示は、とりあえずセルの色塗りのみとしていますが、セル位置(Range)が取得 出来ているわけですから、それをどう料理するかはお好みで自由に変更できます。 なお、テキストモードでの比較では、大文字と小文字、全角と半角、だけでなくひらが なとカタカナも区別なしで同じものとして比較しますので、その点はご注意ください。 この仕様は「秒速ダブリ出しLight」も同じです。
◆秒速ダブリ出しLight.xla 【機能】 指定の一列同士の値を比較し、重複または不一致を高速抽出する。 比較方法は、バイナリモードまたはテキストモードのいずれか。 結果表示は、セルの色塗りまたは右のセルにフラグを立てる、のいずれか。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[MatchL]-[重複抽出]、[不一致抽出]を実行。 【解説】 このプログラムは「秒速!ダブリ出しII」の主要部分を再現したものです。 主要部分だけですが、結構実用的なプログラムに仕上がっていると自負しています。^d^ ところで「秒速!ダブリ出しII」も一応他のプログラムへの組み込みを可能としていま すが、正直結構面倒です。 今回は「cMatchArrayクラス(配列どうしの高速比較)」を使用していますが、これは 「秒速!ダブリ出しII」の心臓部の「高速比較アルゴリズム」を採用していますが、 コード自体はほぼ一から書き直してクラス化したものです。 ですから、本サンプルプログラムは「秒速!ダブリ出しII」と同じ高速処理を実現しつ つよりカスタマイズし易いものになっています。 比較方法等の「設定値」は、こちらもユーザーフォームなどを使わずにMsgBoxのYes,No で聞く、簡易型としてカスタマイズしやすくしています。 今回のサンプルプログラムでは「設定値」はメモリー上に保持されるだけですが、テキ ストファイルに書き込み、次回実行時にも値が保持されるようにすることも簡単です。 それにはcMsIniクラスを使うと便利です。使用例はアドインサンプル.xlaのmSplit_ini モジュールのコード例を参考にしてください。
◆写真アルバム3.xla 【機能】 指定フォルダ内の画像ファイルを、既存シートの任意の行列間隔の場所に貼り付ける。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[写真アルバム3]-[読み込み]を実行。 【解説】 このサンプルは、よりカスタマイズし易くを心掛けて作成しました。 各種の設定値はプロシージャの先頭に定数でまとめてありますので、変更は簡単です。 セルの幅や高さはプログラムでは変更しません、必要であれば予め調整しておいてください。 画像の読み込みはファイル名順、貼り付けは左上から右へ、そして次の行の左といった感じ になりますので必ずしも意図した位置に画像が読み込まれるとは限りません。 画像位置の修正は、まず手作業で画像の左上の角が目的のセル内に入るように移動します。 すべて移動し終えたら、[位置合わせ]-[すべて]を実行します。 画像の左上位置がセルの左上に合わせられます。
◆写真アルバム2.xla 【機能】 指定フォルダ内の画像ファイルを、既存シートの【結合セル】上に貼り付ける。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[写真アルバム2]-[読み込み]を実行。 【解説】 メニューはセルの右クリックメニューと画像の右クリックメニューとしました。 ただし、Excel2007以降では仕様変更により上記の画像の右クリックメニューは無効にされてしま いました。>< 基本的には指定フォルダ内の画像ファイル数と、読み込む結合セルの数は合わせてください。 数が違う時は少ない方で終了します。 画像の読み込みはファイル名順、貼り付けは左上から右へ、そして次の行の左といった感じになり ますので必ずしも意図した位置に画像が読み込まれるとは限りません。 画像位置の修正は、まず手作業で画像の左上の角が目的の結合セル内に入るように移動します。 すべて移動し終えたら、[位置合わせ]-[すべて]を実行します。 結合セルに合わせて画像の位置(中央)と大きさが修正されます。
◆写真アルバム.xla 【機能】 指定フォルダ内の画像ファイルを、新規ブックのシート(セル)上に貼り付ける。 ・読込セルサイズの指定:極小、小、中、大、特大、任意サイズ指定 ・折返し列数の指定:1〜100 ・画像圧縮の指定:読込サイズに圧縮、元サイズに対して何%の圧縮 ・ファイル名表示有無 ・拡大縮小機能:画像クリックで元サイズ<==>読込サイズ 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 セル右クリックメニューの[写真アルバム]-[標準]、[固定サイズ]、[列数指定]、等を実行。 【解説】 まず、メニューはセルの右クリックメニューのみとしました。 Excel2007以降では「ワークシートメニュー」と「ツールバー」はリボンの中に吸収されてしまい、 Excel2003以前のような使い勝手が無くなってしまいました。 そこで、本プログラムでは本来の右クリックの使い方(その対象に対して動作するメニュー)とは 違いますが、使い勝手の良さと、アドインの素を使って右クリックメニューのみを表示するやり方 の例という意味で、メニューはセルの右クリックとしました。 次に各種指定についてですが、そのまま使える実用的なという意味ではユーザーフォームを 使用するのが理想なのですが、そうすると結構複雑になってしまい、【カスタマイズ】という 点からは扱いにくいものとなってしまうのです。 そこで、なるべく実用的かつ【カスタマイズ】がしやすいように工夫しました。 まず、複数画像読み込みの本体プロシージャは、mLoadPicture.LoadPicturesに全機能を集結しま した。各種設定値を引数としてこのプロシージャをコールすればすべての機能を実現できるよう にしたのです。 そして、mMainモジュールに「標準」「固定サイズ」「列数指定」などのプロシージャを作り、 メニューからはこれらをコールするようにしました。 例えば「固定サイズ」なら、極小から特大の内のどれかを選択してLoadPicturesをコール、 「列数指定」なら列数を入力してLoadPicturesをコールといった具合に、一つのメニューで一つ の設定をしてから画像読み込みを実行するようにしました。 各設定値は「残る」ようにモジュールレベルで宣言していますので、実行する毎に設定値は残って 行き、結果として色々な設定での実行が可能になっています。ちなみに「標準」は設定値を初期化 して実行するプロシージャです。 このような作りになっていますので、とりあえず実用としても使用できますし、もし本格的に ユーザーフォームを使用した設定画面を作成するのであれば、【必要な設定項目のみ】について 画面作成して設定値を取得し、LoadPicturesに引数を渡すようにするだけで、お好みの形に 【カスタマイズ】することが出来ます。 【圧縮と拡大縮小について】 セル上に読み込んだ画像はそのセル内に収まるように、見た目の大きさ(サイズ)は調整されます が、その実体(元画像の解像度と大きさ)はそのままの状態で貼り付けられます。 ここで拡大縮小機能を使用すると、画像をクリックする毎に、元の大きさ<==>貼り付けたサイズ と切り替わります。(元画像の解像度と大きさの情報が残っているから出来ます。) 圧縮機能を使うと画像貼り付け時に(大きさを)圧縮することが出来ます。 %による指定で、例えば50%と指定すると元の大きさに対して縦横半分の大きさに圧縮します。 特別に、0%と指定すると貼り付けたサイズに圧縮します。 圧縮機能を使うことによりファイルサイズを縮小することが出来ます。
◆ブックの結合.xla 【機能】 指定フォルダ内の全ブックのシートを一つのブックにまとめる。 ブック内のシートを並べ替える。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニューの[ブック結合]-[ブック結合]または[シート並べ替え]を実行。 【解説】 ブック結合、としてはとりあえず各ブックの1シートめを対象にしていますが、すべてのシート を対象にすることも簡単で、wbTmp.Sheets(1).Copy の(1)を削除するだけです。 シートの連続コピーがExcelを不安定にさせるのか、シート数が多すぎるのが問題なのか、はたまた 私の環境が悪いのか分かりませんが、大量のブック(シート)を対象にするとExcelが落ちたり、 エラーにならなくても途中まで実行した状態で終わってしまったり、ということがありました。 概ね50ブック、各1シートぐらいであれば何度やっても問題なく実行できました。 ということで、ブック数、シート数には注意して実行して下さい。 ブックの処理順は「ファイル名順」「更新日付順」が選択できます。 時間のかかる処理なので、プログレスバーも表示しています。 シートの並べ替えでは、基本的にブックの結合とは関係なく、アクティブなブックのシートの 並べ替えを行います。 通常は名前順に並べ替えますが、シート名が数字のみの時用に、数字を数値として並べ替える ことも出来ます。 名前順 「1」「10」「11」「2」「3」 数値順 「1」「2」「3」「10」「11」
◆テキストから行抽出.xla 【機能】 テキストファイル(*.txt)からKeyWordを含む行を抽出し、別テキストファイルを作成する。 【セットアップ】 システムフォルダ以外の任意フォルダに置く。 (アドインとして登録するしないは任意。しない場合はダブルクリックで開く。) 【実行方法】 ワークシートメニューの[行抽出]-[テキストから行抽出]を実行。 【解説】 アドインの素に添付されている、アドインサンプルLight.xlaをベースにして作成したプログラム で、メイン部分は40行程度の極簡単なものです。 それでも動作速度は高速で、数万行のデータ処理でもほんの1秒足らずでした。もっとも、処理 が高速な要因の一つは相手がテキストファイルというのもありますが。^^; 簡単なプログラムですのでカスタマイズも容易に出来るかと思います。 プログラムでは出力ファイル名は入力ファイル名に"_Get.txt"を追加していますが、もちろん これも適当に、例えば固定ファイル名、あるいはユーザーに選択入力させるなど、自由に簡単 に(腕次第かな?)変更出来ます。