|
熊本大学工学部環境システム工学科(建築系)1年次 |
|
後期,月曜日3時限 |
|
選択必修,2単位 |
|
山成 實(工学部環境システム工学科) |
本講義では VBA によるプログラミングを行う.コンピューターに仕事をさせる手順を記述したもの
がプログラム,プログラムを作ることをプログラミングと言う.また,VBAでは,プログラムのことを
コードと呼ぶ.
VBA の説明の前に,コンピューターを使って問題を解決する手順を考えて見よう.これは次ぎのよう
な手順となる.
1. 問題の分析
コンピューターに仕事をさせようとする際,利用者自身が解決しようとする問題を具体的に分析して
おかなけならない.これには与えるデータの種類,欲しい結果,計算方法等が含まれる.
2. 計算手順の検討
プログラムを組む(プログラミング)のためには,問題解決のための手順をあらかじめ示したおかな
ければならない.このためにはフローチャート等を使って図化すると手順が整理され理解が容易になる.
3. プログラムの作成
計算手順が定まったならば,それに従ってプログラムを作る.このためにはプログラムを記述する言
語(プログラミング言語)の知識が必要である.
4. 実行
プログラミングしたプログラムを実行させる.タイプミスや文法上の間違いがあると,プログラムは
動かない.エラーではなくても実行結果が全く間違ったものとなるかもしれない.そんなときは再度プ
ログラムの修正を行う.このことをデバグ(debug)という.文字どおり虫取りである.
VBA によるプログラミングを行うために,ここでは基本的な事項を説明する.
変数とは,簡単に言えば,データの格納場所につけた名前である.
プログラムの中で何らかのデータを保持するためには,コンピュータのメモリ上にその値を格納して
おく必要がある.メモリには,アドレス(番地)といって,位置を特定するための番号のようなものが
ついているのであるが,この番号をいちいち覚えておくのはなかなかたいへんである.
そこで,アドレスに分かりやすい名前をつけて,プログラムの中から操作することができるようにした
ものが変数である.
分かりやすくいえばメモリが下駄箱,変数は下駄箱につけた名札...という感じである.
図2−1 変数の概念
変数には,覚えやすいように好きな名前を付けることができる.
a 〜 z ,あ〜ん,漢字などの文字とアンダスコア( _ )を使うことができ,スペースや記号は使う
ことができまない.また,Visual Basicの予約語も変数名には使うことができまない.予約語とは,
Sub,Function,If,Select,End ・・・ のように,Visual Basicのプログラム内で特別の意
味を持つ語のことを言う.予約を変数として使おうとするとエラーが発生してしまう.
ネーミングの方法に特に決まりはないが,変数名を見ればその用途が分かるようにな付けかたをして
おくと,あとあと見やすいプログラムになる.
変数は「入れ物」であって,中に入ってる値そのものではない.下駄箱の中の靴をなんどでも好きな
靴に入れ替えることができるように,変数も何度でも自由に値を入れ替えることができる.
定数とは,プログラム中で変更されない値をつけた名前のことを言う.基本的には変数と似てい
るが,定数の値をプログラムの実行中に入れ替えることは一切できない.いわが貸切の下駄箱のよう
なものである.
定数は,
Const 定数名 = 値
の形で宣言する.
(3)配列
Visual Basicには,配列型変数という概念がある.
変数は下駄箱につけた名札である...という説明をしたが,同じように考えると,配列は下駄箱
全体を1つのまとまりとして扱うものである.
配列に含まれるデータ(下駄箱の例でいうなら個々の箱)のことを配列の要素といい,頭から順に
連番を振って管理する.個々の下駄箱に振られた連番は配列の添え字(インデックス)と呼ばれる.
配列型変数を使うには,配列型変数を使うことを宣言しなければならない.配列型変数を宣言する
には,以下の書式を使う.
Dim 配列名(要素数)
たとえば,9つの要素をもつ配列Getabakoを宣言するには,次のように記述する.
Dim Getabako(8)
配列の個々の要素には,配列名(インデックス)でアクセスします.たとえば下の図でNo.3の下駄
箱にアクセスするには,Getabako(3)と記述すればいいというわけです.
図2−1 配列の概念
配列の各要素にデータを格納する場合は,次のように記述する.
Getabako(0) = "大きな靴" Getabako(1) = "小さな靴" Getabako(2) = "クサイ靴"
配列に関する詳しい説明は,ここを参照.
(4)演算子
Visual Basicでは,加減乗除をはじめとした,さまざまな計算を行うことができる.
そもそもプログラムとは計算の繰り返しであるから,その計算が出来なくては話にならない.足す・
引く・割る・掛けるなどの計算の指示を与える記号のことを演算子と呼ぶ.足し算なら+,引き算なら
−,割り算なら÷,掛け算なら×...というのが演算子であるが,Visual Basicにはそれぞれ固有
の記号が用意されている.
演算子には大きくわけて,算術演算子,比較演算子,文字列連結演算子,論理演算子の四つの種
類がある.以下に,比較的使用頻度の高い,算術演算子と文字列連結演算子の説明を記す.
算術演算子
算術演算を行うときに使う演算子である.
名前 機能 使用例 結果 +演算子 足し算を行う 1 + 1 2 -演算子 引き算を行う 1 - 1 0 *演算子 掛け算を行う 1 * 1 1 /演算子 割り算を行う
(結果を小数点で返す)
10 / 3 3.3333 \演算子 割り算を行う
(結果を整数で返す)
10 \ 3 3 Mod演算子 割り算を行い,余りを得る 10 Mod 3 1 ^演算子 べき乗を求める 2 ^ 2 4
文字列連結演算子
文字列の連結を行うときに使う演算子です.
&演算子と+演算子がある.どちらも同じようにつかわれるが,+演算子は算術演算子にも
使われるため,文字列の連結には&を使うようにした方が読みやすいプログラムを書くこと
が出来る.
【使用例】
"でかい" & "くつ" = "でかいくつ"
(1)If文 条件判断
プログラムを書いていると,その時々の状況によって実行する処理を分担したい場面がしばしば発生
する.
「肉まんがあれば肉まんを買う.売り切れならあんまんを買う」
といった選択を迫られることは,実際の生活にもよくあることである.
Visual Basicではこんなとき,If文を使う.
If文は条件判断構文と呼ばれ,「○○ならAの処理を行う,それ以外の場合Bの処理を行う」という具
合に与えられた条件に基づいて状況を判断し,指定された処理を実行する仕組みになっている.
【例】
If
1 肉まんがある2 Then 肉まんがある3 Else4 あんまんを買う5 End If6
[コードの意味]
1.If と Then で条件式を囲む
2.条件判断式を記述
3.2.の条件に当てはまる場合に行う処理を記述
4.条件に当てはまらない場合,Else以下を実行
5.条件に当てはまらない場合に行う処理を記述
6.ここでIf文が終わっていることを明示的に記述
(2)For Next 文 ループ構造
同じ処理を何度も繰り返し行わせたいような場合には,ループ構造を使う.
ループ構造には,大きく分けて,For Next構文とDo Loop構文の2つがある.ここでは,頻繁に使
用するFor Next構文を説明する.
For Next構文は,主としてあらかじめ処理を繰り返す回数が分かっている場合に用いられる.
【For Next構文の書式】
For カウンタ変数 = カウンタ開始値 To カウンタ終了値 [Step X] ・・・・・1
ここに繰り返したい処理内容を記述する ・・・・・2
Next カウンタ変数 ・・・・・3
[コードの意味]
1.カウンタ変数とは,現在何回処理を繰り返したのかを記録しておくための変数である.
カウンタがいくつからいくつまでの処理を繰り返すかを記述してやる.
カウンタの初期値が0で100回処理を繰り返したい場合なら,次のように書く.初期値が0
なので100回処理を行う場合は,終了値は99となる.
For カウンタ変数 = 0 To 99 処理内容 Next カウンタ変数
2.カウンタ変数が指定範囲内にある間,実行する処理をここに記述する.
3.For Nextループの末尾を表す.2の処理を終えてここにいたると,カウンタ変数の値
が[Step X]で指定された分だけ,増加(または減少)する.何も指定がなければ1増加
する
(1)Sqr 関数
数式の平方根を返す数値演算関数である.
次の例は、Sqr 関数を使って、指定した数値の平方根を計算する.
MySqr = Sqr(4) ' 2 を返す. MySqr = Sqr(23) ' 4.79583152331272 を返す. MySqr = Sqr(0) ' 0 を返す. MySqr = Sqr(-4) ' 実行時エラーが発生する.
(2)Int 関数
Int ( Number )
指定した数値の整数部分を返す.Int 関数は、number の小数部分を取り除いた整数値を返す.
number に負の値を指定した場合には、Int 関数が number を超えない最大の負の整数を返す.たとえ
ば,number に -8.4 を指定すると、Int 関数は -9返す.
次の例は,Int 関数を使って,数値の整数部を求める.
MyNumber = Int(99.8) ' 99 を返します。 MyNumber = Int(-99.8) ' -100 を返します。 MyNumber = Int(-99.2) ' -100 を返します。
セルの値を取得したり,セルに値を記入したりするステートメントには,RangeとCellsの2つのス
テートメントがある.Range("A2").Value と Cells(2,1).Value は,どちらも「セルA2の値」
という意味である.選択するセルが変わっていくマクロの場合,行や列を変数にするが,その場合は,
Range ではなく,Cells を使う.「Cells(行,列).Value」これで,行を1つずつ追加していったり
することにより,参照するセルが変わる.
(1)Exit ステートメント
For...Next ループを抜けるフロー制御ステートメントである.or...Next ループを抜け,Next ス
テートメントの次のステートメントに制御を写す. For...Next ループの中だけで使用 できる.
For...Next ループがネスト(入れ子)構造になっているときは,Exit For のあるル ープの1つ外側
に制御を移す.