DirTools FAQ

Home What's
New
Site
Concept
生産性向上
基本テクニック
トラブル回避
テクニック
生産性向上
リンク
personal.xls
強化講座
生産性向上
ツール
Site Map Coffee
Break
Guest
Book
地球風
画像館
Q&A Salon
EXCELの質問はこちらへ


利用者の方々から寄せられた質問について

03/14/1999 -

 4GBを超えるファイルのサイズが正しく表示されていません。 
 

 ファイルのサイズはVBAのFilelenという関数を使用して求めていますが、この関数の戻り値は「長整数型(Long型)」で返ります。Long型は、-2,147,483,648 〜 2,147,483,647の範囲の整数を扱えるデータ型です。つまり、−2ギガから+2ギガの値しか扱えません。そのため、ファイルサイズが2GBを超えた場合にはFilelenがマイナスの値を返して来ることを利用して、Ver2.7では計算で正しいファイルサイズに変換するように修正していました。

 ただしこの修正方法が有効なのは、ファイルサイズが4GBまでの場合となります。4GBを超えた場合、Long型変数の4バイト(32ビット)ではそもそもファイルサイズの数値を扱えなくなるため(4GBを超えているのか8GBを超えているのかといったことが判別できない)、正しいファイルサイズを表示することができません。VBAの仕様がPCで扱うファイルサイズの拡大に追いついていない状況です。

 ということで、いまのところこの状況を改善することが出来ません。申し訳ありません。
 
   

 DirToolsをタスクに登録して使いたいのですが、タスクに登録してもどうしても半自動作業になってしまいます。完全自動化はできませんか?
 

 一度調査を終えたDirToolsを用意しておいて、その「再調査」をタスクで自動的に処理させたいということだと思います。
現在のDirToolsは手動操作を前提に作っていますので、「高速モード」にするか?のメッセージや「調査終了」のメッセージを表示するようになっています。

 このメッセージを出さないモードを用意することは、技術的には問題ありません。そうすれば、「再調査」機能を呼び出して自動で実行させることは可能になります。しかし、EXCEL2000の場合は、「ツール(T)」「マクロ(M)」「セキュリティ(S)」で表示されるセキュリティダイアログボックスで、セキュリティレベルを「中(M)」にしているとDirToolsを読み込むときにEXCELから確認メッセージが表示されるため、結局は完全自動化になりません。(これを「低(L)」にしておけばメッセージは表示されませんが、マクロウィルスに対して無防備になるのでお勧めできません)

 したがって、完全自動化は難しい状況です。
 
   

 非力なマシンだとマクロの実行に非常に時間がかかるのですが、マクロに画面更新を止める命令(ScreenUpdating = False)を入れてもらえませんか?
 

 じつは、ScreenUpdating = False 命令はこまめに入れてあります。画面更新を止めた状態でフォルダ・ファイルの調査結果をシートに展開していき、調査対象フォルダが変ったときに一瞬画面更新を復活させて表示させ、また画面更新を止めて調査を継続する、という処理を繰り返しています。

Ver2.3
では内部ロジックの改善で10%ほど処理速度を向上させていますが、それでもドライブまるごとの調査などを行う場合には処理時間が長くなってしまいます。「高速モード」として、調査終了まで画面更新を一切行わない調査方法も選択できる機能を、次バージョンで追加したいと考えています。

Ver2.4 (H13.12.15公開)で「高速モード」を用意しました。6000行ほどの調査で約35%の高速化を実現しました。さらにVer2.6 (H15.6.7公開)でも内部ロジックを改善し、Ver2.5比で約30%の高速化(約1万行の高速モードでの調査の場合)を実現しています。
(なお、高速化の比率は開発者のPC環境での測定によるもので、環境によっては同様の結果にならない可能性もあります)
 
   

 マクロに改造を加えたいのですが、可能ですか?
 

 同梱のReadme.txtにも記載していますが、改造はお断りしています。
DirToolsのマクロはパスワードを設定していますので、見ることが出来ないようになっています。一部のユーザーの方からマクロを追加・変更したいというご要望を頂きましたが、DirToolsは今後も改良や機能追加を行っていく予定ですので、マクロそのものにユーザーの方が手を加えることはお勧めできません。
 ただし、DirToolsのシートを活用した外付けのマクロや、別ファイルからDirToolsのマクロを起動するようなマクロを作成することは全く問題ありません。
 
   

 EXCEL 2000 で動きますか?
 

 Windows 98 + EXCEL 2000 の組み合わせで稼働確認しています。特に不具合は発見されていませんので、Ver 1.5 から動作環境に追加しました。

 Ver2.6では、WindowsNT4.0+Excel97、Windows2000+Excel2000、WindowsXP Pro+ExcelXPで稼動確認しています。
 
   

 EXCEL 2000 で動かないのですが。
 

 EXCEL 2000 では、マクロのセキュリティレベルの設定方法によってはマクロが読み込まれない場合があります。(ExcelXPでも同様です)
 具体的には、「ツール(T)」「マクロ(M)」「セキュリティ(S)」で表示されるセキュリティダイアログボックスで、セキュリティレベルが「高(H)」になっていると、マクロが自動的に実行不可になってしまいます。「中(M)」に設定してから再度DirToolsを読み込んでください。
 
   

 拡張子が入ったセルをダブルクリックして、関連付いたプログラム名を表示する機能がありますが、正しく表示されないことがあります。
 

 拡張子に関連付いたプログラム名の表示には、FindExecutable という Win32API を使用しています。
この FindExecutable 関数は、中途に空白を含む長い名前のフォルダの場合に正しい値を返さないケースがあります。はじめはDirToolsのバグかと思いましたが、開発にあたって参考にしている「VBAユーザーのためのWin32APIプログラミングガイド」という本のP145Memoにも報告されていました。

 例としては、C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE という様な長くて空白を含むパス・ファイル名の場合は正しく表示されないケースがあります。

 全てのケースは解決していませんが、可能な限り正しく表示されるように改修しました(Ver1.5より)。
 
   

 「調査」ボタンをクリックすると「フォルダの参照」ダイアログが開きますが、この機能はEXCEL VBAだけで実現できるのでしょうか?
 

 フォルダの参照ダイアログの表示には、 Win32API を使っています(SHBrowseForFolder)。他にも、プログラムを起動したりエクスプローラを起動するのも Win32API を使ってます。ということで、普通のVBAよりはちょっと凝ったことをやっております。
 
   

back

Google
  Web excel7.com