四則計算(プログラムに慣れよう)


  セルからの数値(整数)の入力と出力 (含む四則計算)

   本講義で用いているExcelに搭載されたVBAでの数値などの入出力は、従来の(コンソール入出力型)プログラミング言語におけるそれとは大きく異なる(同じようにすることも可能ではあるが...)。すなわち、ワークシート(表)の各セルに対して入出力ができるのである。
   ワークシートの各セルから数値などのデータを読み取ったり、そこに書き込んだりできるということは、極めてデータの見通しがよく、即座にグラフ化できるなどの利点を有する。

   このパートでは、まず、ワークシートを整備(編集)する必要がある(プログラム実行に向けての下準備)。以下のように予め各セルに文字を入力しておく(適当に色付けも行う)。また、以下で黄色と水色で示されたセルは、”セルの書式設定”−”表示形式”において”数値”−”小数点以下の桁数”を3に設定しておく。また、それらのセルには初期値として0(零)を入力しておく。

   次に、以下のプログラムリストをみてほしい。

   本授業で2番目のプログラムであるが、早くも変数を用いたプログラムである。変数は数学でいうと y=2x+5 における x や y などのことである(コンピュータプログラムにおいては数学の概念が一部通用しないことがあるので注意する)。また、変数名は各自、自由につけることができる。ただし、英文字から始まり、数字を混ぜる変数名だけに限定して使用するのがよい(例:u、i1、sigma、dat123)。さらに、変数名には予め決まっているキーワード(予約語という:sub、if、end、for等)は使用できないし、一般に大文字小文字の区別がない( abc=Abc=ABC=aBc ... )ので注意する。

   ※ 予約語の詳細は、”Visual Basic リファレンス”を参照

   さて、下のプログラムで(何をやっているのか)わからない箇所も多いことと思う。もちろん、記号などの全てに意味があるが、多くのプログラムに親しみ覚えていくのも一つの方法であろう。
       既に解説した方法にならって本プログラムを記述してみる。リスト中でコメントしているように、このパートで取り扱う数字は全て整数である。

   その後、さきほど作成したワークシートの黄色の部分にそれぞれ”20”および”3”を入力してみる( a=20、b=3 )。次に、本プログラムを実行[メニューより”ツール”−”マクロ”−”マクロ”を選択し、”MainProc”というマクロ名を選んで”実行”ボタンを押す]すると、以下のように表示される。   

   水色の部分に四則計算結果が表示される。ここで割り算に注目してみると、”6.667”ではなく”7.000”が表示されている。この場合、変数が整数型であるため、割り算の結果が四捨五入されて変数j4に代入されたのである。


   この結果をみながらプログラムを確認してみる。
   1行目のような行を、コメント行という。すなわち、シングルコーテーション の後ろはプログラムには影響しない部分となる(プログラムを理解するために用いる)。
   2行目に書かれている”Option Explicit”は、変数を宣言せずには使用できないようにするものであり、今回以降の本講義のプログラムには必ず先頭にいれておく。
   4行目は、Subプロシージャ”MainProc”の開始行であるが、しばらくはこの部分も固定する。

   6〜8行目が、整数( 英語で”Integer”という)変数を宣言している部分である。この形は、多くのサンプルプログラムをみて身につけよう(もちろん、リファレンスで把握することも重要であるが)。

   10行目は、"A2"セルの値を変数"i1"へ代入する記述である。”ActiveSheet.Range("A2").Cells(1, 1).Value”が"A2"セルの値を示す部分である。

   13〜16行目が、四則計算を行っている部分である。ここでは、演算記号を覚えよう。
   また、数学では、13行目は"j1"と"i1+i2"が等しいという意味になるが、この場合
   コンピュータプログラムでは、右辺の値"i1+i2"を左辺の変数"j1"に代入するという意味になるので注意する。

   21行目は、j4の値を"E5"セルへ代入する記述である。”ActiveSheet.Range("E2").Cells(4, 1).Value”が"E5"セルの値を示す部分である。ここでは、"E2"セルに対して相対的に4番ほど下の行を示す記述をしているので、"E5"セルが参照されるのである。ちなみに、”ActiveSheet.Range("E2").Cells(34).Value”とすると参照されるのは、"H4"セルである。


 ○ ワークシートの黄色の部分にそれぞれ”19.7”および”6.2”を入力して( a=19.7、b=6.2 )、本プログラムを実行すると、a=20、b=6と入力したときと同じ結果が表示される(これも変数に代入される段階で四捨五入されたのである)。   

   ついでに、実行時エラーを経験してみよう。ワークシートの黄色の部分にそれぞれ”20”および”0”を入力して( a=20、b=0)実行する。この場合、割り算の結果が数学的エラーになるため、以下のようなエラーメッセージを表示してプログラムは終了する。  


 


 ●
 数値(整数)の入力と出力 (含む四則計算)

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
' 宣言していない変数を使用不可にする.
Option Explicit
 
