和風スパゲティのレシピ

日本語でコーディングするExcelVBA

確認メッセージを非表示にする - DisplayAlerts

マクロが中断しないようExcelからの確認メッセージを非表示にする、DisplayAlertsプロパティの使い方を解説します。Application.DisplayAlerts=Falseを実行すると以降確認メッセージが表示されなくなり、Trueにすると再度表示されるようになります。

DisplayAlertsを常時Falseにしてはいけない

Application.DisplayAlertsプロパティはExcelからの確認メッセージを非表示にする機能で、削除や閉じる処理に使います。これを常時OFFにしていると、予期せぬ確認メッセージに自動返答されてしまい、マクロのバグが迷宮入りしてしまいます。

変数宣言(Dim)とNewを1行で済ませてよいか

Collection/Dictionary/FileSystemObject/自作クラスを使用するとき、Dim x As X、Set x = New Xと2行で宣言する方法と、Dim x As New X と1行で宣言する方法があります。この違いはNothing時の動きと、Initializeの実行タイミングに現れます。

Dictionary.Keys(i) .Items(i)と書いてはいけない

DictionaryのKeys/Itemsメソッドは全key/itemを1次元配列にして返すメソッドです。つまりKeys(i)はKeysの「引数i」ではなく、Keysが返す配列の「添字i」ということです。Keys(i)を使用したコードは都度配列を生成するため非常に遅くなります。

マクロの実行時間計測(Timer)をクラス化する

マクロの実行時間はTimer関数で0.00秒単位で測ることができます。開始時刻 = Timer、終了時刻 = Timer、終了時刻-開始時刻で求まるコードですが、これをクラスにすることで管理する変数が2つ減り、さらに簡単に呼び出せるようになります。

文字列を部分一致で比較する - Like演算子

文字列を部分一致で比較するLike演算子の使い方を解説します。任意の文字列を意味するワイルドカード「*」を利用して、If 判定したい文字列 Like "*○○*" Thenの形式で使用します。数字を表す#や、アルファベットを表す[A-Z]など、文字種も指定可能です。

Time関数とTimer関数の違い

現在時刻を取得するTime関数とTimer関数の違いを解説します。単位(型)と精度が異なります。Time関数がDate型で表示形式や各種関数に利用できるのに対し、Timer関数は1/00秒まで計測できるSingle型のため、実行速度計測などに向いています。