Chapter 6 演算子(算術演算子)

イントロダクション コース

テーマ

 第6回目となる本稿のテーマは、「算術演算子を使う」です。

 これまでに「変数」とその変数の型を規定するデータ型として、整数を扱う型および実数を扱う型を学習してきました。変数は宣言によってそのデータ型を指定し、その変数が使用可能なメモリーサイズを決めることが出来ました。また、それぞれのデータ型には初期値があり、扱えるデータの種類が異なるということも学びました。しかしながら、今まで例示してきたような変数への値の代入と、変数からの値の取り出し(例えば取り出した値をセルへの表示する)は変数の使い方のごく一部にすぎません。本稿では、変数と数値の演算について学習し、変数の使用用途を広げていきたいと思います。

演算と演算子

演算

 プログラムは、コンピューターが実行する「仕事」をコンピューターが理解できるような形で人間が作成したものです。そしてコンピューターに行わせるその「仕事」を細かく分割していくと、「演算」に行きつきます。様々な演算を組み合わせ、順序を決定し、ときにはフローを分岐したり合流したりすることで一つの仕事をコンピューターにさせているわけです。演算という言葉はあまり馴染みのない言葉かもしれませんが、平たく言えば計算のことです(コンピューティングの分野では演算という言葉を使いますが意味は計算と同じです)。まずは基本的な演算を理解し、使えるようにすることが本稿の学習目標となります。

オペレーターとオペランド

 まず最初に演算に関する呼び名をご紹介します。

 a + 10

 このような式があるとき、+ 記号を演算子と呼びます。この「演算子」を英語に翻訳すると operator となります。そのため、しばしば演算子のことをカタカナでオペレーターと表現することがあります。また、この演算子の演算対象となる変数 a や定数 10 のことを被演算子と言いますが、英語に翻訳すると operand となるため、オペランドと表現することもあります。これらの呼び名は VBA だけの話ではなくその他のプログラミング言語でも同じ呼び名で呼ばれています。本コースでもオペレーター、オペランドという言葉を用いることがありますので少しずつ慣れていってください。

演算を意味する記号を 演算子 及び オペレーターと呼びます。

演算の対象となる変数及び定数を オペランド と呼びます。

四則演算と四則演算子

 もっとも理解しやすい演算は、おそらく四則演算だと思います。みなさんも良くご存知の加減乗除のことです。サンプルのプログラムを作成して実際に四則演算を行ってみましょう。以下のマクロを Sheet1 シートモジュールに記述してください。

Public Sub Chapter6()

    Me.Cells.Clear
    
    Dim today As Long
    Dim tomorrow As Long
    Dim yesterday As Long
    
    today = 16
    tomorrow = today + 1
    yesterday = today - 1
    
    Me.Cells(1, 1).Value = "今日の日付は"
    Me.Cells(1, 2).Value = today
    Me.Cells(2, 1).Value = "明日の日付は"
    Me.Cells(2, 2).Value = tomorrow
    Me.Cells(3, 1).Value = "昨日の日付は"
    Me.Cells(3, 2).Value = yesterday
    
    Dim annualSalary As Long
    annualSalary = 10000000
    Me.Cells(5, 1).Value = "彼の年棒は"
    Me.Cells(5, 2).Value = annualSalary
    
    Dim dailySalary As Long
    dailySalary = annualSalary / 365
    Me.Cells(6, 1).Value = "彼の一日あたりの収入は約"
    Me.Cells(6, 2).Value = dailySalary
    
    Dim weekly As Long
    weekly = dailySalary * 7
    Me.Cells(7, 1).Value = "彼の一週あたりの収入は約"
    Me.Cells(7, 2).Value = weekly
    
    Me.Cells.Columns(2).AutoFit
    Me.Cells.Columns(2).NumberFormatLocal = "#,##0_ "
        
End Sub

 今回は少し長いマクロとなりましたが順を追って見ていきましょう。

 まず冒頭にある Me.Cells.Clear です。この Clear メソッドは今回初めて使います。前回は Me.Cells.ClearContents を使ってセルの値を消去しましたが、今回は Clear メソッドを使って値だけでなく、書式も含めて消去します。この二つのメソッドは比較的利用頻度の高いメソッドですので、以下に整理しておきます。