Sub MainProc()
 
    Dim i1 As Integer, i2 As Integer
    Dim j1 As Integer, j2 As Integer
    Dim j3 As Integer, j4 As Integer
 
    i1 = ActiveSheet.Range("A2").Cells(1, 1).Value
    i2 = ActiveSheet.Range("B2").Cells(1, 1).Value
 
    j1 = i1 + i2
    j2 = i1 - i2
    j3 = i1 * i2
    j4 = i1 / i2
 
    ActiveSheet.Range("E2").Cells(1, 1).Value = j1
    ActiveSheet.Range("E2").Cells(2, 1).Value = j2
    ActiveSheet.Range("E2").Cells(3, 1).Value = j3
    ActiveSheet.Range("E2").Cells(4, 1).Value = j4
 
End Sub
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
コメント行
宣言していない変数を使用不可にする
 
Subプロシージャ”MainProc”の開始
 
整数変数i1,i2の宣言
整数変数j1,j2の宣言
整数変数j3,j4の宣言
 
"A2"セルの値を変数i1へ代入
"B2"セルの値を変数i2へ代入
 
足し算の結果を変数j1に代入
引き算の結果を変数j2に代入
掛け算の結果を変数j3に代入
割り算の結果を変数j4に代入
 
j1の値を"E2"セルへ代入
j2の値を"E3"セルへ代入
j3の値を"E4"セルへ代入
j4の値を"E5"セルへ代入
 
Subプロシージャ”MainProc”の終了

 


 ●
 プログラムの再利用について

   プログラムを何種類か作成していくと、前に作ったものに似ているプログラムを作らなければならないときがある。そのとき、最初から入力していたのでは効率が悪い。この場合、まず前のプログラムを含むファイルを名前を変えてコピーする。そして、そのコピーしたファイルを書き換えるとよい(オリジナルは保存しておく)。なお、コピー元のファイルを雛型あるいはテンプレートと呼ぶことがある。
   
 
 

  セルからの数値(実数)の入力と出力 (含む四則計算)

   このパートで取り扱う数字は全て実数(Real)である。コンピュータプログラムにおける実数は、数学の実数とは多少異なる。簡単には、小数点を含む数字と考えればよい(例:0.56、1.23、3.0)。また、整数の5を5.0と書けば実数扱いとなる。上のプログラムと以下に示した本プログラムを比較してほしい。ここで変数の宣言部が異なっている(なお、変数名も異なっているが、これはプログラムの処理には関係ない)ことに注意する。

   上のパートで作成したワークシートの黄色の部分にそれぞれ”19.7”および”6.2”を入力して( a=19.7、b=6.2 )、本プログラムを実行すると、以下のように表示される。     

   今度の割り算の結果は、小数部も表示されていることを確認する。なお、この場合でも b=0.0 を入力すると実行時エラーとなる。  
 
  本講義では、実数表現にDouble型(倍精度浮動小数点型)を用いる(他に、Single型などがある)。

 

  数値(実数)の入力と出力 (含む四則計算)
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
' 宣言していない変数を使用不可にする.
Option Explicit
 
Sub MainProc()
 
    Dim a1 As Double, a2 As Double
    Dim b1 As Double, b2 As Double
    Dim b3 As Double, b4 As Double
 
    a1 = ActiveSheet.Range("A2").Cells(1, 1).Value
    a2 = ActiveSheet.Range("B2").Cells(1, 1).Value
 
    b1 = a1 + a2
    b2 = a1 - a2
    b3 = a1 * a2
    b4 = a1 / a2
 
    ActiveSheet.Range("E2").Cells(1, 1).Value = b1
    ActiveSheet.Range("E2").Cells(2, 1).Value = b2
    ActiveSheet.Range("E2").Cells(3, 1).Value = b3
    ActiveSheet.Range("E2").Cells(4, 1).Value = b4
 
End Sub
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
コメント行
宣言していない変数を使用不可にする
 
Subプロシージャ”MainProc”の開始
 
倍精度浮動小数点型変数a1,a2の宣言
倍精度浮動小数点型変数b1,b2の宣言
倍精度浮動小数点型変数b3,b4の宣言
 
"A2"セルの値を変数a1へ代入
"B2"セルの値を変数a2へ代入
 
足し算の結果を変数b1に代入
引き算の結果を変数b2に代入
掛け算の結果を変数b3に代入
割り算の結果を変数b4に代入
 
b1の値を"E2"セルへ代入
b2の値を"E3"セルへ代入
b3の値を"E4"セルへ代入
b4の値を"E5"セルへ代入
 
Subプロシージャ”MainProc”の終了

 

 
 
 ●
 実数の表示について

   プログラムとは直接関係ないが、上のパートで作成したワークシートの黄色と水色で示されたセルを、”セルの書式設定”−”表示形式”において”指数”−”小数点以下の桁数”を14に設定する。その後、ワークシートの黄色の部分にそれぞれ”19.7”および”6.2”を入力して( a=19.7、b=6.2 )、上記プログラムを実行すると、以下のように表示される。

     
   今回と前のパートで表示された数値は、コンピュータでは同じ意味を表している。今回の表示のように E (またはe)を伴った表示形式を指数形式の表示といい、入力や式中にも使うことができる。この形式の意味は以下を参照してほしい。

       1234.567  = 1.234567E+03
       0.0987  = 9.87E-02

       つまり、E の前の数字に10の[Eの後ろの数字]乗したものを示している。この形式は、コンピュータでは古くから用いられているので、エンジニアは必ず読めなければならない。

 

 戻る