IT系/VBA/基本/変数・定数

Last-modified: 2020-08-08 (土) 08:34:27

目次


概要

変数・定数に関するVBAのTIPS。

変数・定数とは

  • 変数とは、数値や文字列など(すなわちデータ)を一時的に格納する入れ物。
  • 入れ物(データ)のタイプ(型)を、データ型と言う。
  • 定数とは、数値や文字列の代わりに使用される、意味を持たせた名前のこと。
  • 定数は、値を変更できない。

データ型

データ型名称格納できる範囲
Integer整数型-32,768 ~ 32,767
Long長整数型-2,147,483,648 ~ 2,147,483,647
LongLong64ビット符号付き数値-9223372036854775808 ~ 9223372036854775807
※64ビットプラットフォームのみで有効な宣言型
Single単精度浮動小数点数型-3.402823E38 ~ -1.401298E-45(負の値)
1.401298E-45 ~ 3.402823E38(正の値)
Double倍精度浮動小数点数型-1.79769313486232E308 ~ -4.94065645841247E-324(負の値)
4.94065645841247E-324 ~ 1.79769313486232E308(正の値)
Currency通貨型-922,337,203,685,477.5808 ~ 922,337,203,685,477.00
String文字列型最大約20億文字まで
Date日付型西暦100 年1月1日~西暦9999年12月31日までの日付と時刻
Byteバイト型0~255の範囲の単精度の正の数値。8 ビット(1 バイト)
Booleanブール型真 (True) または偽 (False)
Objectオブジェクト型オブジェクト
Variantバリアント型すべてのデータ
  • Variantは何でも入れる事が出来るデータ型。
  • 変数宣言で、Asを書かずにデータ型を指定しないと、Variantになる。

変数宣言

Dim flag As Boolean        ' Boolean(ブール)型
Dim num As Integer         ' Integer(整数)型
Dim row As Long            ' Long(長整数)型
Dim value As Single        ' Single(単精度浮動少数点)型
Dim value As Double        ' Double(倍精度浮動少数点)型
Dim today As Date          ' Date(日付)型
Dim str As String          ' String(文字列)型
Dim students() As String   ' 配列(String配列)
Dim var As Variant         ' バリアント型
Dim b As Byte              ' バイト型
Dim money As Currency      ' 通貨型
Dim obj As Object          ' オブジェクト型

宣言時の注意

変数名は、,(カンマ)で区切って、複数の変数を1行に複数書くことができるが、変数一つ一つにデータ型を指定する必要がある。

Dim 変数名 [As データ型], 変数名 [As データ型], ・・・

指定しない場合は、Variantになる。

命名

  • 半角、全角の数字と文字を使える。
  • 変数名の長さは、半角で255文字以内(全角なら127文字以内)。
  • 記号はアンダーバーのみ使用可能(ピリオドやスペースは使用できない。
  • 1文字目は、数字、_アンダーバー、記号を使用することができない。
  • VBAが意味を持たせている語句は使用できない。
  • 大文字、小文字の区別がなく、同様に扱われる。

ハンガリアン記法

  • データ型の略文字を先頭に付ける。
    Dim lngNo As Long
  • このような変数名の付け方は、ハンガリアン記法と呼ぶ。
  • ハンガリアン記法については、近年は批判的な意見が多い。
  • VBAはハンガリアン記法が推奨されていた時代から存在するプログラミング言語なので、ハンガリアン記法が推奨されていない新しい言語とは分けて考えるべきという意見もある。

自動型変換、暗黙の型変換

VBAには、型を自動的に変換する仕様がある。

  • 代入(=)や演算においては、自動型変換される。
  • 型変換できない場合は、エラーになる(数値型の変数に文字列を入れた場合や、文字列を計算した場合等)。
  • 代入の場合、代入先の型に自動的に変換される。
  • 演算の場合、演算子によって自動的に型変換される。算術演算子であれば、数値変換後に計算が行われる。
  • +演算子は、足し算の演算子であると同時に文字列結合の演算子でもあるので、2項とも数値なら足し算、片方でも文字列なら文字列結合が行われる。
     
' どちらも文字列の「123」が設定される
Dim i As String
i = 123
i = "123"
' jには数値の123が設定される
Dim i As String
Dim j As Long
i = "123"
j = i

String型とByte型配列の変換

String型はByte型の配列と等価であり、相互に代入可能。

Dim byteArray() As Byte
byteArray = "Hello"
Debug.Print byteArray

変数宣言の必要性

変数はかならず宣言すべき。

定数

定数を大別すると、以下の3つになる。

  • 組み込み定数
  • ユーザー定義の定数
  • 条件コンパイル定数
     
  • 組み込み定数は、VBAによって提供される定数。
    ' A1セルの文字色を自動にする
    Range("A1").Font.ColorIndex = xlAutomatic    ' -4105
     
  • 組み込み定数の名前
    • VBA共通の組み込み定数は、vb○○○
    • Office共通の列挙体は、mso○○○
    • Excel独自の列挙体は、xl○○○
       
  • ユーザー定義の定数は、ユーザー独自で定義した定数。
    Const 定数名 As 型 = 値           ' プロシージャ内でのみ使用可能
    Private Const 定数名 As 型 = 値   ' プロシージャ内でのみ使用可能
    Public Const 定数名 As 型 = 値    ' 全てのモジュールの全てのプロシージャで使用可能
     
  • 定数名の命名規則は、変数名と同じ。
     
  • VBAの中には、変数は指定できない場所がある。
    VBAには変数で指定すると、「定数式が必要です」とエラーになる場合がある。
    その場所には、定数を指定しなければならないということ。

定数宣言

Const ci As Integer = 1

スコープ

  • 変数・定数には適用範囲(スコープ)がある。
  • 適用範囲とは、宣言した変数を使う事のできる範囲。
  • スコープは必要以上に広くとらないのが基本。モジュールレベル変数や、パプリック変数は極力少なくすべき。
  • 詳細は「IT系/VBA/基本/スコープ」に記載。

型宣言文字

  • データ型を指定する文字。
  • リテラル値(定数値)を指定する場合に、使う事がほとんど。
  • 型宣言文字の種類
    型宣言文字変数の型記載位置
    %Integer(整数型)後置
    &Long(長整数型)
    $String(文字列型)
    !Single(単精度浮動小数点型)
    #Double(倍精度浮動小数点型)
    @Currency(通貨型)
    ^Longlong(64ビット符号付き数値)※64ビットExcelのみ有効
    &H16進定数前置
    &O8進定数
  • 指定の例
    i = 123%
    l = 123&
    Const i1 As Long = &H10    ' 10進数で16
    Const i2 As Long = &O10    ' 10進数で8
    '
    ' 一応以下のような指定もできるが使わない
    Dim i%
    Const j& = 123456

日付の定数を指定する場合

' #で囲む必要がある
Const 日付定数 As Date = #12/31/2020#    ' 2020年12月31日

列挙体

  • 定数には、単独としての定数と列挙体がある。
  • 複数の数値定数をひとまとめにしてグループ化したもの。
  • 詳細は「IT系/VBA/基本/列挙型」に記載。

TIPS

別ページの一覧を入れる。

'IT系/VBA/基本/変数・定数/' には、下位層のページがありません。

参考リンク集

重複を恐れないリンク集。

動画

その他メモ