今回は「条件分枝」のステートメントを説明します。
If c.Value <> "" Then
c.Offset(0, -1).Value = Rnd
End If
Next
IF α THEN β ELSE は「もし α であれば、β を実行する」という意味のステートメントです。もし α でなければ何もせずに素通りします。上のプロシージャでは α の部分が
という条件記述になっています。 c には Range オブジェクト(つまりセル)が1つ格納されています。.Value はセルの値を取得するプロパティです。数学と異なって、セルの値は必ずしも数値とは限りません。今の場合は文字列が入っています。次の <> "" が少しややこしいのですが、"" は「空白のセル」という意味です。<> は数学の不等号に似ています。もし a.Value という記述があって、それがセルの数値を取得しているのであれば、そのはたらきは数学の不等号と全く同じです。
であれば、「セルの値が 1 より大きければ」という意味の記述になります。本来はこういう簡単な例から説明を始めなければならないのですが、このブログは実践形式なので、そのあたりは逐次説明していくしかありません。ご了承ください。さて、"<>" という記述は「~ではない」ということを意味します。数学で使用される ≠ の代わりに用いています(ある値より大きく、かつ小さいという事象はあり得ないからです)。したがって、
は「参照したセルが空白でない場合は次のように処理します」という意味の記述になります。さて、セルが空白でなかった場合、
という処理を実行することになります。
は Offset プロパティで c に格納されているセルから「行 + n, 列 + m」の位置にあるセル( Range プロパティ)を取得します。 c.Offset(0, -1) は「 c のセルの左隣」ということになります。
は「 c のセルの左隣に入力されている値に乱数を入れる」という記述になります。Rnd(n) は引数 n (省略可)にシード値を指定して乱数を発生させるステートメントです。次回に Randomize ステートメントと合わせて、乱数発生について詳しく説明しますので、今はあまり細かいところは気にしないでください。
以上の記述全体が前回にお話した FOR EACH ~ NEXT で囲まれていますね。つまり、「 i 番目のワークシートにあるセル C1 ~ C1000 について全て「空白セルか否か」という条件判定を行い、空白でなかった場合(何かデータが入力されている場合)はセルの左隣に乱数を入れておきます」という処理を実行します。
おまけいつどこ
今日が良い天気(条件α)なら、「いつどこ」(処理β)します♪
天気が良くなければ、やっぱり「いつどこ」します♪
「いつどこ」に条件分枝なんてありませんのだ。
他所の家で肥料を撒かないでくださいな
・雨が降りやんだとき、滝野川家で獣医の首代さんが脇戸をくぐった。そして肥料を散布した。(いや、そこ他所の家だし・・・・・・)
・みどりの日に、タシケントでクルマロ君が封筒に切手を貼った。それからアルバムを整理していた。
・秋に交差点で、切羽詰った表情をした男が小夜子さんに挨拶した。それから「これで終わり」と言った。(別れ話だー! ねえねえ、どうして別れることにしたの? こばとに教えてー)
・元旦に、雨が降りしきるなかで、社長が「いい思い出になるよ」と言った。そのあと腋毛を剃った。(雨に濡れながら腋毛を剃るのが「いい思い出」なんですか? へーんなの)
・終業式の日に、ねぐらで金八先生が冷蔵庫の中をのぞいた。そのあと筋力トレーニングをした。
宇宙人が小春ちゃんにメールします
・先月、崖の上で変なおじさんが青臭い議論に嫌気がさしていた。それから商品を売り込みました。(議論なんかより仕事が大切だよね)
・文化の日に、やくざの目の前で議員秘書の鳥塚さんが社会人になった。その後、大笑いした。(足を洗ったの?)
・一昨日、芝居小屋で宇宙人がこれは夢だということに気づいた。そして小春ちゃんにメールした。
・春に富士山のてっぺんでにゃんこが踏ん張った。その後、脇目もふらず働いた。
・帰宅途中に、尾張でおしとやかな女性が絵を描いていた。そしてへこたれた。(ちょー下手な絵を描いたんでしょー。ねえねえ、こばとにも見せてくださいなー。絶対笑いませんからー)