判定後の再計算でおかしな結果に(失敗談)
- 繰り返し
- 条件分岐
を同時に扱うことになった。
そこで、まずこのような表を作成。
数値には、RANDBETWEEN関数を用いており、各セルに1から10までの数がランダムに表示されている。参加者には以下を入力し、結果を確認してもらった。
Sub test() Dim i As Long For i = 2 To 11 If Range("A" & i).Value = Range("B" & i).Value Then Range("C" & i).Value = "〇" Range("A" & i & ":C" & i).Interior.Color = vbYellow Else Range("C" & i).Value = "×" End If Next End Sub
すると、次々と参加者の皆さんから「結果が合わないんですけど?」の声が。
確かに、「一致で×」「不一致で〇」のものが散見される。しばらく悩んでしまったが、直ぐに原因が判明した。判定欄に「〇×」が入力されるたびに、RANDBETWEEN関数が再計算して新たな数値を表示していたわけで。反省。
このように、ユーザーが意図しないところで再計算されて、しかも結果が変わってしまう場合は要注意だ。RANDBETWEEN関数が業務で使用されるケースは稀と思うが、例えば今日の日付を表すTODAY関数などは、その最たるもの。
ちなみに選択した複数セルに同じ値や式を入力するときは、Ctrl + Enter が便利。
ちなみに一旦表示したRANDBETWEEN関数の結果を値に変更する場合は、値貼付けが便利。ショートカットは、Ctrl+Alt+V で。
参考まで。