顧客への月次報告用の資料を自動化したい、というオーダーがあり、データをピボットテーブルで処理するVBAを組んだことがある。


その際、Excel2003を使って作成した。が、他のメンバーのPCで動かすとエラーが出る事象に陥った。エラーが出るのはExcel2002。処理を追いかけると、ピボットテーブルの箇所。追いかけてもよく分からないので、実際に手作業で同様の処理を行うと、2002と2003で指定できることが違っていて、エラーが起きた、というオチだった。


 


顧客先は2003だったので事なきを得たが、ピボットテーブルも進化しているのだな、と感じた。


今の2007はまったく試していない・・。


実験しました。


Dir関数の引数ですが、簡単に言えば vbReadOnly はつけてもつけなくても同じで、あとは有効、すべてor条件である、ということでした。


例えば 「隠しシステムファイル」を探したいと、


s = dir(THisWorkbook.Path & "\" , vbHidden + vbSystem )


とすると、隠しシステムファイル以外に、隠しファイル、システムファイル、通常のファイル(読み込み専用も含む)、が引っかかってくる。


 


ファイル整理のため「フォルダが空ならそのフォルダを削除する」という処理を作ろうとしていたが、vbHidden + vbSystem + vbDirectory でフォルダの内容をチェックすればよさそうである。


→再起呼び出しで指定フォルダ配下のディレクトリ構造を取得し、メモリに溜めてフォルダ名文字列の長いものから処理していけば完成しそうである。


 


VBAで作らなくたっていいのだろうけれど、こういうことぐらいVBAで紹介しておかないと。


 


作成したら公開予定(って、入門者用にしかならないだろうけれど・・)である。




アプリケーションログを確保する基準を作成するにあたって参考になるものがないかと探したが、探し方が悪いのか見つからなかった。よって、暫定であるが作ってみた。

◇目的
本来的には「いつ、誰が、どの処理を実行したかの証拠」として記録しておく必要があるが、現段階では必要な部分の性能評価が行える情報を確保するものとし、どういうログをどのタイミングで確保するかの指針を定める。
なお、エラーログやデバッグログとは別の性格のものについてを定める。



◇取得箇所
・外部からのエントリポイント付近
   呼び出されたプログラムの先頭および末尾 が基本
・外部への呼び出しポイント付近
   呼び出す処理の前後 が基本
・その他必要な箇所 ※今回は実施しない
   処理負荷の計測目的 など。
   例)ファイルやデータベースへのアクセスの前後

◇出力する情報
・タイムスタンプ(可能な限りミリ秒)
・どの処理を行ったかが分かる文言( REQEST START  等 )
・レコードを特定するためのキーやIDなどの情報
・エラーログではないので、どのソースのどの行か、という情報は排除してよいと思う。

◇出力先
・テキストファイルに出力する。
・日付でローテートさせる。
・サーバーが複数台ある場合はログ記録先を特定のサーバーに集約した方が分かりやすいと思うが、ネットワーク負荷が大きい場合は空いている時間にログを集めるようにする。

◇出力内容の注意点
・極力半角英数で構成する。全角が必要な場合、文字コードは統一しておく。
・ログのフォーマットが統一されていることが望ましい。
・ログのフォーマットを変更する際に作業が最小限で済むようにしておくことが望ましい。
・どんな解析ツールを使うかも視野に入れる。改行コード( linux上はLF/Windows上はCRLF ) やタブが入っていると読めるのか否か、など。


もう少し丁寧に作ったのだが、消してしまった・・。別途PDFででも提供できればと思う。