【VBA入門】変数と定数を徹底解説

本ページはプロモーションが含まれています

VBAに限らずプログラミングにおいて変数と定数は基礎中の基礎

言語によって細々ルールがありますがVBAでのルールや注意点をまとめていきます

変数

変数とは

変数が何かというとその名の通り”中身がわる(値)”のことを指します

計算結果や文字列、オブジェクトなどを一時的に格納して利用しますがExcel作業に例えると、セルに値を入力して必要なときに参照するイメージに近いです

変数を使う目的

変数を使う一番の目的は、”プログラムの中で扱う値を一時的に記憶し、再利用できるようにすること“です

もし変数を使わずに直接セルや数値を書き込むだけだと、同じ処理を繰り返すときに毎回手直しが必要になり、コードの柔軟性が失われます

変数を使うことで以下のメリットがあります

  • 処理の効率化:一度計算した値を保存し、繰り返し利用できる
  • 保守性の向上:変更が必要な場合、変数の値を変えるだけで済む
  • 可読性の向上:意味のある名前をつけることで、コードを読んだ人が目的を理解しやすい
  • 一時的なデータ保持:途中計算の結果やフラグ(条件判定用のTrue/Falseなど)を保持する

変数の書き方

VBAで変数を宣言する場合の基本形は”Dim 変数名 As データ型“です

Dim score As Integer
Dim name As String
  • Dim … 変数を宣言するためのキーワード
  • 変数名 … 値を格納する箱の名前 ※後述の命名規則を要確認
  • データ型 … その変数にどの種類のデータを入れるか指定

変数の命名規則

VBAは柔軟なプログラムなので実は日本語を変数名にすることもできます・・・が、一般的には英語で書きますし他の言語では受け入れられないのがほぼなのでまずは英語で書きましょう

そしてVBAで多く使われるのはキャメルケースでハンガリアン記法の利用もボチボチ

他がNGってわけでもないですが一般的な記述にすることで可読性と保守性が上がるのでなるべく合わせましょう

Dim targetRow As Long   ' ---キャメルケース
Dim lngRow As Long      ' ---ハンガリアン記法
Dim target_row As Long  ' ---スネークケース 
Dim TargetRow As Long   ' ---パスカルケース
Dim 対象行 As Long       ' ---日本語は非推奨

変数のスコープ

変数にはスコープと言われる考え方がありまして、Dimの代わりに”Private/Public“で宣言することで使える範囲が変わります

範囲の考え方はおおきくわけて2つ

  • 同一プロジェクト内(≒Excelファイル)でモジュールを跨いで利用することができるか・・・①②
  • 同一モジュール内でプロシージャを跨いで利用できるか・・・③④

宣言する場所による違い(プロシージャ内外)

プロシージャ外で宣言すると同一モジュール内の全プロシージャで変数が利用できるようになり、変数の値はプロシージャを跨いでも保持されます

プロシージャ内で宣言すると同一プロシージャの中だけで利用できるようになります

修飾子スコープ
プロシージャ内そのプロシージャだけ
プロシージャ外そのモジュールの全プロシージャ
メモ

変数は同一範囲内で重複して宣言することはできません

なのでプロシージャ外で宣言した変数名はプロシージャ内でもう一度宣言することはできませんが、プロシージャ内で宣言するのであれば適用範囲で重複しないのでプロシージャを跨げば同一名の変数を利用できます(紛らわしいので推奨はしませんが)

プロシージャ外で宣言する場合のPrivete/Publicステートメント

プロシージャ外で宣言する場合はDimの代わりにPrivateとPublicも利用できます

修飾子スコープ他モジュールからアクセス
Privateモジュール内限定❌ 不可
Publicプロジェクト全体✅ 可能
メモ

※Privete/Publicの宣言をしていない場合はPrivateが適用されます

データ型について

変数は”文字”や”数字”などデータの型を指定することができます

指定しないことも可能ですが、プログラムでは数字の100(ひゃく)と文字の100(いちぜろぜろ)は違うのでエラー・バグの温床になってしまうため原則指定します

基本的なデータ型

まずは基本になる様々な”“を取り扱う時に指定するデータ型から

データ型説明初期値使用頻度
String文字列“”Dim name As String
Long大きな整数(約±20億)0Dim population As Long
Date日付・時刻0:00:00Dim today As Date
BooleanTrue/FalseFalseDim isActive As Boolean
Double小数を含む実数0Dim price As Double
Integer整数(-32,768~32,767)0Dim age As Integer
Byte0~255の整数0Dim flag As Byte
Currency金額(小数点4桁まで)0Dim salary As Currency激低

