Excel VBA ベーシック・変数について

Excel VBAの変数は、データを一時的に格納し、処理や操作中に使うための箱のようなものです。

変数の種類

変数の種類としては、以下のようなものがあります

Byte

Byte(バイト型):0-255の数値を保持する変数です。

    Dim byteValue As Byte
    byteValue = 200 ' 0から255の範囲内の値を代入

 

Integer

Integer(整数):整数値を保持する変数です。

   Dim myNumber As Integer
   myNumber = 10

 

Long

Long(長整数型):-2,147,483,648-2,147,483,647の数値を保持する変数です。

    Dim longValue As Long
    longValue = 2147483647 ' 最大値

 

String

String(文字列):文字列を保持する変数です。

   Dim myText As String
   myText = "Hello, Excel!"

 

Boolean

Boolean(真偽値):`True` か `False` の値を保持する変数です。

   Dim isFound As Boolean
   isFound = True

 

Currency

Currency(通貨型):-922,337,203,685,477.5808-922,337,203,685,477.5807の数値を保持する変数です。(固定小数点数型)

    Dim currencyValue As Currency
    currencyValue = 123.45

 

Single

Single(倍精度浮動小数点数):小数点以下の数値を保持する変数です。
負の値:約-3.4×10(38乗) ~-1.4×10(-45乗)
正の値:約 1.4×10(-45乗)~ 1.8×10(38乗)

    Dim singleValue As Single
    singleValue = 123.45

 

Double

Double(倍精度浮動小数点数):小数点以下の数値を保持する変数です。
負の値:約-1.8×10(308乗) ~-4.0×10(-324乗)
正の値:約 1.4×10(-324乗)~ 1.8×10(308乗)

   Dim piValue As Double
   piValue = 3.14

 

Date

Date(日付):日付と時刻を保持する変数です。
西暦100年1月1日~西暦9999年12月31日
時刻0:00:00~23:59:59

   Dim todayDate As Date
   todayDate = Date

 

Object

Object(オブジェクト):Excel内のオブジェクト(例えば、ワークシートやセル)を保持する変数です。

   Dim ws As Object
   Set ws = Worksheets("Sheet1")

 

Variant

Variant(汎用型):どのデータ型でも保持できる汎用的な変数です。

   Dim myVar As Variant
   myVar = 10
   myVar = "Hello"

 

SingleとDoubleの使い方

SingleとDoubleは、浮動小数点数を表現するためのデータ型で、精度とメモリ使用量の点で異なります。

Single(単精度浮動小数点数)
32ビットの浮動小数点数。精度は約7桁です。メモリ使用量が小さいため、多くの数値データを扱う場合に効率的ですが、精度が制限されています。

Double(倍精度浮動小数点数)
64ビットの浮動小数点数。精度は約15桁です。メモリ使用量が多いですが、高い精度を提供し、非常に大きな数値や小さな数値、および小数点以下の精度を必要とする場合に適しています。

使用するデータの大きさや精度によって使い分けます。

ほとんどの場合、Double型を使用することが一般的ですが、メモリ使用量を節約する必要がある場合や、精度が7桁程度で十分な場合はSingle型を検討することができます。

ただし、Double型の方が精度が高く、ほとんどのケースで十分な性能を持っているため、通常はDouble型を選択することが推奨されます。

 

変数名の命名規則

変数の宣言

Dim 変数名 As 型

宣言を確実にするには、Option Explicit ステートメントをコードの先頭に記述します。

これにより、すべての変数は宣言されなければならず、未定義の変数を使用しようとするとコンパイルエラーが発生します。

変数を使用する前に、必要なデータ型で変数を宣言することで、プログラムが予期しない動作をする可能性が減ります。

Option Explicitは、VBEツールのメニューからオプションを選び、ダイアログボックス⇒編集⇒編集の宣言を強制するチェックボックスオンで、コード先頭に自動でOption Explicitが追加されます。

 

変数の命名規則

変数名の命名規則制限

1.長さの制限
変数名は1文字以上255文字以下

2.最初の文字
変数名の先頭が数字やアンダーバー(_)ではいけない

3.使用できる文字
変数名には文字(日本語を含む)のほか、アンダーバー(_)だけ使えて、その他の記号やスペースは使えない

4.同じ適用範囲で同じ名前は使えない

Dim myVariable As Integer
Dim myVar2 As String
豆知識

変数を日本語記述しているケースもありますが、一般的にはアルファベット式です。

