データの入力規則を含むセルのVBAからのデータ更新

データの入力規則を含むセルのデータをVBAで更新する際には注意が必要である。
WEBで探しても問題解消の記事が見当たらないので、以下にメモしておく。

1.問題点
  予想高度が3になっているが(下図枠内)、4が正しい。
  これはVBAで爆弾投下数、焼夷弾投下数を設定してから高度調整マクロを呼んだ場合である。
  同じデータを手動設定してから、高度調整ボタンを押す(マクロが呼ばれる)と予想高度は4となる。

2.原因
  推測であるが、EXCELがデータを更新完了する前に高度調整マクロが動作した為と思われる。
  EXCELの処理がマルチプロセスになっていて、セル更新処理(*1)とマクロ実行処理の同期が
  取れていないと思う。
  (*1)入力規則を含むので処理に時間がかかる事はMicrosoftも認めている。(下図枠内)
    引用元は4項の参考資料である。

3.対策
  セルの設定後に暫く時間を置いてからマクロを起動する。具体的には下図下線部のように
  スリープ関数を使ってVBAの処理を待たせる。

4.対策の効果
  正しい予想高度が設定される。

5.参考資料
  下記のWEBページにお世話になりました。ありがとうございます。
 ・Excel のパフォーマンス: パフォーマンスの問題を最適化するヒント

<個人的な感想>
スリープ時間が300ミリ秒で良いかは分からないが、念のために長くしておく。
10ミリ秒でも100ミリ秒でも正しい結果にはなったが、たまたまかもしれないので。

それにしてもEXCELの機能として同期が取れないのは不具合に思える。