変数
test1 を実行してみてください 結果はメッセージボックスに 100 と表示されるはずです Sub test1() a = 10 このプルグラムでは a という文字がつかわれています MsgBox の機能はこの命令に続くものを画面に表示することで MsgBox a * a す つまり a*a を表示しています プログラムでは * は掛け算を意味しますの で画面に 100 が表示されたということは a*a すなわち a の 2 乗が 100 という ことになります この命令の上の行を見てみると a=10 とあります つまり a は 10 に等しいと定義しています いったん定義してしまえば a を用いて式を 書くことで計算ができていることがわかります このように a は値を格納しています こ Sub test2() の a のようなものを変数と呼びます 変数 は数字や文字などを格納するは容器だと a = 10 考えればいいでしょう 変数は変数の規格 MsgBox a * a に合えば何度でも値を入れ替えることが a = 20 できます test2 を修正してみてください MsgBox a * a 最初に 100 が表示され 続いて 400 が表 示されるはずです このように変数に値を 入れ替えることで計算を行うことができ プログラムの一般化ができます 変数を使うためには規則があります まずは 変数を使うことを定義 ( 宣言 ) する必要があります プログラムの 2 行名の命令が変数の定義です 変数の定 義は次のように行います Dim X1 As Double アイエオ 変数の定義は上記のように記述されます ア : 変数の定義を行いますという宣言イ : 定義する変数名変数名は自由につけることができるがアルファベットと数字および _( アンダーライン ) でその変数が何を意味するかを考えてつけるようにすると良い ただし 頭文字に数字やアンダーバーは使うことができない 漢字やひらがなカタカナなども使うことができるが別のコンピュータに持って行った場合にエラーを起こす
可能性があるので使うべきではない エ : イの変数をどの様な変数として定義するかという意 味の命令 オ : 変数の種類 変数の種類には次のようなものがあります データの型 データの特徴 データの例と範囲 Integer 整数 ( 小数点のつかない数値 ) 0,5, 100-32768~32767 Long 桁数の大きい整数 (Integer も含む ) -24534, 100000000-2147483648~2147483647 Single Double 実数 ( 小数点を含む数値 ) 桁数がかなり大きい実数 (Single も含む ) -2.0, 12.8 負 :-3.4E+38~-1.4E-45 正 :1.4E-45~3.4E+38-2.5 10 50, 3.5 10-100 負 :-1.8E+308~-1.9E--324 正 :4.9E-324~1.8E+308 String 文字カレーうどん 大学変数の型としては上記のもの以外にも Date, Byte 等があります ここでは必要ないので割愛します プログラムで定義する変数は常にプログラムの一番最初で定義します そして この変数の有効範囲は定義した部分から までです すなわち Private がその変数が有効な範囲です プログラムではそれぞれのコマンドボタンやテキストボックスなどにそれぞれプログラムを記述することができます その単位をプロシージャと呼びますが 通常 変数は各プロシージャ内でのみ有効です つまり 別のプロシージャで同じ変数を定義することが可能です test3 を実行してみてください 実行するとエラーが発生します Sub test3() Dim b As Integer a = 1000 b = a * a MsgBox b
このエラーは変数が扱うことのできる範囲外の値が変数に代入されたことを意味しています 上の表を見ると Integer の範囲は -32768~32767 ですので a*a の結果は明らかに範囲外です 変数 b の型を Integer より大きな数値を扱うことのできる方に変更しましょう test4 を実行してみてください test4 では b は Long ですので十分 に結果を扱うことができます 結果として 1000000 が表示されたはずです ここで b=a*a としてプログラムを実行すると同じエラーが発生します これは a*a は Integer 同士の計算のため計算した結果も Integer 扱いになり 範囲を超えてしまうためです b=a*a では式の左辺は Long 右辺は Integer というように式の左右で変数の型が異なっています プログラム上では式の左右は同じ型にしないとこのようなエラーが生じます そこで右辺を Long に変換して計算する必要があります test4 で b = CLng(a) * CLng(a) としているのは右辺の a(integer) を Long に変換するためです Clng(X) は数値 X を Long に型変換する関数です これを使って CLng(a) で a を Long に 変換して計算しています test5 を実行してみてください ここでもエラーが発生します この場合も test3 と同様にオーバーフローです ここでは a 4 を計算しています 結果は 10 12 ですので間違いなくオーバーフローします 整数で扱うことのできる数値に最大値は Long までです これより大きな値は Single,Double で扱います test6 を実行してみてください これでは b は Single として定義されています また 先ほどの Long の場合と同じように Integer である a を Single に変換する必要があります その関数が CSng です Sub test4() Dim b As Long a = 1000 b = CLng(a) * CLng(a) MsgBox b Sub test5() Dim b As Long a = 1000 b = (CLng(a) ^ 4) MsgBox b Sub test6() Dim b As Single a = 1000 b = (CSng(a) ^ 4) MsgBox b
test7 を実行してみてください 実行するとまず 値を入力するための InputBox が現れます これは使用者に何か入力を求める場合に用います 入力された値や文字は等号の左側にある変数に代入されます プログラムで用いられる Sub test7() Dim a As Double Dim b As Double a = InputBox(" 値を入力してください ") b = InputBox(" 値を入力してください ") Cells(1, 1) = a + b Cells(1, 2) = a - b Cells(1, 3) = a * b Cells(1, 4) = a / b 等号は数学の様に等しいということを意味するというより右辺を左辺に代入するという意味の方が強いです test7 では a,b に入力された値の四則演算が行われ Cells の命令でエクセルシートへ表示されています Cells はエクセルシートのセルを行列形式で指定して表示します Sub test8() Dim moji1 As String Dim moji2 As String moji1 = InputBox(" 文字を入力してください ") moji2 = InputBox(" 文字を入力してください ") Cells(5, 5) = moji1 Cells(5, 6) = moji2 Cells(6, 6) = moji1 & moji2 test8 を実行してみましょう このプログラムでは数値なく文字を入力します 変数の定義でも String になっています 入力された文字は変数 moji1,moji2 へ格納され Cells 関数でエクセルシートへ表示されます ただし 最後の Cells の右側は moji1 & moji2 となっています & の前後には空白を入れてください & の意味は文字を結合するという意味です 結果を見てみると確かに 6 行 6 列目のセルに 2 つの文字が結合した結果が現れているはずです
Worksheets 関数 Sub test10() Dim moji1 As String Dim moji2 As String Dim WS As Object Worksheets(1).Activate Set WS = Worksheets(1).Application moji1 = InputBox(" 文字を入力してください ") moji2 = InputBox(" 文字を入力してください ") WS.Cells(5, 5) = moji1 WS.Cells(5, 6) = moji2 Worksheets(2).Activate Set WS = Worksheets(2).Application WS.Cells(6, 6) = moji1 & moji2 エクセルシートで新しいシートを追加した後に test10 を実行してみてください 赤字の部分が test9 から変化しています 新たに WS という変数が定義されています この変数は Object と定義されています これはエクセルのシートなどのオブジェクトを格納する変数です 次に続く 2 行はワークシートを指定する命令です Worksheets(1).Activate Set WS = Worksheets(1).Application 1 行目でワークシートを選択して そのシートを Object 変数 WS に格納しています セルを指定するときは WS を頭につけてどのシートのセルに表示するかを明示しています つまり WS.Cells(5,5) は WS で指定されたシートの 5 行 5 列めのセルへ値を表示しなさいという意味です 続いて下記 2 行が現れます Worksheets(2).Activate Set WS = Worksheets(2).Application ここでは表示するシートを変更しています ここでは 2 番目のシートへ表示するように変更しています 実行すると 2 枚のシートに文字が表示されているはずです
フローチャート プログラムを作るときに重要なことは処理手順を明確にしたのちにプログラムを組むことです その処理手順を示すものがフローチャートです プログラムを組む前のしっかりとしたフローチャートが出来上がっていればプログラムは完成したも同然です また フローチャートを書くことができるということはプログラムだけでなく日常の作業の時にも手順を明確にできるということですので特に実験を行うときには重要です フローチャートを作るときには下のような記号を使います 端子フローチャートの始まり及び終わり 処理計算 代入などの処理 サブプロシージャ定義済みの処理判断条件分岐 表示結果の表示 ループの開始 ループの終了 入出力ファイルへの入出力 ページ内結合子 ページ外結合子 フローチャートを作成する際の基本事項は以下の通りです (1) フローチャートの最初と最後を明確にする (2) 基本的に処理は上から下へ流れる (3) 処理の流れが変わるときには分岐構造 反復構造を用いる (4) 線が交差しないようにする フローチャートは基本的に順次構造 分岐構造 反復構造で構成される
順次構造実験の次の手順をフローチャートで表してみる 実験 1 0.1mol/l のシュウ酸水溶液を作る 1. XXXg のシュウ酸 2 水和物を精秤する 2. 100ml のメスフラスコに完全に移す 3. 水を約半分位まで加える 4. 完全に溶解する 5. メスアップする これをフローチャートで表すと次のようになります この流れは 1-4 を順次 実行するだけです 100ml のメスフラスコに完全に移す 水を約半分位まで加える 完全に溶解する メスアップする この手順では単純に上から下へ作業を行うだけです
分岐構造条件によって処理が異なる場合がある 分岐構造である 条件判断にはを用いる 次のようなフローチャートを考えてみる 実験 2 滴定を行う 1. 水酸化ナトリウムを滴下する 2. 溶液を撹拌する 3. 色を確認する 透明の場合は1. へ戻る 赤色の場合は4. を行う 4. ビュレットの目盛を読む この操作では滴下し 混合した後に色を判断する 色によって操作が異なります 滴定をおこなう 水酸化ナトリウムを滴下する 溶液を撹拌する 透明 赤色 ビュレットの目盛を読む
反復構造ある操作を複数回行う場合には反復構造を使います 次の操作を考えてみましょう 実験 3 吸光度を測定する 1. 波長を 300nm に合わせる 2. 波長が 300-500nm にあるか判定する 範囲外の場合は終了 3. 吸光度を読む 4. 波長を変更する 2. を実行このような場合には命令の使い方によって下の様に複数の表現の仕方がある 状況によってどちらが便利であるかが異なる 吸光度を測定する 吸光度を測定する 波長を 300nm に合わせる ループ波長を 300-500nm の範囲で変化させる No 吸光度を読む Yes 吸光度を読む ループ 波長を変更する