複数メンバーで取り組むシステム開発になると、開発規約で必ず変数の命名規則が決められ、コーディングスタイルを統一することになります。たとえば、下記の形式があります。

camel 形式 (キャメルケース)
Pascal 形式 (パスカルケース)
snake_case 形式(スネークケース)
kebab-case 形式(ケバブケース)

VBAでよく使われるのが、camel 形式 (キャメルケース)かPascal 形式 (パスカルケース)です。

camel 形式 (キャメルケース)は、最初の単語はすべて小文字、2単語目以降は先頭を大文字にします。
Pascal 形式 (パスカルケース)は、各単語の先頭を大文字にします。

キャメルケース

' キャメルケース: 最初の単語は小文字で、それ以降の各単語の先頭は大文字
Dim myVariable As Integer
Dim userCount As Long

 

パスカルケース

' パスカルケース: 全ての単語の先頭を大文字で始める
Dim MyVariable As Integer
Dim UserCount As Long

 

どちらのケースを利用してもいいのですが、変数名をわかりやすくするために、わかりやすく記述することが重要です。

 

特定のデータ型や目的を示す意味のある名前を使うことで、コードの可読性を向上させることができます。

 

変数の適用範囲

変数の適用範囲は、その変数が利用可能なコード内の位置を指します。主な変数の適用範囲は以下の通りです。

1.手続き(Procedure)レベルの変数
プロシージャ内で宣言され、そのプロシージャ内のみで利用可能です。SubプロシージャやFunctionプロシージャ内で宣言された変数がこれに当たります。

2.モジュールレベルの変数
特定のモジュールで宣言され、そのモジュール内の複数のプロシージャから利用可能ですが、他のモジュールからは利用できません。

3.グローバル(Global)レベルの変数
プロジェクト全体で宣言され、プロジェクト内のどのモジュールやプロシージャからでも利用可能です。

 

変数の適用範囲を正確に把握して、変数を適切な場所で宣言して利用することが重要です。変数のスコープを適切に設定することで、データの共有と保持を管理し、コードを効果的に利用できます。

 

変数の初期化

変数は、初期化されない場合、デフォルトで特定の値が割り当てられます。

数値型の変数は初期化されない場合、0が代入されます。
   Dim numVariable As Integer ' 初期化せずに宣言
   MsgBox numVariable ' 結果は0になります

 

文字列型の変数: 初期化されない場合、空の文字列("")が代入されます
   Dim strVariable As String ' 初期化せずに宣言
   MsgBox strVariable ' 結果は空の文字列になります

 

真偽型の変数: 初期化されない場合、Falseが代入されます
   Dim boolVariable As Boolean ' 初期化せずに宣言
   MsgBox boolVariable ' 結果はFalseになります

 

変数の初期化は、その変数を使う前に値を設定することを意味します。変数の意図しない値を避けたり、コードの可読性を向上させたりするために、可能な限り変数を初期化することが重要です。

 

変数の有効期間

変数を宣言する場合、変数の有効期間はその変数が宣言された場所によって異なります。主に、変数の有効範囲は以下の3つのレベルで考えられます

手続きレベル

手続き(サブルーチンまたは関数)内で宣言された変数。
その手続き内でのみ利用可能。
手続きが実行される間だけ存在し、手続きが終了すると変数も消滅します。

   Sub ExampleProcedure()
       Dim x As Integer ' 手続きレベルの変数
       x = 10
       MsgBox x ' 有効
   End Sub

 

モジュールレベル

モジュールの冒頭で宣言された変数。
そのモジュール内のどこからでも利用可能。
モジュールの実行が終了するまで存在し、モジュールがアンロードされると消滅します。

   Dim y As Integer ' モジュールレベルの変数

   Sub ExampleModule()
       y = 20
       MsgBox y ' 有効
   End Sub

 

プロジェクトレベル

ブックが開かれている間ずっと存在し、そのブックが閉じられると消滅します。

   ' ThisWorkbook内での変数宣言
   Public z As Integer ' プロジェクトレベルの変数

   Sub ExampleProjectLevel()
       z = 30
       MsgBox z ' 有効
   End Sub

 

変数の有効範囲を決定する際には、変数が使用される場所や必要な有効範囲を考慮して宣言することが重要です。

Excel VBAのスキルを身につけて、仕事の効率化に貢献しませんか?

当サイトでは、Excel VBAエキスパート認定資格取得に向けた情報を提供しています。興味がある方は、ぜひ以下の問題集からチャレンジしてみてください。

 

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。