管理栄養士のためのVBA入門!第4回:変数と定数について理解しよう

みなさん、こんにちは。

シンノユウキです。

今回は「管理栄養士のためのVBA入門」の第4回、以下の記事の続きです。

管理栄養士のためのVBA入門!第3回:セルを操作してみよう
みなさん、こんにちは。 シンノユウキです。 今回は「管理栄養士のためのVBA入門」の第3回、以下の記事の続きです。 前回はメッセージボックスを表示させるプログラムを書いてみましたが、今回はExcelシートのセルを操作す...

前回はセルに値を入力したり、値を利用して計算してみたりしました。今回は、複雑なプログラムを組む際に必要となる知識、「変数」と「定数」について解説してみます。変数と定数を利用することで、プログラムが読みやすく、また簡便に書けるようになります。

では、行きましょう。

 

前回の演習問題の答え合わせ

まずは前回の演習問題の答え合わせからやっていきましょう。実際の問題は以下の通りです。

以下の表をExcelシートのA1にコピーし、zの値を求めてください。ただし、Range関数ではなく、Cells関数を用いてセルの値を取得するようにしてください。

x 5
y 3
z
合計 10

 

答えは以下の通りです。

Sub lesson()
    Cells(3, 2).Value = Cells(4, 2).Value - Cells(1, 2).Value - Cells(2, 2).Value
End Sub

別段、難しい計算ではないですよね。

x + y + z = 10 なので、
z = 10 - x - y 、これをプログラムで行い、該当するセルに入力しました。

Cells(3, 2).Value がzを、
Cells(4, 2).Value が合計を、
Cells(1, 2).Valueがxを、
Cells(2, 2).Valueがyをそれぞれ示しています。それを用いて計算すると答えが導き出されます。

 

変数について

はじめに、変数について紹介します。

変数というのは、プログラムで何らかの処理を行ったりする際に、数値などを一時的に保存しておくための箱のようなものです。変数を用いることで、より複雑な処理が可能になります。マクロの記録では変数は利用できないので、VBAを扱えるようになることで利用できるツールの一つです。

変数は、名前を付けて利用します。アルファベットでも日本語でも変数名に使用することができます。ただし、いくつかの制限があり、先頭を数字や記号にしたり、VBA内に最初から使用されている言葉(予約後と呼ばれるものでValueなど)は利用できません。

変数は、プログラム内において、Dimステートメントを利用して宣言されます。その際には、変数の型を宣言する必要があります。例として、いくつかのデータ型を以下に示してみます。

型名 表示 範囲
整数型 Integer -32768 ~ 32767 1
長整数型 Long -2147483648 ~ 2147483648 1
文字列型 String 0 ~ 65535 文字 エクセル

 

Integer と Long は扱える数字の大きさに主な違いがあります。特別な理由がない限りは数字においては Long を使用すると考えて差し支えないでしょう。

では、前回の演習問題を、変数を用いて書き換えてみましょう。以下のようになればOKです。

Sub lesson()
    Dim x As Long, y As Long, z As Long, 合計 As Long
    x = Cells(1, 2).Value
    y = Cells(2, 2).Value
    合計 = Cells(4, 2).Value
    z = 合計 - x - y
    Cells(3, 2).Value = z
End Sub

 

できましたか?

変数は、カンマで区切ることで一行で入力することができます。変数名の後に as でデータ型を宣言します。以下のような書式ですね。

Dim 変数名 as データ型

変数に値を代入する際は、

変数名 = 代入する値

で行うことができます。

変数を利用することで、利用しない場合と比べて、その値がなにを示しているのかを可視化できるため、計算式が見やすくになりましたよね。今回の例は単純であったために、変数を利用することの有効性なんかを認識しにくいかと思いますが、もっと複雑なプログラムを書くようになったら、その有効性を理解することができるようになると思います。

 

定数について

先に説明したのは変数ですが、今回は定数について説明していきます。

変数は、その名の通り、「変」わる数です。少し例をあげてみます。以下のようなプログラムがあった際に、表示されるメッセージは何だと思いますか?

Sub lesson()
    Dim a As Long
    a = 10
    a = 20
    MsgBox a
End Sub

 

正解は「20」です。先にaに10という数字を代入しましたが、その次の行で20を代入していますよね。これによって先の10は、20という後から代入された数字で上書きされてしまいました。つまり、そのプログラム中で中身が変わることがあるのが変数です。

それに対して、定数は、一度宣言すると、その中身を変更することができません。その名の通り、「定」まった数なのです。なので、定数はプログラム中で変更する必要のない数や、文字列に使用します。以下のようなコードが、定数の使い方の典型といえるでしょう。

Sub lesson()
    Dim val As Long
    Const TAX As Double = 1.08
    val = 1000 * TAX
    MsgBox val
End Sub

 

消費税率(TAX)を定数として宣言しました。

定数は、以下のような形で記載します。

Const 定数名 as データ型 = 値

消費税率は、コードの中では一定で、変更されることはありません。そのような値は、変数ではなく定数として宣言すべきです。

 

変数・定数の命名方法

変数や定数には、ある種の例外を除いて、好きなを名前をつける事ができます。しかし、好きな名前をつける事ができるといっても、ある種の推奨される命名規則があります。それには大きく分けて3つ、キャメルケース、スネークケース、ケバブケースがあります。

表にまとめると、以下のようになります。

ケース名 使用例
キャメルケース camelCase 関数名
スネークケース SNAKE_CASW 定数名
ケパブケース kebab-case あまり使わない(HTML)

 

これらの命名規則の違いは、変数における単語と単語との間をどのように表現するかです。キャメルケースは次の単語の最初の文字を大文字にすることによって表現し、スネークケースはアンダーバーで区切り、ケバブケースでハイフンで区切っています。

またそれぞれは使用するケースがある程度決まっており、キャメルケースだと関数名や一般的な変数名に、スネークケースはすべてを大文字にして定数名に、ケバブケースはVBAではあまり使われず、HTMLなどのクラス名などに用いられます。

もちろん、これらの命名規則を必ず使用しなければいけないという決まりはありませんが、使用することで他人が読んでもある程度わかりやすいコードにすることができます。私一人しかこのコードは読まないという場合もあるかもしれませんが、そのコードをいつ他人にわたすことになるかもしれませんので、できるだけわかりやすく書くことを意識しましょう。

 

演習問題

以下の表をA1セルにコピーし、それぞれの栄養素におけるエネルギーを求めてください。その際には、アトウォーター係数を定数として用いてください。念のために説明しておくと、炭水化物、脂質、炭水化物のアトウォーター係数は、それぞれ4・9・4です。

摂取量
(g)
エネルギー
(kcal)
たんぱく質 40
脂質 50
炭水化物 150

まとめ

今回は、変数・定数について基本的な知識を解説しました。複雑なプログラムを組んでいく際には、必須となる知識です。しっかりと理解しておきましょう。

 

連載目次

[[vba-intro-index]]