月刊プログラム!
VisualBasic For Excel

Vol_03
2001.APR.24

Presented by kouta_y
感想等は掲示板、苦情はメールへ。

にこちゃん
はい、PC壊れたので、久しぶりの更新です。
今回から少しレベルアップです。
でも、やっぱ初心者向けなんで、中級以上の方はご遠慮ください。


プログラム三種の神器

あらゆるプログラム言語に共通する3つのもの。
逆に言えば、これらがなくてはプログラムを組むことは出来ないといっても過言ではありません。
それは何か?

変数 分岐 ループ

の3つです。
この3つはプログラムをやる上で基本中の基本であり、また完全に理解しようと思うと、なかなか奥の深いものでもあります。
いきなりいっぺんには理解できませんので、とりあえずこの3つを使ったサンプルを今回はやりたいと思います。


三種の神器を使う


まず下のコードを見てみましょう。

Sub Test()     ' プロージャの宣言
Dim hensuAs Long ' 変数の宣言

' ループ
Do
  hensu = hensu + 1
  Cells(hensu, 1).Value = hensu
  If hensu >= 100 Then Exit Do ' 条件分岐
Loop

End Sub

実行結果

実際は100行目まで続いています。


解説

まずプロージャの宣言をします。
VBAではプロージャというものがなければ、プログラムを実行することはできません。
プロージャの名前(プロシージャ)は、自分でわかるような名前を付けるのが基本的です。

次に変数の宣言です。
ここでは「hensu」という変数を宣言しています。
変数の宣言をするにはDimステートメントを使います。
「As Long」というのは、変数の型を宣言しています。
「型」についてはは今後詳しく説明しますので、ここでは「ふ〜ん」と流してください。

次にループ文です。
ループというのは繰り返し処理を行うことを言います。
例えば同じような処理を何回も繰り返さなければならない場合、その度にコードを打っていたのではラチがありません。
そういう処理に出くわした場合、ループ文を使い自分の負担を軽くします。
「ちょっとくらいいいじゃん!」
と思った人!ちょっとそこに座りなさい!
例えば100万回同じ処理を繰り返す場合、あなたは100万個の処理を書く気ですか?
たとえ1行で終わる処理でも、100万行です。
「それでも俺はやる!」と言い切れるあなた。はっきり言ってプログラミングの素質はありません。あきらめてください。
プログラマーというのは面倒くさがりな人ほど素質があります。
筆者は自他共に認める面倒くさがり屋なので、めちゃくちゃすごい素質があります。(うそですごめんなさい)
ともかく、、、
ループ文は自分が楽になるばかりか、コンピュータつまりCPUの処理速度の向上にも繋がります。
CPUの処理速度が上がるということは、プログラムの処理速度の向上に直結します。これは大事なことです。
ここでは「Do...Loop」文というループ処理を用いています。

最後に分岐文の代表者IF文です。
「IF」と聞いて、あなたは何を思い浮かべますか?
筆者は昔やっていた、タモリがナビゲータの「世にも奇妙な物語」の後釜、「if...」を思い出します。
そうです。
「もし・・・」という意味です。
もし式が1だったらこれをやろう。もし1じゃなかったらこっちをやろう」
処理を分岐させます
例えば、ユーザー(実際に使う人)が、セルに0と入力しました。
しかしあなた(プログラム作った人)は、本当は1が欲しかったのです。
あーあ、1を入力してくれれば面白いことが起きるのになぁ。残念だなぁ。
1が入力されたのをどうやって判断するか?
それが「分岐」です。

セルの値が 0 → 「1を入力してちょ」とメッセージを出す。
        1 → 面白い処理。

とこんな風に処理を分けることができます。
三種の神器の中で最も基本的なので、覚えておいてください。


コードの説明

ではダラダラとした話が続きますが、コードの「流れ」を説明します。
まず上から順に辿っていきましょう。

プロージャの宣言、、、
変数の宣言、、、
Do...Loop文に突入、、、
変数に値を代入、、、?

はいここでストップ。
ここで変数の本来の役割をさせています。
値の代入です。
変数というのは、言うなれば「箱」です。
その箱には「値」というものを「入れる」ことができます。
当然「取り出す」こともできます。
ここでは「入れる」に属しますが、入れ方がちょっと特殊ですね。
hensu = hensu + 1
これはなんでしょうか。
これは、「hensu」変数の値に対し1を足しています。
そして、その足した数を、また「hensu」変数に代入しています。

なんのこっちゃありません。ただの足し算です。
小学校で習った足し算の式は、
1 + 1 = 2
などと書きましたよね?
しかしプログラムは逆で、
結果 = 式
となります。

「でも変数に足しているのに、同じ変数に代入できるの?」

はい。この問いに対しては、後々の「月刊VBA」で説明していきたいと思います。
今は「こういうもんなんだ」とだけ思ってください。
あまり最初の方に「全てを知ろう」などとは思わないでください。必ず挫折します。
ちょっとずつ、ちょっとずつ理解していけば、必ずいつか理解できるようになります。ここは「その為」のホームページですから。
「今は」そのことについては、深く考えないでください。


では話を戻しまして。

Cells(hensu, 1).Value = hensu

ん?
これは何をやっているんだ?
はい。変数はこういう使い方もできます。
思い出してください。
Cellsというのは、Cells(行, 列)という書式で書くのでしたよね?

そうです。
hensu変数で行を指定しているんですね。
そして、またhensu変数の値を今度はセルに代入しています。
ここで初めてセルにhensu変数の内容が反映されたわけです。
hensu変数の値が10だった場合、10行目に10と表示されます。

さてお次。いよいよ分岐の王様「IF文」様の登場です。

If hensu >= 100 Then Exit Do

これは何をやっているかというと、「hensuの値が100以上か?」というのを判断しています。
もし100以上ならば、「Then」の後に続くコードを実行します。
もし100未満なら、「Then」の後のコードは無視し「Loop」に飛び、「hensu = hensu + 1」の所まで一気に戻ります。
「Exit Do」というのは「Do...Loop」文を抜ける時の構文です。
このループ文は「抜ける」構文を書かなければ永遠にループを続けます
なのでここではhensu変数の値が100となれば、ループを抜けるように条件文を書いています。

ご自分でコードを書く場合、「Exit Do」絶対に忘れず入れてください。
忘れて無限ループに陥ってしまった人は、「Ctrl + Break」キーを同時に押し、■ボタンで強制終了をしてください。


終わり

とりあえず今回はここまでです。
ダラダラと文章ばかりになってしまいましたが、いかがでしたでしょう?
「なんとなくわかった気がする」
それで十分です。
プログラム初心者の人がまず第一にやることは「プログラムを知る」ことです。

次回は今回やった三種に神器について、詳しく説明したいと思います。