Excel VBAの変数についてお探しですね。
広告
Excel VBAの変数とは?Dimを使った宣言方法とデータ型の選び方を初心者向けに解説
Excel VBAでマクロを書き始めると、必ず出てくるのが「変数」です。
変数を使わなくても短い処理なら動かせますが、同じ値を何度も書いたり、処理対象のシート名を毎回修正したりすると、コードはすぐに読みにくくなってしまいます。
この記事では、Excel VBAの変数とは何か、Dimを使った宣言方法、よく使うデータ型の種類と選び方を、初心者にも分かりやすく整理して解説します。
1. Excel VBAの「変数」って何?値を一時的に入れておく箱のようなもの
Excel VBAの変数とは、数値や文字列、日付、セル範囲などのデータを一時的に入れておく「名前付きの箱」のようなものです。
たとえば、同じシート名を何度もコードの中に直接書いていると、シート名が変わるたびに複数の場所を修正しなければいけませんよね。
でも、シート名を変数に入れておけば、変数に代入する値を1箇所変更するだけで済みます。
これで修正漏れを防げますし、コードもグッと読みやすくなります。
実際の例を見てみましょう。
“`vba
Sub Sample()
Dim shName As String
shName = “売上一覧”
Worksheets(shName).Range(“A1”).Value = “商品名”
Worksheets(shName).Range(“B1”).Value = “売上金額”
End Sub
“`
この例では、`shName`という変数に「売上一覧」という文字列を入れています。
変数を使わずに`Worksheets(“売上一覧”)`と何度も書くこともできますが、処理が長くなるほど変更に弱いコードになってしまいます。
変数を使う目的は、単に値を保存するだけではありません。
「この値は何を表しているのか」を名前で示して、マクロ全体の意図を分かりやすくする役割もあるんです。
変数には、後から別の値を代入することもできます。
たとえば、合計金額を計算する途中で値を更新したり、繰り返し処理の中で行番号を1つずつ増やしたり。
この「値を入れ替えながら処理を進められる」という性質が、Excel VBAで集計・転記・検索・整形などの自動化を行うときにとても重要になります。
2. 変数の宣言方法は「Dim 変数名 As データ型」が基本
Excel VBAで変数を使うときは、基本的に`Dim`を使って宣言します。
宣言とは、「これからこの名前の変数を使いますよ」とVBAに知らせることです。
さらに`As`を使うことで、その変数にどんな種類のデータを入れるのかを指定できます。
基本の形は`Dim 変数名 As データ型`です。
たとえば、整数を入れるなら`Long`、文字列を入れるなら`String`、日付を入れるなら`Date`を指定します。
“`vba
Sub Sample()
Dim rowNo As Long
Dim customerName As String
Dim orderDate As Date
rowNo = 2
customerName = “山田太郎”
orderDate = Date
End Sub
“`
このようにデータ型を明示しておくと、変数に入れられる値の種類がはっきりします。
たとえば`Long`型の変数には整数を入れる前提になるので、文字列を代入しようとすると「型が一致しません」というエラーが出ます。
一見すると制限が増えるように感じるかもしれませんが、実際にはミスを早い段階で見つけやすくなるので、安定したマクロを書くうえで大きなメリットがあります。
なお、`As データ型`を省略して`Dim value`のように書くこともできます。
この場合、その変数は`Variant`型として扱われます。
`Variant`型は数値・文字列・日付など多くの値を入れられる便利な型ですが、何が入るのか分かりにくくなって、思わぬ型変換やエラーの原因になることがあります。
初心者のうちは便利に見えても、基本的にはデータ型を明示する書き方をおすすめします。
変数宣言のミスを防ぐには、モジュールの先頭に`Option Explicit`を入れるのが効果的です。
これを書いておくと、宣言していない変数を使ったときにエラーになります。
たとえば`totalAmount`と書くべきところを`totlAmount`とタイプミスしても、VBAが勝手に別の新しい変数として扱うことを防げます。
VBEの設定で「変数の宣言を強制する」を有効にしておくと、新しいモジュールに自動で`Option Explicit`が入るので、実務では必ず設定しておきたい項目です。
3. Excel VBAでよく使うデータ型の種類一覧と選び方
データ型とは、変数に入れるデータの種類を決めるものです。
VBAには多くのデータ型がありますが、最初からすべてを暗記する必要はありません。
実務でよく使う型を優先して覚えて、必要に応じて範囲や特徴を確認するのが効率的です。
特にExcel VBAでは、数値、文字列、日付、真偽値、セルやシートなどのオブジェクト型をよく使います。
| データ型 | 主な用途 | 補足 |
|—|—|—|
| Long | 整数 | 行番号、件数、カウンタによく使う |
| Double | 小数 | 平均、割合、計算結果などに使う |
| Currency | 金額、小数 | 小数の足し算・引き算で誤差を抑えたいときに便利 |
| String | 文字列 | 氏名、住所、商品名、コードなど |
| Date | 日付・時刻 | 日付比較、期限管理、時刻の記録など |
| Boolean | True / False | 条件判定やフラグに使う |
| Variant | 型を限定しない値 | セル値をそのまま受ける場合などに使う |
| Workbook | ブック | Excelファイルを変数で扱う |
| Worksheet | ワークシート | 対象シートを変数で扱う |
| Range | セル・セル範囲 | セルや表範囲を変数で扱う |
整数を扱う場合、古いサンプルでは`Integer`が使われていることがあります。
でも、Excelの行数や実務で扱う件数を考えると、普通は`Long`を使う方が安全です。
`Integer`は扱える範囲が-32,768から32,767までと狭いので、行番号や件数には向きません。
行番号、最終行、繰り返し処理のカウンタには、基本的に`Long`を選ぶと覚えておくといいでしょう。
小数を扱う場合は、一般的には`Double`を使います。
平均値や割合、割り算の結果など、幅広い数値計算に対応できます。
ただし、コンピュータの小数計算には誤差が発生することがあって、`0.1 + 0.2`の結果が厳密には`0.3`と一致しない場合があります。
金額のように小数の足し算・引き算を重視する場面では、`Currency`型を検討すると安定しやすくなります。
文字列には`String`、日付には`Date`、真偽値には`Boolean`を使います。
`Boolean`は、たとえば「対象データが見つかったか」「処理を続行してよいか」といった判定結果を入れるときに便利です。
変数名を`isFound`や`hasData`のようにすると、TrueかFalseを入れる変数だと読み取りやすくなります。
日本語の変数名を使う場合でも、`データあり`や`処理対象あり`のように意味が分かる名前にすると、後で見直すときに楽になります。
4. オブジェクト型変数、Set、エラー対策まで押さえよう
Excel VBAでは、数値や文字列だけでなく、ブック・シート・セル範囲なども変数に入れて扱えます。
これらは「オブジェクト型」と呼ばれていて、代表的なものに`Workbook`、`Worksheet`、`Range`があります。
オブジェクト型の変数に値を代入するときは、普通の`=`だけではなく、`Set`を使う点が重要です。
ここを理解していないと、初心者がつまずきやすいエラーにつながります。
“`vba
Sub Sample()
Dim wb As Workbook
Dim ws As Worksheet
Dim targetRange As Range
Set wb = ThisWorkbook
Set ws = wb.Worksheets(“売上一覧”)
Set targetRange = ws.Range(“A1:C10”)
targetRange.Interior.Color = RGB(255, 255, 200)
End Sub
“`
この例では、ブックを`wb`、ワークシートを`ws`、セル範囲を`targetRange`に入れています。
いったん変数に入れておくと、`Worksheets(“売上一覧”).Range(“A1:C10”)`のような長い指定を何度も書かずに済みます。
また、どのブック・どのシートを対象にしているかが明確になるので、複数ブックや複数シートを扱うマクロでは特に効果があります。
変数を使っていてよく出るのが「型が一致しません」というエラーです。
これは、変数のデータ型と代入しようとした値の種類が合っていないときに発生します。
たとえば`Long`型の変数に「あいうえお」という文字列を入れたり、`Range`型の変数にワークシートを`Set`しようとしたりするとエラーになります。
エラーが出た場合は、「左辺の変数の型」と「右辺の値やオブジェクトの型」が対応しているかを確認するのが基本です。
“`vba
Sub ErrorSample()
Dim amount As Long
amount = “東京都” ‘型が一致しません
End Sub
“`
VBAには、数値を文字列に自動変換するなど、ある程度の暗黙の型変換があります。
そのため、`String`型の変数に数値を入れると文字列として扱われる場合があります。
でも、自動変換に頼りすぎると、意図しない結果になったときに原因を見つけにくくなります。
必要に応じて`CLng`、`CDbl`、`CStr`、`CDate`などの型変換関数を使って、変換していることをコード上で明示すると安全です。
最後に、変数には「使える範囲」であるスコープがあります。
プロシージャ内で`Dim`宣言した変数は、そのSubやFunctionの中だけで使えます。
一方、モジュールの先頭で宣言した変数は、そのモジュール内の複数プロシージャから参照できます。
さらに`Public`を使うと別モジュールからも使えますが、どこからでも変更できる変数はバグの原因になりやすいので、必要最小限にとどめるのが基本です。
まとめ
Excel VBAの変数は、マクロを読みやすく、修正しやすく、安定して動くものにするための土台です。
最初は`Dim 変数名 As データ型`の形に慣れて、整数は`Long`、小数は`Double`、文字列は`String`、日付は`Date`、セルやシートは`Range`や`Worksheet`というように、用途ごとに選べるようになれば十分です。
慣れてきたら、配列、Collection、Dictionaryなどを学ぶことで、複数のデータをまとめて扱う実践的なマクロにも進めるようになります。
まずは基本をしっかり押さえて、少しずつステップアップしていきましょう。
広告
