百ます計算など、別に新しい概念ではないが、家庭で作るとなると面倒なものである。


そこで簡単な計算を自動生成できたらその面倒さもないかと思い、作ってみた。まずは掛け算の百ますである。


簡単に作って配布しよう、と思っていたが「ここで偉そうなことを書いている以上、VBAも最適化しておかねば」と作り直している。


いまのところ

・答えが10までの足し算

・百ますの九九


を作ってみた(改造中であるが)。


VBAの精査が済み、バリエーションが増えたら公開しようか、とも考えている。

C:とF:がNTFS、E:がFAT32であるPCにディスクデフラグを実施した。分析するとどれもこれも「最適化必要」であった。しかし、分析にかかる速度が前者と後者で驚くほど違った。

FAT32のE:は6Gくらいで、分析に数十秒かかったが、NTFSのC:では100Gを超える容量がある(この配置の仕方もどうかと思うが)にも関わらず、数秒で分析が完了した。また、デフラグの時間は差も結構あるようである。計測はしていないが、データ量が違うにもかかわらず体感では時間の差がなかったからだ。


従来、分析が遅いのが困ったが、それが速いだけでも有難く感じた。

せっかくExcelVBAでツールなどを作って提供しても、セキュリティレベルが高や最高だと実行できず、納品して現場で顔面蒼白になった、という経験をお持ちの方もいらっしゃるかもしれません。


実はコレ、抜け道があるのです。

そのためには電子署名すら不要です。



一つは公開されていると思いますが、Excelが定めた安全なフォルダにあるブックであればセキュリティレベルに関係なく実行できてしまうそうです。Excel起動時に実行されるVBAがあるので、カンのいい人は「どれがそのフォルダ」なのかピンと来るかもしれません。複数あるようですが、私は1フォルダしか覚えていません・・。この方法は使っていないので他は忘れてしまいました。



もう一つは、アプリケーションから呼び出す方法です。

あるとき、ExcelVBAからVBAを含む別のブックを起動しました。特に気にしていなかったのですが、あるとき「セキュリティレベルは中なのでダイアログが出てきてマクロを有効にするかどうか問われるはずじゃないのか?」と疑問が湧きました。

仮説として

・1つ実行してもよい、と認識されたVBAからなら、VBAを有効にしてブックを開ける

・他のアプリケーションからも指定さえすれば、VBAを有効にしてブックを開ける

の2つを考えました。


前者は仮説通り。しかし、最初のブックのVBAをどのように有効にするのかが問題です。先述の安全なフォルダに入れる、という手もありますが、管理が面倒な気がします。


後者はExcel2000でセキュリティレベルを高にした状態で実験をしました。

HSP3 で起動用exeファイルを作り実験したところ、起動してくれません。

しかしVBScript(ちょっと名称が正しくないかもしれません。ブラウザ上で動かすのではなく、Windows上で動かす奴で、WSHっていうのが正しいのかも。あまり使い分けをしていないのでご指摘があれば訂正します)から起動させると思惑通り起動しました。Excel2000の「低」「中」「高」、Excel2003の「低」「中」「高」「最高」を試しましたが、どれも問題なく起動しました。

仮説は正しくなかったようですが、どうやらMS製品からであれば起動できる、というところのようです。


実務上、これは使っていますが、VBScriptをナマで記載するのはリスキーなので、HSP3のexeで「Excelを実行するVBScript」と、「そのVBScriptを起動するDOSバッチファイル」を生成し、DOSのバッチをキックさせています。終了後その2ファイルを削除してます。ここまでやらなくてもいいのですが、他の開発環境がないためこうしました。


なお、この方法は「脆弱性」かなと思って問い合わせたところ、マイクロソフトからは「脆弱性ではない」と回答を貰っています。



ご利用にあたりましては細心の注意を払っていただけますと有り難いです。