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

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

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

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

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

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

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

x5
y3
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 ,これをプログラムで行い,該当するセルに入力しました。

変数について

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

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

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

型名表示説明
整数型Integer-32768 ~ 32767の整数100
長整数型Long-2147483648 ~ 2147483648の整数100000
文字列型String文字列"エクセル"
日付型Date日付と時刻を表す#2020-01-01#

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

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

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

変数名の後に as でデータ型を宣言し,違う行で値等を設定します。以下のような書式ですね。

Dim 変数名 as データ型
変数名 = 代入する値

ただし,変数を宣言する行と代入する行とが違う場所にあると何かと読みづらいので,下記のようにコロンでつなぐことで1行で書くこともできます。

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 

まとめ

今回は,変数・定数について基本的な知識を解説しました。

込み入ったプログラムを組んでいく際には,必須となる知識です。しっかりと理解しておきましょう。

連載目次

  1. 管理栄養士のためのVBA入門|第1回:VBAとは?
  2. 管理栄養士のためのVBA入門|第2回:VBAを実行してみよう
  3. 管理栄養士のためのVBA入門|第3回:セルを操作してみよう
  4. 管理栄養士のためのVBA入門|第4回:変数と定数について理解しよう現在のページ
  5. 管理栄養士のためのVBA入門|第5回:条件分岐を理解しよう
  6. 管理栄養士のためのVBA入門|第6回:繰り返し処理を理解しよう
タイトルとURLをコピーしました