【書き方】
If 条件1 Then
条件1が真の場合の処理
ElseIf 条件2 Then
条件1が偽で、条件2が真の場合の処理
Else
すべての条件が偽の場合の処理
End If
Sub 草が伸びる()
For i = 1 To 10
For j = 1 To 10
If Rnd() < 0.2 Then
If Cells(i, j).Interior.Color = RGB(255, 255, 255) Then '白なら
Cells(i, j).Interior.Color = RGB(127, 255, 127) '薄緑にする
ElseIf Cells(i, j).Interior.Color = RGB(127, 255, 127) Then '白ではなく薄緑なら
Cells(i, j).Interior.Color = RGB(0, 255, 0) '緑にする
Else '白でも薄緑でもないなら
Cells(i, j).Interior.Color = RGB(0, 127, 0) '深緑にする
End If
End If
Next j
Next i
End Sub
【書き方】
Cells(行番号, 列番号).Clear
先ほどのマクロで色が付く範囲を簡単にクリアできるよう、次のマクロを作ってボタンに登録する。
Sub リセット()
For i = 1 To 10
For j = 1 To 10
Cells(i, j).Clear 'クリアする
Next j
Next i
End Sub
Function 酔歩(x, max)
If Rnd() < 0.5 Then
酔歩 = x - 1 '1つ左に
Else
酔歩 = x + 1 '1つ右に
End If
If 酔歩 < 1 Then '下限より小さくなったら
酔歩 = x '元の座標値
ElseIf 酔歩 > max Then '上限より大きくなったら
酔歩 = x '元の座標値
End If
End Function
第2引数で範囲の上限を指定している。下限は1である。
左か右をランダムに選んだ結果、この範囲を外れてしまった場合は、元の座標値を答えるようにしている。
したがって、答が範囲外になることは決してない。
Sub 羊が移動する()
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Value = "@" Then '@がいたら
Cells(i, j).Value = "" '消す
Tate = 酔歩(i, 10) '隣の行
Yoko = 酔歩(j, 10) '隣の列
Cells(Tate, Yoko).Value = "o" 'oを入力
End If
Next j
Next i
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Value = "o" Then 'oがいたら
Cells(i, j).Value = "@" '@にする
End If
Next j
Next i
End Sub
これもボタンに登録する。そして、セル範囲A1:J10のどれかに「@」を入力した上で、ボタンを何度か押す。
【書き方】
Call マクロ名
これをCall文という。Call文でマクロを使うことを「マクロを呼び出す」と言う。
Sub 草原の羊()
Call 草が伸びる
Call 羊が移動する
End Sub
ボタンに登録し、セル範囲A1:J10のいくつかに「@」を入力した上で、ボタンを何度か押す。
ボタンを20回押した例
Sub 羊が草を食べる()
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Value = "@" Then '@がいたら
Cells(i, j).Interior.Color = RGB(255, 255, 255) '白にする
End If
Next j
Next i
End Sub
マクロ「草原の羊」に、このマクロを呼び出すCall文を追加する。
Sub 草原の羊()
Call 草が伸びる
Call 羊が移動する
Call 羊が草を食べる
End Sub
先ほどの状態から「草原の羊」のボタンを押すと、「@」のあるセルが白くなる。
Sub 羊が繁殖する()
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Value = "@" Then '@がいたら
Yoko = 酔歩(j, 10) '隣の列
Cells(i, Yoko).Value = "o" 'oを入力
End If
Next j
Next i
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Value = "o" Then 'oがいたら
Cells(i, j).Value = "@" '@にする
End If
Next j
Next i
End Sub
マクロ「草原の羊」に、このマクロを呼び出すCall文を追加する。
Sub 草原の羊()
Call 草が伸びる
Call 羊が移動する
Call 羊が草を食べる
Call 羊が繁殖する
End Sub
先ほどの状態から「草原の羊」のボタンを押すと、移動先で「@」が増える。
何度もボタンを押すと、どんどん増えていく。
Sub 羊が餓死する()
For i = 1 To 10
For j = 1 To 10
If Cells(i, j).Interior.Color = RGB(255, 255, 255) Then '白なら
Cells(i, j).Value = "" '消去する
End If
Next j
Next i
End Sub
マクロ「草原の羊」に、このマクロを呼び出すCall文を追加する。
「@の移動先のセルが白かったら消去する」という動作をさせたいので、追加する位置は「羊が移動する」の直後である。
Sub 草原の羊()
Call 草が伸びる
Call 羊が移動する
Call 羊が餓死する
Call 羊が草を食べる
Call 羊が繁殖する
End Sub
先ほどの状態から「草原の羊」のボタンを押すと、「@」が一度大きく減った後、増えたり減ったりするようになる。