第4講 If文(もしもボックス)
第1話 もしもボックス
この第1話のテーマ名の意味わかりますか。
もちろん、ここまでついてこられた賢い皆さんですから、
当然おわかりですよね。
ドラえもんの「もしもボックス」です。
ドラえもんを見たことない方のために解説しますと、
22世紀からやってきたネコ型ロボットのドラえもんには、
4次元ポケットがおなかについていていろいろな道具を出します。
あったらいいなという便利なものばかりです。
例えば、どこでもドアです。
どんな場所にも行くことが出来ます。
深海であろうと宇宙であろうと。
でもそんなところに行ったら窒息死してしまいますか。
でも大丈夫です。
4次元ポケットには、
不思議なクリームがあってそれを塗れば深海であろうが宇宙であろうが、
窒息死も圧迫死も蒸発死(宇宙では血液が蒸発してしまうとされています)もしないのです。
主人公のび太がだらしなくて、子孫が苦労しているので子孫が歴史を変えるために、
未来から送られたネコ型ロボットがドラえもんなのです。
ドラえもんの道具の1つに、
「もしもボックス」というボックス型の公衆電話に似た電話があります。
その電話で、「もし声のない世界だったら」というと声のない世界になるのです。
声のない世界では、漫画と同じ吹き出しになります。
ジャイアンといういじめっ子の音痴な歌が聞きたくなくて、
「もしもボックス」で声のない世界にしたのですが、
吹き出しになっても不快さはまったく変わらなかったというおちでした。

さて、この講で学ぶIf文はまさに「もしもボックス」です。
「もし、テストのない学校だったら、どんなに楽しいだろうか。」
がIf文の例です。
If文の構文は
  If P Then A
です。
これは、「もしPだったらAだ」です。
具体例は、
If 合計点>=300 Then Cells(4, 2) = "合格"
です。
VBAは変数名に漢字を使えるのでしたね。
合計点が300以上なら、
セルCells(4, 2)すなわちB4に合格と表示させよという命令文となります。
尚、>=はキーボードに≧がないので、VBAではこれで代理させています。

複数の命令を実行させたい場合には、
  If P Then
    A
    B
    C
  End If
などとします。
この場合には、もしPだった場合にはAとBとCの3つの命令文が実行されます。


このIf文によって世界はとても広がります。
なぜなら、
このIf文を使うと、
l01
と分岐させることが出来るからです。
If文を使わない場合は、
A→B→C→D→・・・・
と直線的な動きしか出来ないのに対して、
2次元的に動かすことが出来るのです。
If文を使うことによって、プログラムの世界は一気に広がります。

For文とIf文さえあれば、どんなプログラムでも組めることが数学的に証明されています。
ですから、AI(人工知能)のように高度なプログラミングでさえ組むことが出来るのです。
AIを特別な機械であると思っている方もいらっしゃるでしょうが、
普通のパソコンですし、
単なるプログラムにすぎません。
原理的には、囲碁の世界チャンピオンでさえ勝てないソフトを組むことが出来るのです。
最近の映画のCGは本当にリアルですが、
これも結局はFor文とIf文の組み合わせにすぎません。
では、皆さん第3講の第10話の
Private Sub CommandButton1_Click()
  Dim w As Integer, i As Byte, j As Byte
  '以下国語などの表示
  Cells(4, 3) = "国語"
  Cells(4, 4) = "数学"
  Cells(4, 5) = "英語"
  Cells(4, 6) = "平均"
  Cells(10, 2) = "合計"
  Cells(11, 2) = "平均"
  For i = 1 To 5 '出席番号の表示
    Cells(4 + i, 2) = i
  Next
  For i = 0 To 4 '100点以下のランダムな得点の入力
    For j = 0 To 2
      Cells(5 + i, 3 + j) = Int(101 * Rnd)
    Next
  Next
  For i = 0 To 4
    w = 0 '0への初期化
    For j = 0 To 2 '横(各生徒)合計算出
      w = w + Cells(5 + i, 3 + j)
    Next
    Cells(5 + i, 6) = w '横(各生徒)合計算表示
    Cells(5 + i, 7) = w / 3 '横(各生徒)平均表示
  Next
  For i = 0 To 2
    w = 0 '0への初期化
    For j = 0 To 4 '縦(各教科)合計算出
      w = w + Cells(5 + j, 3 + i)
    Next
    Cells(10, 3 + i) = w '縦(各教科)合計表示
    Cells(11, 3 + i) = w / 5 '縦(各教科)平均表示
  Next
End Sub
Private Sub CommandButton2_Click()
  Range("B4:G11").Select
  Selection.ClearContents 'C10からG11までのセルの消去
  Range("A1").Select
End Sub
参考ダウンロード添付ファイル
を次のように改良して下さい。
001
から実行ボタンを押すと
002
(第10話では合計と平均のそれぞれの合計と平均は算出しませんでしたが、
それも付け加えてください。
また、「英語と合計の間」と「5と合計の間」が細い実線でしたが、
この際に2重線に変更しましょう。)
消去ボタンを押すと
001

合格条件は、150点以上とします。


尚、
Private Sub CommandButton1_Click()
  
CommandButton2_Click 'シートのB4からH11までを消去させる
  Dim w As Integer, i As Byte, j As Byte
           ・
           ・

CommandButton1_Clickの1行目にピンクを加えてください。
前回の合格が残っていて、
正確に合格が表示できないからです。
ランダムデータですから、合格者の人数は毎回異なります。


第3講第10話へ 第2話へ


トップへ