Clear メソッドはセルの書式情報と値、式を全て消去します。

ClearContents メソッドはセルの値と式を消去し、書式設定は残ります。

 このように Me.Cells.Clear によってシート全体の値、式、書式設定を消去した後、today, tomorrow, yesterday という 3つの Long 型変数を宣言しています。この3つの変数は日付を保持する変数として利用します。変数 today に 16 を代入し、変数 tomorrow には today + 1 と今日の日付に 1 を加算した整数を代入しています。また、yesterday には today -1 として今日の日付から 1 を減算した整数を代入しています。

    today = 16
    tomorrow = today + 1
    yesterday = today - 1
    

+ 演算子は加算、- 演算子は減算を行います。この例の 10 行目の場合、オペレーター + の左側のオペランドである変数 today と右側のオペランドである整数 1 を加算する演算をします。11行目の場合も同様に、today から 整数 1 を減算するという演算を – 演算子が行います。

 そして A1 セルには「今日の日付は」というテキストを表示させ、B1 セルに変数 today の値を代入して表示させています。B1 には 16 が表示されているはずです。同様に、A2 セルに「明日の日付は」と表示し、B2 セルに変数 tomorrow が保持している整数 17 を、A3 セルには「昨日の日付は」と表示させ、B3 セルには変数 yesterday が保持している整数 15 を表示させています。

 続いて除算と乗算について見ていきましょう。

 Long 型変数 annualSalary には、10,000,000 という数値を代入しています。この変数は年棒を保持する変数として利用しています。変数へ代入後すぐにシートの 5 行目に表示していますね。

    Dim annualSalary As Long
    annualSalary = 10000000
    Me.Cells(5, 1).Value = "彼の年棒は"
    Me.Cells(5, 2).Value = annualSalary
    
    Dim dailySalary As Long
    dailySalary = annualSalary / 365
    Me.Cells(6, 1).Value = "彼の一日あたりの収入は約"
    Me.Cells(6, 2).Value = dailySalary
    
    Dim weekly As Long
    weekly = dailySalary * 7
    Me.Cells(7, 1).Value = "彼の一週あたりの収入は約"
    Me.Cells(7, 2).Value = weekly

dailySalary = annualSalary / 365

26 行目にあるこのコードは、変数 annualSalary を 365 で除算して一日当たりの収入を計算しています。既にお分かりだと思いますが、/ は除算を行う算術演算子であり、/ の左側のオペランドを右側のオペランドで除算します。

weeklySalary= dailySalary * 7

31 行目のこのコードは、変数 dailySalary に 7 を乗算しています。* は乗算を行う算術演算子であり、* の左側のオペランドと右側のオペランドを乗算します。この演算結果を変数 weeklySalary へ代入することで weeklySalary には一週あたりのおよその収入が保持されます。

 さて、このマクロを実行してみましょう。F8 キーを押してステップイン実行です。ステップイン実行は 1 行ずつ実行しますのでマクロが終了するまで F8 キーを何度か押してください。途中で変数をポイントすると現在の変数の中身を見ることが出来ます。このようなデバッグの操作は慣れが必要なのでご自身で何度か繰り返してみてください。

 ここで一つ重要なことを補足したいと思います。dailySalary には annualSalary / 365 という演算の結果を代入し 27,397 という整数が保持されています。本来、annualSalary / 365 の演算結果は、27397.2602739 と割り切れない数値のはずですが、dailySalary は整数を保持しています。これは変数 dailySalary が Long 型であるためです。つまり整数しか扱うことが出来ない変数であるため、本来の演算結果を一の位でまるめた整数が代入されたということです。このように、Byte や Integer、Long 型のような整数を扱うデータ型の変数へ実数を代入すると、小数点以下は丸められ※、整数として値が代入されます。ここまでの内容を整理しましょう。

