Document

授業計画
15.アプリケーションの作成
アプリケーションの作成をとおしたプログラムの理解
15.1 確認・提出事項
全レポート(提出遅れ分含む)提出
15.2 授業内容
総復習
15.7 その他
試験は 2 月 7 日(火)の 1 限、301 号教室で行います。
出題範囲は配布したプリントです。
印刷されていないもの(パワーポイントのみで紹介したテクニックなど)は、
テスト範囲に含みません。
語句、演習、例題、レポート等をよく見直しておいてください。
最初の Excel に関する部分も復習しておくこと。
15.3 エクセルの基本
各部名称他
15.4 VBA によるプログラミング
条件判断、分岐、繰り返し命令
コントロール
オブジェクトとプロパティとメソッド
15.5 プログラムによる解析
移動平均法
ピーク解析への応用
15.6 知っておくと便利な小技
※これまでの授業用資料、レポート課題等は
http://ace.cen.kagoshima-u.ac.jp/bunseki/proex/proex.htm
にアップロードしてあります。
【条件判断、繰り返し命令】
●条件判断
※IF文は、「条件」が満たされていたら、
Then以降の「命令」を実行する。
なお、条件が満たされていない場合は、
※Excelの関数とは文法が異なるので注意! Thenの後ろは実行されない。
【IF文】
If [条件] Then [命令]
●[条件]の例
>
※数学の場合、「以上」は と表現されるが、
=
a=1 :aが1なら
コンピュータの場合は
>=
と表記する。
a>0 :aが0より大きいなら
a<=0 :aが0以下なら
a="演習" :aが文字列"演習"なら
例:If flag="OK" Then a=a+1 :文字列変数flagの内容が"OK"だったら、
aに1を加算
●分岐
【GoTo文】
ラベル名: (ラベル名の後にコロン(:))
GoTo ラベル名 (ここではコロンは不要)
【例題1】
※GoTo文はラベルとセットで使う。
If文と組み合わせることが多い
多用しすぎるとプログラムが
読みにくくなる
ラベル名は何でも良いが、
Sub 条件判断と分岐()
プログラムコマンド(IfやGoToなど)と
Dim a As String
かぶらないこと。
looptop:
a = InputBox("なにか入力してください")
If a = "" Then GoTo looptop
End Sub
変数aが空白なら、GoTo looptopが実行される
●繰り返し命令
【For~Next命令】●教科書pp.70~71
あらかじめ決まった回数だけ同じ命令を繰り返す場合に有効。
文法:For [カウンタ]=[初期値] to [終了値] step [増加値]
Next
【例題2】
Sub 繰り返し()
Dim i As Integer
For i = 1 To 3
MsgBox i & "回目"
Next
カウンタはあらかじめ宣言しておく。
iが1から3になるまで、(step [増加値]省略時は)
iを1ずつふやす。
iが3になるまで繰り返す。
End Sub
※Exit Forを使うことで、ループから強制的に抜けることができる。
【演習】For~Next命令を用いて、1~100までの数字をA1~A100に表示する
プログラムを作成せよ。
ただし、10ループごとにInputboxを表示させ、”終了”と入力がされたら
そこでFor~Next文から脱出するプログラムを作成せよ。
For i = 1 To v
For ii = 0 To 7
Cells(i + 1, 23 + ii).Value = score(i, ii)
Next
Next
ii = 1
Do While True
ii = ii + 1
a = Cells(ii, 21).Value
If a = "" Then Exit Do
v=0
For i = 26 To 29
v = v + Cells(ii, i).Value
Next
Cells(ii, 31).Value = v
Loop
左は、化学生命工学科が認定された(予定)
のJabeeの書類を作るための学習時間の
計算プログラムのごく一部です。
実用プログラムでも、データの集計程度なら
For~NextとIf~Then、ちょっとした工夫で
十分事足りることが多いです。
【オブジェクトとプロパティとメソッド】
【Excelに限らず、Windowsでプログラムを作る上で必ず出てくる言葉が
「オブジェクト」と「プロパティ」と「メソッド」です。】
【オブジェクト】
操作の対象となるもの → ワークシート、セルなど
【プロパティ】
値や属性 → セル内の数値やフォントの大きさなど
基本的には
[オブジェクト].[プロパティ]=値
変数=[オブジェクト].[プロパティ]
といった表記をする
1行1列のCellオブジェクトの
Valueプロパティに「月曜日」を設定
【例1】:Cells(1,1).Value = "月曜日"
値
A1に「月曜日」と表示
Valueプロパティ
セルに入力されている内容を示す
オブジェクト
(正確にはCellsはCellオブジェクトが集まったコレクションという→教科書p.89)
【メソッド】
オブジェクトを操作したり、動作させたりする → InputBoxなど
【例3】:Application.InputBox("InputBoxメソッド")
Applicationオブジェクト「入力ウィンドウを開け」というメソッド
[省略可能]
2
【移動平均法】
以下のようにデータが分散していたとする。
Y
2
2'
1
7
3
3'
5
4'
5'
4
6'
6
X
1、2、3の平均をとって、これを2'とする。
2、3、4の平均をとって、これを3'とする。
・
・
・
これを繰り返すことによって、ランダムノイズを減少させることができる。
移動平均法のサンプルプログラム
A列に並んでいるデータを3点移動平均法によって平滑化し、
B列に表示するプログラム
Dim a As String 'セルのチェック用
Dim aa As Single, bb As Single, cc As Single, ave As Single
'aa,bb,cc セルの読み込み用、ave 平均用
Dim i As Integer 'カウンタ(Do~Loop内で使用)
i = 1
'変数の初期化、一段下から始める
looptop:
i = i + 1
a = Cells(i + 1, 1).Value 'セルのチェック
If a = "" Then GoTo loopend '空白だったら終了
aa = Cells(i - 1, 1).Value '注目点のひとつ上
bb = Cells(i, 1).Value
'注目点
cc = Cells(i + 1, 1).Value '注目点のひとつ下
ave = (aa + bb + cc) / 3
'平均算出
Cells(i, 2).Value = ave
'平均を注目点の隣のセルに書き込み
GoTo looptop
loopend:
科学にエクセルを利用する利点は、大量のデータを統計的に処理出来る点である。
計算精度はMathmatica等よりも劣るが、簡単にデータを視覚化することができる。
また、データを入出力できるセルがはじめから用意されていることは、
エクセルでプログラムを作る上での最大の利点である。
おまけ