「データ型」は“箱の種類”だと思うと分かりやすい
変数は「値を入れておく箱」でしたよね。
データ型は、その箱の「種類」です。
お菓子の箱、ペットボトル、ガラス瓶――入れられる中身や量が違うように、
VBAの変数も「整数用の箱」「小数用の箱」「文字列用の箱」「日付用の箱」など、用途ごとに種類が決まっています。
ここをなんとなくで済ませると、
「桁が足りない」「思った通りに計算されない」「文字列と数値がごちゃごちゃ」
みたいな“モヤモヤバグ”が増えます。
逆に、データ型の感覚がつかめると、
「この値はこの型で持つのが一番安全だな」
と判断できるようになって、コードの質が一段上がります。
VBAでよく使うデータ型をざっくり俯瞰する
まずはこの4つを押さえる
超初心者の段階で、まずしっかり仲良くなってほしいのはこの4つです。
数値(整数):Long
数値(小数):Double
文字列:String
日付・時刻:Date
これだけで、実務のかなりの部分は書けます。
他にもたくさん型はありますが、「まずはこの4つを使いこなす」が最優先です。
整数型:Long を“標準”にしてしまおう
Long型とは何か
Long は「大きめの整数」を扱うための型です。
宣言の例はこうです。
Dim count As Long
count = 10
VBLong は、かなり広い範囲の整数を扱えます(マイナスも含む)。
「人数」「個数」「回数」「行番号」など、“小数点のいらない数”は、とりあえず Long でOKです。
Integer との違いと、なぜ Long を勧めるか
VBAには Integer という型もあります。
Dim n As Integer
VBですが、Integer は扱える範囲が狭く、
行数やIDなどを扱っていると簡単にオーバーフロー(範囲外エラー)を起こします。
一方 Long は、Excelで扱うような数ならまず足りなくなることはありません。
だから実務では、
「整数は全部 Long にしておけばいい」
と覚えてしまって問題ありません。
小数型:Double は“小数を含む数値の箱”
Double型とは何か
Double は「小数を含む数値」を扱う型です。
Dim price As Double
price = 1234.56
VB金額(税抜・税込の計算)、割合、平均値、統計計算など、
小数点が必要な場面では Double を使います。
計算の例
Sub SampleDouble()
Dim price As Double
Dim taxRate As Double
Dim total As Double
price = 1000
taxRate = 0.1
total = price * (1 + taxRate)
MsgBox total ' 1100 が表示される(環境によっては 1100 として見える)
End Sub
VBここで、price や total を Long にしてしまうと、
小数が切り捨てられたり、意図しない丸めが起きたりします。
「小数が絡む計算は Double」
このルールを体に入れておくと、金額や割合のバグがかなり減ります。
文字列型:String は“文字の箱”
String型とは何か
String は「文字列」を扱う型です。
Dim name As String
name = "山田太郎"
VB名前、住所、メッセージ、セルの文字列、ファイルパスなど、
「数字っぽく見えても、計算しないもの」は String で持つのが基本です。
例えば、郵便番号や電話番号は、
「0123-456-789」のように先頭の0が重要だったり、ハイフンが入ったりします。
これを数値型で持つと、0が消えたり、ハイフンが扱えなかったりして困ります。
「計算する数値」→ Long / Double
「見せるための数字(郵便番号など)」→ String
この切り分けができると、データ型の選び方が一気に賢くなります。
文字列の結合の例
Sub SampleString()
Dim firstName As String
Dim lastName As String
Dim fullName As String
firstName = "太郎"
lastName = "山田"
fullName = lastName & " " & firstName
MsgBox fullName ' 「山田 太郎」と表示される
End Sub
VBここで & を使って文字列をつなげています。
数値型同士なら + で足し算、String 同士なら & で結合、というイメージです。
日付型:Date は“日付と時刻専用の箱”
Date型とは何か
Date は「日付や時刻」を扱う型です。
Dim birthday As Date
birthday = #2024/12/31#
VBDate 型は、内部的には数値ですが、
「日付としての意味」を持ったまま扱えるのが強みです。
日付計算の例
Sub SampleDate()
Dim today As Date
Dim nextWeek As Date
today = Date ' 今日の日付
nextWeek = today + 7 ' 7日後
MsgBox "今日: " & today & vbCrLf & "1週間後: " & nextWeek
End Sub
VBDate 型を使うと、
「日付に7を足すと7日後」
「日付同士を引くと日数差」
のような直感的な計算ができます。
もしこれを String で持ってしまうと、
「文字列としての ‘2024/12/31’」になってしまい、
日付としての計算がやりにくくなります。
「日付は必ず Date 型」
これも強いルールとして覚えてしまってOKです。
真偽値型:Boolean は“はい/いいえのフラグ”
Boolean型とは何か
Boolean は、「True(真)」か「False(偽)」のどちらかだけを持つ型です。
Dim isActive As Boolean
isActive = True
VB「この処理を実行するかどうか」
「このユーザーは有効かどうか」
「条件を満たしているかどうか」
といった“フラグ”を表現するのにぴったりです。
If文との組み合わせ例
Sub SampleBoolean()
Dim isMember As Boolean
isMember = True
If isMember = True Then
MsgBox "会員価格を適用します"
Else
MsgBox "通常価格です"
End If
End Sub
VB慣れてくると、
If isMember Then
VBのように書くことも多いです(isMember が True のときに実行)。
Boolean をちゃんと使うと、
「0/1 でフラグを表す」よりも、コードの意味が読みやすくなります。
Variant型:なんでも入る“何でも屋の箱”の扱い方
Variant型とは何か
Variant は、「どんな型の値でも入る箱」です。
Dim v As Variant
v = 10
v = "文字列"
v = #2024/12/31#
VBこのように、数値も文字列も日付も、何でも入ります。
一見とても便利ですが、実はかなり危険でもあります。
なぜ Variant を乱用すると危ないのか
Variant は型が決まっていないので、
計算のときに暗黙の型変換が起きる
意図しない文字列→数値変換などでバグる
型のミスマッチに気づきにくい
といった問題が起きやすくなります。
超初心者のうちは、
「とりあえず Variant にしておけば動く」
という誘惑に負けがちですが、
それをやると後で必ず苦しみます。
基本ルールとしては、
「型が分からないときに一時的に使う」
「配列やセル範囲を丸ごと受けるときに使う」
など、用途を絞って使うのが安全です。
データ型を意識したコードと、意識していないコードの差
型を意識していない例
Sub BadSample()
Dim a, b, c
a = "10"
b = 5
c = a + b
MsgBox c
End Sub
VBここでは、a / b / c はすべて Variant になります。
“10”(文字列)と 5(数値)を足しているので、
VBA が勝手に型変換をしてくれますが、
状況によっては意図しない結果になることもあります。
型をきちんと決めた例
Sub GoodSample()
Dim a As Long
Dim b As Long
Dim c As Long
a = 10
b = 5
c = a + b
MsgBox c
End Sub
VBこちらは、すべて Long で統一されています。
「整数の足し算」という意図が、コードからもはっきり読み取れます。
さらに、もし a に文字列を代入しようとしたら、
コンパイルエラーや実行時エラーで気づけます。
データ型をきちんと決めるというのは、
「自分の意図をコンピュータに正確に伝える」
ということでもあります。
超初心者向け「データ型」の実践ルール
最後に、今の段階で持っておいてほしい“シンプルな型選びルール”をまとめます。
整数は Long
小数を含む数値は Double
文字列は String
日付・時刻は Date
はい/いいえのフラグは Boolean
Variant は「どうしても型を決められないときだけ」にする
このルールだけでも、コードの安定感がかなり変わります。
