10
変数

test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

Embed Size (px)

Citation preview

Page 1: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

変数

Page 2: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

test1 を実行してみてください。結果は

メッセージボックスに 100 と表示される

はずです。 このプルグラムでは a という文字がつ

かわれています。MsgBox の機能はこの

命令に続くものを画面に表示することで

す。つまり、a*a を表示しています。プログラムでは*は掛け算を意味しますの

で画面に 100 が表示されたということは a*a すなわち、a の 2 乗が 100 という

ことになります。この命令の上の行を見てみると a=10 とあります。つまり、aは 10 に等しいと定義しています。いったん定義してしまえば、a を用いて式を

書くことで計算ができていることがわかります。 このように a は値を格納しています。こ

の a のようなものを変数と呼びます。変数

は数字や文字などを格納するは容器だと

考えればいいでしょう。変数は変数の規格

に合えば何度でも値を入れ替えることが

できます。test2 を修正してみてください。

初に 100 が表示され、続いて 400 が表

示されるはずです。このように変数に値を

入れ替えることで計算を行うことができ、

プログラムの一般化ができます。 変数を使うためには規則があります。まずは、変数を使うことを定義(宣言) する必要があります。プログラムの 2 行名の命令が変数の定義です。変数の定

義は次のように行います。

変数の定義は上記のように記述されます。 ア : 変数の定義を行いますという宣言 イ : 定義する変数名 変数名は自由につけることができるがアルファ

ベットと数字および_(アンダーライン)でその変数が

何を意味するかを考えてつけるようにすると良い。ただ

し、頭文字に数字やアンダーバーは使うことができな

い。漢字やひらがなカタカナなども使うことができるが

別のコンピュータに持って行った場合にエラーを起こす

Sub test1() Dim a As Integer a = 10 MsgBox a * a End Sub

Sub test2() Dim a As Integer a = 10 MsgBox a * a a = 20 MsgBox a * a End Sub

Dim X1 As Double ア イ エ オ

Page 3: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

可能性があるので使うべきではない エ : イの変数をどの様な変数として定義するかという意

味の命令 オ : 変数の種類

変数の種類には次のようなものがあります。 データの型 データの特徴 データの例と範囲

Integer 整数(小数点のつか

ない数値) 0,5, 100 -32768~32767

Long 桁数の大きい整数

(Integer も含む) -24534, 100000000 -2147483648~2147483647

Single 実数(小数点を含む

数値) -2.0, 12.8 負:-3.4E+38~-1.4E-45 正:1.4E-45~3.4E+38

Double 桁数がかなり大きい

実数(Single も含

む)

-2.5×1050, 3.5×10-100

負:-1.8E+308~-1.9E--324 正:4.9E-324~1.8E+308

String 文字 カレーうどん、大学 変数の型としては上記のもの以外にも Date, Byte 等があります。

ここでは必要ないので割愛します。 プログラムで定義する変数は常にプログラムの一番 初で定義

します。そして、この変数の有効範囲は定義した部分から End Subまでです。すなわち、Private・・・・End Sub がその変数が有効

な範囲です。プログラムではそれぞれのコマンドボタンやテキスト

ボックスなどにそれぞれプログラムを記述することができます。そ

の単位をプロシージャと呼びますが、通常、変数は各プロシージャ

内でのみ有効です。つまり、別のプロシージャで同じ変数を定義す

ることが可能です。 test3 を実行してみてください。実行するとエラーが発生します。

Sub test3() Dim a As Integer Dim b As Integer a = 1000 b = a * a MsgBox b End Sub

Page 4: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

このエラーは変数が扱うことのできる範

囲外の値が変数に代入されたことを意味

しています。上の表を見ると 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 と同様にオーバーフロー

です。ここでは a4を計算しています。

結果は 1012ですので間違いなくオー

バーフローします。整数で扱うこと

のできる数値に 大値は Long まで

で す 。 こ れ よ り 大 き な 値 は

Single,Double で扱います。 test6 を実行してみてください。こ

れでは bは Single として定義されて

います。また、先ほどの Long の場合

と同じように Integer である a を

Single に変換する必要があります。

その関数が CSng です。

Sub test4() Dim a As Integer Dim b As Long a = 1000 b = CLng(a) * CLng(a) MsgBox b End Sub

Sub test5() Dim a As Integer Dim b As Long a = 1000 b = (CLng(a) ^ 4) MsgBox b End Sub

Sub test6() Dim a As Integer Dim b As Single a = 1000 b = (CSng(a) ^ 4) MsgBox b End Sub