Integerは使われるところをよく見かけますが、Longが上位互換みたいなものなので使う必要が無いって意味で使用頻度は”低”にしています

オブジェクト型について

基本形と違って”値”ではなくデータの箱のようなものを格納するオブジェクト型がありまして、このオブジェクト型は何か一つのことを指すわけではなく”Workbook(ブック)“、”Worksheet(シート)“、”Range(セル)“などをまとめてオブジェクト型と呼びます

種類は無数にあるのでここでは触れませんが、VBAを利用していれば嫌でも出会うので細かい話はサンプルプログラムの説明などで

ちなみにオブジェクト型に代入するときはSetステートメントが必要なので利用時にはご注意を

Dim name As String
Dim wb As Workbook

name = 'ジャベ雄'
Set wb = Thisworkbook ' ---オブジェクトへの代入はSetから始める

なるべく使用を控えたいけど便利な万能データ型

データ型の冒頭で触れたデータ型を”指定しない”時に関連しますが、データ型の一つに万能型の”Variant“がありまして、指定しない場合はこの万能型が適用されます

もう一つオブジェクト型なら何でも入る”Object“があります

ObjectはVariantでも代用できないわけではないですが、なるべくデータ型は指定する思想があるので最低限使い分けはしたいところ

データ型説明
Variantオブジェクト型も含め全てのデータ型になれる
Objectオブジェクト型なら何にでもなれる

Variant型(データ型を指定しない)はなるべく避けたいとことですが、Arrayなど一部Variantでしか取り扱えない場合や、プログラムの中でどのデータ型になるかわからない場合があるので状況に応じて利用しましょう

列挙型(Enum)とユーザー定義データ型(Type)

イレギュラー枠でEnumとTypeがありまして、EnumはLongの集合体、Typeは変数を束ねると考えるとしっくりきます

これも奥が深いのでここでは紹介だけまでにして、サンプルソース置くのでこんなのもあるんだーぐらいでどうぞ

Enum WeekDay
    Sunday      ' 0
    Monday      ' 1
    Tuesday     ' 2
    Wednesday   ' 3
    Thursday    ' 4
    Friday      ' 5
    Saturday    ' 6
End Enum

Sub ShowDay()
    MsgBox "今日の曜日は: " & WeekDay.Monday  ' 結果は「1」
End Sub
Type Employee
    Name As String
    Age As Integer
    Salary As Double
End Type

Sub ShowEmployee()
    Dim emp As Employee
    emp.Name = "田中 太郎"
    emp.Age = 30
    emp.Salary = 5000000

    MsgBox "氏名: " & emp.Name & vbCrLf & _
           "年齢: " & emp.Age & vbCrLf & _
           "給与: " & emp.Salary & "円"
End Sub

定数

定数とは

定数は”中身をめたわる(値)”のことを指します

基本的な使い方は変数と同じですが違いがあるところだけピックアップします

定数を使う目的

定数の目的は、決して変わらない値をプログラム中で安全に使うことです

例えば消費税率や基準日などをいつか一括で修正する可能性がある値は、後から修正するときに見落としやすく、バグの原因になります

その他にも定数を使うことで以下のメリットがあります

  • 安全性の確保:プログラム実行中に誤って値を書き換えられる心配がない
  • 変更管理が容易:消費税率などを1か所変更すればプログラム全体に反映できる
  • 可読性の向上:「0.1」より「TAX_RATE」のような名前を使うことで意味が明確になる
  • 保守性の向上:長期的に見ても管理がしやすく、他人がコードを読んだときも理解しやすい

定数の書き方

VBAで定数を宣言する場合の基本形は”Const 変数名 As データ型 = 値“です

Const score As Integer = 100
Const name As String = "ジャベ雄"

変数と違って宣言と同時に値を決めてその後編集不可になります

定数の命名規則

変数と同じように一般的に使われる命名規則がありまして、全て大文字のスネークケースで一見して意味が分かる単語を結合します

Const MAX_USER_COUNT As Integer = 100
Const DEFAULT_FONT_SIZE As Double = 12.5
Const API_ENDPOINT_URL As String = "https://example.com/api"

まとめ

結構初歩の部分ですがまとめ始めるとなかなかのボリュームになってしまいました

良くも悪くもシステムとしての制限がないので自分でやチームでルールを作って安定運用できるプログラム作成を心がけましょう!


何か聞きたいことがあれば お問い合わせページ かLINEで友達追加してお気軽に連絡してください
※普通の会社員なのでレスポンスはお察しください🙇

👇👇👇友達追加はこちらをタップ
友だち追加

👇👇👇QRを読み取る場合はこちら

コメント

タイトルとURLをコピーしました