判定後の再計算でおかしな結果に(失敗談)

f:id:Infoment:20190603222315p:plain

Excel VBA初級者向けの勉強会で、

  1. 繰り返し
  2. 条件分岐

を同時に扱うことになった。

そこで、まずこのような表を作成。
f:id:Infoment:20190603222354p:plain

数値には、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

すると、次々と参加者の皆さんから「結果が合わないんですけど?」の声が。
f:id:Infoment:20190603222641p:plain

確かに、「一致で×」「不一致で〇」のものが散見される。しばらく悩んでしまったが、直ぐに原因が判明した。判定欄に「〇×」が入力されるたびに、RANDBETWEEN関数が再計算して新たな数値を表示していたわけで。反省。

このように、ユーザーが意図しないところで再計算されて、しかも結果が変わってしまう場合は要注意だ。RANDBETWEEN関数が業務で使用されるケースは稀と思うが、例えば今日の日付を表すTODAY関数などは、その最たるもの。

ちなみに選択した複数セルに同じ値や式を入力するときは、Ctrl + Enter が便利。
ちなみに一旦表示したRANDBETWEEN関数の結果を値に変更する場合は、値貼付けが便利。ショートカットは、Ctrl+Alt+V で。
f:id:Infoment:20190603224105g:plain

参考まで。