今回はVBA初心者講座の第6弾
【変数(へんすう)と定数(ていすう)って何だろう?】というお話です。
VBAを使いこなしてくると同じ内容を繰り返し使ったり、次々に内容を入れ替えていく処理をすることが度々出てきます。
そんな時に便利なのが「変数や定数」です。
この2つは使う場面がすごく多く、便利な機能なのでぜひ押さえておきましょう。
それでは、さっそく本編へ行ってみよう!!!!
目次を使って読みたい項目へ
変数と定数って何?
変数とは、簡単に言うと「使い回しが出来る箱」のようなものです。
定数とは、 簡単に言うと「使い回せない箱」のようなものです。
イメージで例えるとこんな感じ
こんな風に
変数(クーラーボックス)は、釣った魚、お茶やジュース等の飲み物、お肉や氷など色々な物を入れることが出来る便利な箱のようなモノです。
定数(ジュエリーケース)は、入れるものが決まっていて指輪しか入らないような、中身が変わらない箱だと思ってもらってOKです。
変数の具体的な使い方
まず、変数の具体的な使い方について見ていきましょう。
変数の特徴は、中身を自由に変えられることでしたね。
変数に入れる中身は、「数字や文字」など色々な物を入れることが出来ます。
例えば数字1つとっても「0~9」の10種類、また色々な桁数の数字を入れることが出来ます。
変数の使い方で一番良く使うパターンが次のような方法です。
Sub 変数とFor文の組み合わせ()
Dim i As Long
For i = 1 To 10
MsgBox i
Next i
End Sub
このコードを実行すると
こんな風にメッセージボックスに1~10の数字が表示されます。
終わらせるためには、「OK」ボタンを10回押すだけです。
今回はFor文を使った繰り返し処理をしていますが、Forの使い方は改めて解説します
今はこんな動きをするんだなと思ってもらえればOKです
ポイントは、3行目の「Dim i As Long」の部分です。
これが変数を宣言するという方法です。
意味はこんな感じになります。
変数を宣言する場合は、頭に「Dim」と入力「i」などの変数名を入れ「As 〇〇」で変数の種類を指定します
「Dim(ディム)」は「これは変数だよ」と宣言する(誰が見ても分かるように書くこと)
という言い方をします。
変数を宣言する場合は、「dim i as long」のように半角のスペースを空けましょう
また、小文字で入力してもスペルを自動的に修正してくれます
次の「i」は変数名と言って変数にしたい文字を指定します。
この変数名は日本語でもOKです。
例えばこんな風にしても大丈夫
Sub 変数とFor文の組み合わせ()
Dim 数字を表示 As Long
For 数字を表示 = 1 To 10
MsgBox 数字を表示
Next 数字を表示
End Sub
これでも実行結果は同じです。
ただ、繰り返しの処理をする場合は、長い文字だと分かりにくいので「i」や「n」を使って変数を宣言すると分かりやすいです。
私はこの「i」や「n」をカウンター(数字を順番に入れていく変数)と勝手に呼んでいます。
そして重要なことが1つあります。それが変数の名付けルールです。
公式のヘルプページではこんな風に書かれています。
2018/12/26
Visual Basic モジュールのプロシージャ、定数、変数、および引数に名前を付けるときには、次の規則を使用します。
- 文字で始まる必要があります。
- スペース、ピリオド (.)、感嘆符 (!) や、@、&、$、# などの文字は使用できません。
- 長さは 255 文字以内にする必要があります。
- 一般に、Visual Basic やホスト アプリケーションで使用されている関数、ステートメント、メソッド、および組み込み定数の名前は使用しないでください。 そのようにしないと、言語の同じ キーワードがシャドウされます。 割り当てた名前と競合する組み込みの言語関数、ステートメント、またはメソッドを使用するには、明示的に指定する必要があります。 組み込みの関数、ステートメント、またはメソッドの名前の前に、関連付けられている タイプ ライブラリの名前を付けます。 たとえば、Left という名前の変数がある場合、Left 関数を呼び出すには VBA.Left を使用する必要があります。
- 同じスコープのレベル内で名前を繰り返すことはできません。 たとえば、age という名前の 2 つの変数を同じプロシージャで宣言することはできません。 ただし、同じモジュール内で age という名前のプライベート変数と、age という名前のプロシージャ レベルの変数を宣言することはできます。
注意
Visual Basic では大文字と小文字は区別されませんが、名前が宣言されているステートメントの大文字と小文字の区別は保持されます。
このルールをすごく簡単にまとめると
- 文字で始める必要があるよ
- 使えない記号があるから気をつけよう
- 255文字を超える名前はつけられないよ
- 関数と同じ名前はつけちゃダメだよ
- 同じモジュール(プログラム)内で同じ名前の変数はつけられないよ
- 変数の小文字・大文字は区別するよ
こんなルールがありますが、そこまで複雑で長い名前を付けることは無いので心配しすぎないで簡単で分かりやすい名前を付けるようにしましょう
変数のデータ型って何?
変数にはデータ型というものがあります。
データ型とは、変数の種類を指定することで「As Long」の部分のことです。
データ型を付ける意味は、この変数は数字しか入れられないよとか、文字だけしか入れられないよといった制限を掛けることが目的です。
Long(ロング)は、「-2,147, 483,648 〜 2,147, 483,647」の間の数字であれば、入れる(格納する)ことができます。
種類がたくさんあるので、代表的なデータ型を少し紹介します。
型の名前 | 型の読み方と種類 | 格納できる内容 |
---|---|---|
Integer | インテジャー(短い数字) | -32,768 〜 32,767 |
Long | ロング(長い数字) | -2,147, 483,648 〜 2,147, 483,647 |
String | ストリング(文字) | 0 〜 約 20 億 |
Boolean | ブーリアン(真か偽の結果) | True または False |
Date | デイト(日付) | 100 年 1 月 1 日 から 9999 年 12 月 31 日 |
Variant | バリアント(全て) | 全ての値 |
まだたくさんの型がありますが、このあたりを押さえておけば当面問題は無いので使い慣れてみましょう
ちなみにデータ型を指定しなくても変数や定数を使うことは出来ます。
例えば、「Dim i」でも大丈夫ですがオススメはしません。
もし、データ型で分からなくなったら、「Variant型」なら何でもOKなのでコレを使うようにしてみましょう。
変数の宣言を強制するとは?
変数の宣言というと第1弾で「変数の宣言を強制する」という設定をしました。
詳細は第1弾を参考にして下さい
そう「Option Explicit(オプション・エクスプリクト)」という設定です。
直訳すると「選択を明確にする」といった意味です。
VBAの場合「これは変数ですよ」ということを変数名の頭に付けることを強制しています。
つまり「Dim」と最初にあったら、これは変数だなと誰が見ても分かるようにするという強制ルールを設定している訳ですね。
ここで良くある勘違いとして、「変数の宣言を強制する=データ型の指定」と思っているケースがあります。
つまり「Dim i As Long」の「As Long」の部分ですね。
ところが「Dim i」これでも問題無く動きます。
ちゃんと「Dim」という変数の宣言が出来ているからです。
ただ、この方法はオススメ出来ないのでデータ型は、できるだけ指定してみましょう
定数の具体的な使い方
次は定数の使い方について見ていきましょう。
定数は変数の宣言と似ているので変数と一緒に使えるようになると便利ですよ。
今回はシート名を定数にセットしてセルを選択するというサンプルです。
Sub シート名を定数に設定してセル選択()
Const TGTSET As String = "テスト"
Worksheets(TGTSET).Range("a1").Select
End Sub
このコードを実行すると、A1のセルが選択されます。
今回のポイントも3行目の「Const TGTSET As String = “テスト”」の部分です。
これが定数の宣言の方法です。
意味はこんな感じです。
定数の特徴は、先頭の「Const(コンスト)」と「=”テスト”」という部分です。
変数の場合の「Dim」が「 Const 」になっただけでデータ型も基本は同じです。
その後の「=」で定数「TGTSET」に「テスト」という文字を格納します
変数とは違って定数は後から変更することが一切出来ません。
変数は色々な数字や値を代入することができましたが、定数は専用に設定されているので他のモノは入れられないんですね。
注意点ですが定数に文字を格納する時は、テストの文字を「”(ダブル・クォーテーション)」で囲むことを忘れないようにしましょう。
この方法は、複数のシートをまたぐプログラムなど応用が効くので頭の片隅に入れておくと便利ですよ。
変数や定数の名前の決め方にルールはある?
変数や定数にはどんな風に名前をつければ良いのでしょうか?
実は名前の付け方には、原則ルールはありません。
ただ、一般的に変数や定数で日本語を使うことはあまり無く、基本的には英語表記することが多いです。
例えば、変数名に「TgtSht・MaxRow」定数名に「BAKSHT・SRTROW」などのルールでコードを書くことが多いですね。
これらの書き方には、「キャメル記法(きほう)」「スネーク記法 (きほう) 」「チェーン(ケバブ)記法 (きほう) 」などと呼ばれる書き方もありますが、私の場合は、基本は「キャメル記法」で「定数は全て大文字」にするというルールにしています。
ちなみに各書き方はこんな感じです。
【キャメル記法(きほう)】
キャメルとはラクダのことで文字を凸凹させる書き方です。
「MaxRow」や「maxRow」など文頭の文字を大文字にする方法です。
【スネーク記法】
スネークとは蛇のことで文字を「_」アンダースコアで結ぶ方法です。
「Max_Row」「max_Row」など前後を「_」で結びます。
【チェーン(ケバブ)記法】
チェーンはクサリのことで文字を「-」ハイフンで結ぶ方法です。
「Max-Row」「max-Row」など前後 を「-」 で結びます。
特にこの書き方じゃなきゃダメという決まりはありませんが、規則性を持たせておくと読みやすくなります。
変数や定数の名前には意味をもたせる
変数も定数も基本ルールはほぼ同じですが、意味がきちんとしている名前の付け方が良いです。
なぜなら、何も考えずにいい加減な名前をつけてしまうと、後から見た時に何のための変数なのか分からなくなってしまうからです。
私の場合は、原則6文字までに収めるようにしています。
例えばこんな感じです。
最終行数を取得するための変数なら「MaxRow」
最終列数を取得するための変数なら「MaxCol」
シート名を定数で固定したいなら「TGTSHT」
税率を定数で固定しいたいなら「RETTAX」
こんな感じでしょうか。
要は英語で意味が何となく分かる短縮言葉にしています。
これは私のルールですが、他の人が見ても「あ~、なんとなく分かるわ」くらいの名前の付け方をしましょう。
他の人と共有しても大丈夫と思える気配りで書けば大丈夫です。
まとめ
さて、今回の変数と定数の内容を上手くお伝え出来たでしょうか?
最初は基本的な使い方や書き方に慣れてみて、使いこなせるようになってきたら書く場所や応用方法などを覚えていきましょう。
変数や定数は、とても使い勝手が良くなれてくると手放せないスキルの1つです。
最初は、使いこなすのに苦労したり、よく分からなくなってしまうこともあると思いますが、少しずつ慣れていきましょう。
今回も最後まで読んでいただきありがとうございました。
それでは次回またお会いしましょう!!
またね~~~。
コメントを残す