データの入力規則を含むセルのデータをVBAで更新する際には注意が必要である。
WEBで探しても問題解消の記事が見当たらないので、以下にメモしておく。
1.問題点
予想高度が3になっているが(下図枠内)、4が正しい。
これはVBAで爆弾投下数、焼夷弾投下数を設定してから高度調整マクロを呼んだ場合である。
同じデータを手動設定してから、高度調整ボタンを押す(マクロが呼ばれる)と予想高度は4となる。
2.原因
推測であるが、EXCELがデータを更新完了する前に高度調整マクロが動作した為と思われる。
EXCELの処理がマルチプロセスになっていて、セル更新処理(*1)とマクロ実行処理の同期が
取れていないと思う。
(*1)入力規則を含むので処理に時間がかかる事はMicrosoftも認めている。(下図枠内)
引用元は4項の参考資料である。
3.対策
セルの設定後に暫く時間を置いてからマクロを起動する。具体的には下図下線部のように
スリープ関数を使ってVBAの処理を待たせる。
4.対策の効果
正しい予想高度が設定される。
5.参考資料
下記のWEBページにお世話になりました。ありがとうございます。
・Excel のパフォーマンス: パフォーマンスの問題を最適化するヒント
<個人的な感想>
スリープ時間が300ミリ秒で良いかは分からないが、念のために長くしておく。
10ミリ秒でも100ミリ秒でも正しい結果にはなったが、たまたまかもしれないので。
それにしてもEXCELの機能として同期が取れないのは不具合に思える。