Page 5: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

test7 を実行してみてく

ださい。実行するとま

ず、値を入力するための

InputBox が現れます。

これは使用者に何か入

力を求める場合に用い

ます。入力された値や文

字は等号の左側にある

変数に代入されます。プ

ログラムで用いられる

等号は数学の様に等しいということを意味するというより右辺を左

辺に代入するという意味の方が強いです。 test7 では a,b に入力された値の四則演算が行われ、Cells の命令

でエクセルシートへ表示されています。Cells はエクセルシートのセ

ルを行列形式で指定して表示します。 test8 を実行してみましょう。このプログラムでは数値なく文字を

入力します。変数の定義でも String になっています。入力された文

字は変数 moji1,moji2 へ格納され、Cells 関数でエクセルシートへ表

示されます。ただし、 後の Cells の右側は moji1 & moji2 となって

います。&の前後には空白を入れてください。&の意味は文字を結合

するという意味です。結果を見てみると確かに 6 行 6 列目のセルに

2 つの文字が結合した結果が現れているはずです。

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 End Sub

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 End Sub

Page 6: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

Worksheets 関数

エクセルシートで新しいシートを追加した後に 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 枚のシートに文

字が表示されているはずです。

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 End Sub

Page 7: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

フローチャート プログラムを作るときに重要なことは処理手順を明確にしたのち

にプログラムを組むことです。その処理手順を示すものがフローチ

ャートです。プログラムを組む前のしっかりとしたフローチャート

が出来上がっていればプログラムは完成したも同然です。また、フロ

ーチャートを書くことができるということはプログラムだけでなく

日常の作業の時にも手順を明確にできるということですので特に実

験を行うときには重要です。 フローチャートを作るときには下のような記号を使います。

端子

フローチャートの始

まり及び終わり

ループの開始

処理

計算、代入などの処理 ループの終了

サブプロシージャ

定義済みの処理 入出力

ファイルへの入出力

判断

条件分岐 ページ内結合子

表示

結果の表示 ページ外結合子

フローチャートを作成する際の基本事項は以下の通りです。 (1)フローチャートの 初と 後を明確にする。 (2)基本的に処理は上から下へ流れる。 (3)処理の流れが変わるときには分岐構造、反復構造を用いる。 (4)線が交差しないようにする。 フローチャートは基本的に順次構造、分岐構造、反復構造で構成され

る。

Page 8: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

順次構造 実験の次の手順をフローチャートで表してみる。

実験1 0.1mol/l のシュウ酸水溶液を作る

1. XXXg のシュウ酸2水和物を精秤する

2. 100ml のメスフラスコに完全に移す

3. 水を約半分位まで加える

4. 完全に溶解する

5. メスアップする

これをフローチャートで表すと次のようになります。この流れは1-4を順次

実行するだけです。

この手順では単純に上から下へ作業を行うだけです。

100ml のメスフラスコに完全に移す

水を約半分位まで加える

完全に溶解する

メスアップする

Page 9: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

分岐構造

条件によって処理が異なる場合がある。分岐構造である。条件判

断には を用いる。次のようなフローチャートを考えてみ

る。

実験2 滴定を行う

1.水酸化ナトリウムを滴下する。

2.溶液を撹拌する。

3.色を確認する。透明の場合は1.へ戻る。赤色の

場合は4.を行う。

4.ビュレットの目盛を読む。

この操作では滴下し、混合した後に色を判断する。色によって操作

が異なります。

滴定をおこなう

水酸化ナトリウムを滴下する

溶液を撹拌する

ビュレットの目盛を読む

透明

赤色

Page 10: test1polymer.chem-bio.st.gunma-u.ac.jp/VBAbasic2.pdftest4 ではb はLong ですので十分 に結果を扱うことができます。結果として1000000 が表示されたは

反復構造

ある操作を複数回行う場合には反復構造を使います。次の操作を

考えてみましょう。

実験3 吸光度を測定する。

1.波長を 300nm に合わせる

2.波長が 300-500nm にあるか判定する。範囲外

の場合は終了

3.吸光度を読む。

4.波長を変更する。2.を実行

このような場合には命令の使い方によって下の様に複数の表現の仕

方がある。状況によってどちらが便利であるかが異なる。

吸光度を測定する

吸光度を読む

ループ

波長を 300-500nm の範囲で変化させる

ループ

吸光度を測定する

波長を 300nm に合わせる

吸光度を読む

Yes

No

波長を変更する