※この「丸め」は四捨五入とは若干異なります。殆どの実数が四捨五入によって丸められるのですが、一部四捨五入とならない小数があります。それは小数部がちょうど 0.5 であった場合です。例えば 1.5 を Integer 型へ代入すると(丸める)と 2 となり 2.5 を Integer 型へ代入すると(丸める)と 2 となります。つまり、最も近い偶数に丸められるという特徴があります。微妙な差ではありますので現時点では四捨五入されると考えても差し支えありません。

四則演算は、加減乗除それぞれ + – * / という演算子(オペレーター)を使用します。

四則演算の式は、算数と同様です。

Byte、Integer、Long 等の整数型変数へ、演算結果が実数となる式を代入すると、小数点第一位で四捨五入された整数が代入されます。(小数部が 0.5 ちょうどのときだけ一番近い偶数が代入されます)

その他の算術演算と演算子

 続いて、四則演算以外の演算子を紹介していきます。以下のコードを Sheet1 シートモジュールへ記述してください。

Public Sub Chapter6_2()
    
    Dim operand2 As Long
    Dim operand3 As Long
    Dim operand5 As Long
    
    operand2 = 2
    operand3 = 3
    operand5 = 5
    
    Debug.Print
    Debug.Print 2 ^ 3
    Debug.Print operand2 ^ operand3
        
End Sub

2 ^ 3

この式のオペレーターは ^ です。キャレットと読み、2 の 3乗という演算を行います。オペレーターとオペランドの間には半角スペースが必要です。実行してイミディエイトウインドウに表示される数値を確認してみてください。

operand2 ^ operand3

もちろん、このようにオペランドに変数を使うことも出来ます。operand2 は 2 を保持しており、operand3 は 3 を保持しているので結果は 2 ^ 3 と同じです。

 以下のコードを上記マクロに追記しましょう。下のサンプルでバックスラッシュが表示されていますが、日本語環境では \ と表示されます。

    Debug.Print 5 \ 3
    Debug.Print operand5 \ operand2

上にあるコードブロックは海外製なので \ 記号がバックスラッシュとなっていますが、日本語環境では \ 記号です。

5 \ 3

この式のオペレーターは \ です。商を演算します。商とは割り算を行った結果の整数部を言います。この例では 5 ÷ 3 = 1.66666… の 1 のことです。他の算術演算子と同様、オペランドに変数を用いることが出来ます。operand5 \ operand2 は 5 ÷ 2 = 2.5 の整数部ですから 2 が表示されます。

 さらに以下のコードを上記マクロに追記します。

    Debug.Print 5 Mod 3
    Debug.Print operand5 Mod operand3

5 Mod 3

この式のオペレーターは Mod です。これは記号ではありませんがオペレーターです。Mod は割り算の余りを演算します。この例では 5 ÷ 3 は 1 余り 2 ですので、この式の結果は 2 となります。このオペレーターも、オペランドに変数を用いることが出来ますので、operand5 Mod operand2 は、2 という結果となります。

もう一つ紹介したいと思いますので、以下のコードを上記マクロへ追記してください。

    Debug.Print -5
    Debug.Print -operand2
    Debug.Print -(5 + 3)

5

この式のオペレーターは、- です。これは減算オペレーターと同じ記号ですが、異なる演算を行います。オペレーターの後ろにあるオペランドの正負を反転させる演算です。またこのオペレーターとオペランドの間にはスペースが不要です。他のオペレーターと同様、オペランドに変数を使用できます。また、20 行目のように記述した場合、() 内の演算が先に行われ、その結果である 8 がオペランドとなります。8 の正負が反転され、-8 となるわけです。

まとめ

オペレーター演算の種類オペランド使用例演算結果
+加算両側1 + 23
減算両側1 – 2-1
*乗算両側2 * 36
/除算両側5 / 22.5
^べき乗両側2 ^ 38
\両側5 \ 22
Mod余り両側5 Mod 21
正負の反転右側-(2 * 5)-10

 本稿で学習したオペレーターを一覧にしました。これらをひとまとめにして算術演算子と呼ぶことがあります。(もう一つ & というオペレーターもありますが、その紹介はテキストの操作を説明する際に紹介します)

それでは本稿はここで終わりにします、お疲れさまでした。また次回お会いしましょう。

タイトルとURLをコピーしました