【GさんといくさんのVBAラボ】第1話:「Dimって何?」 〜変数と型の世界を完全理解する〜
「VBAのコードって、なんで最初に Dim がズラッと並ぶんだろう?」
マクロを書き始めた人なら、一度はそう思ったことがあるはずです。
このシリーズでは、見積もりマクロを一緒に育てている いくさん と、VBA側の案内役 Gさん の会話をベースに、実際の開発プロジェクトでつまづいたポイントを「ちゃんと腑に落ちるレベル」で解説していきます。
はじめに:Dimの正体に迫る
いくさん:
Gさん、VBAのコードって最初ぜんぶ Dim から始まるじゃないですか。
あれ、いったい何してるんです?
Gさん:
お、そこに気づきましたね。
Dim はね、VBAの世界でいちばん最初に覚える“召喚の呪文”みたいなものです。
この1行で、変数という名の『小さな入れ物』をこの世に作るんですよ。
例えばこんなコード:
Dim num As Double
num = 10
この2行で何が起きているかというと、
Dim num As Doubleで「num という名前の入れ物(変数)を用意して、数値用の箱にします」と宣言num = 10で、その箱の中に 10 という数字を入れる
これが、VBAの「変数」と「型」の一番シンプルな姿です。
A. 変数ってそもそも何者?
プログラミングで言う「変数」は、ざっくりいうと「名前がついた箱」です。
- 箱には「数字」や「文字」や「日付」や「シート」など色々なものが入る
- その箱に「名前(num, ws, total など)」をつけることで、後からその中身にアクセスできる
VBA では、その箱を作るときに Dim を使います。
Dim x As Double
Dim name As String
Dim ws As Worksheet
ここで重要なのが As の右側、つまり「型(Type)」です。
B. 型(Type)とは? 〜設計図と箱の関係〜
Gさんの表現でいうと、
- 型(Type) = どんな種類のものか(設計図)
- 変数(Variable) = その型を使って作った実物の箱
例えば:
Dim num As Double
Double… 「数値(小数点あり)を入れるための型」num… Double型の箱、その中に 3.14 や 10 などの数値が入る
同じように、
Dim ws As Worksheet
Worksheet… Excelの「シートそのもの」を扱うときの型ws… どのシートを指しているかを保持する変数
型を意識すると、コードがグッと読みやすくなります。
B-1. よく出てくる型の一覧(いくさん向け)
| 型名 | 意味 | 例 | よくある使いどころ |
|---|---|---|---|
| Double | 小数点ありの数値 | Dim rate As Double |
単価、税率、係数など |
| Long | 整数(大きめ) | Dim r As Long |
行番号カウンタなど |
| String | 文字列 | Dim title As String |
工事項目名、ファイル名 |
| Boolean | True / False | Dim flg As Boolean |
条件フラグ |
| Worksheet | シートオブジェクト | Dim ws As Worksheet |
特定のシートを指す |
| Workbook | ブックオブジェクト | Dim wb As Workbook |
元ファイルやテンプレートファイル |
| Object | オブジェクト全般 | Dim anyObj As Object |
辞書やCollectionなど汎用 |
| Variant | なんでも入る“自由型” | Dim v As Variant |
セルから値を受け取るときに便利 |
C. 「=」と「Set」の違い 〜値型とオブジェクト型〜
いくさん:
Dim num As Double のときは num = 10 って書きますよね?
でもシートのときは Set ws = ... になるの、なんか気持ち悪いです。
Gさん:
そこに「値」と「モノ」の違いがあるんですよ。
値(数字・文字)は = で代入。
モノ(シート・ブック・レンジ)は Set で“紐づけ”ます。
C-1. 値型の例(Double, Stringなど)
Dim num As Double
num = 10 ' ✅ OK
Dim txt As String
txt = "基本" ' ✅ OK
ここで使っているのは、どちらも値なので = でそのまま代入できます。
C-2. オブジェクト型の例(Worksheet, Workbookなど)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("基本") ' ✅ OK
ここで ws は「シートというモノへの参照(住所)」を持っています。
ws = "基本" と書いてしまうと、
- 右側はただの文字列
- 左側はシートオブジェクト
なので「型がちがう」と怒られます。
C-3. まとめ:どっちを使う?
| ケース | 正しい書き方 | NG例 |
|---|---|---|
| 数値や文字列を入れる | num = 10name = "基本" |
Set num = 10 |
| シートやブックを指したい | Set ws = Sheets("基本") |
ws = "基本" |
D. Variant と Object の違い
いくさんが気にしていたポイント:
「Object と Variantって同じ“なんでも入る”仲間じゃないの?」
結論から言うと、
- Variant = なんでも入る「値 の箱」
- Object = なんでも入る「オブジェクト の箱」
D-1. Variant の例
Dim v As Variant
v = 123 ' 数値
v = "hello" ' 文字
v = #2025/11/10# ' 日付
値であればなんでも入りますが、シートを直接入れるのは普通はしません。
D-2. Object の例
Dim o As Object
Set o = Sheets("基本") ' シート
Set o = CreateObject("Scripting.Dictionary") ' 辞書
こちらは「モノ(オブジェクト)」を入れるための箱です。
D-3. 表で整理
| 型 | 中身 | 代入 | 用途 |
|---|---|---|---|
| Variant | 値(数値・文字・日付・空欄など) | v = 100 |
セルの値受け取りに便利 |
| Object | オブジェクト(シート・辞書など) | Set o = ... |
辞書やRangeなど汎用オブジェクト |
E. 日本語変数名ってアリ?「数字1」はなぜ動いたのか
いくさん:
Dim 数字1 As Double って書いたら、普通に動いたんですけど?
先頭は英字じゃなくてもいいんですか?
Gさん:
実はVBAは「全角文字(日本語)」も変数名に使えるんです。
仕様上、英字または全角文字から始めればOKなんですよ。
つまり:
Dim 数字1 As Double… ✅ 動くDim 1数字 As Double… ❌ NG(数字から始まるのはダメ)Dim "数字" As Double… ❌ NG(ダブルクォーテーションはただの文字列)
ただし、実務的には以下の理由で英語+アンダースコア命名がおすすめです。
- 海外版Excelや他ツールで文字化けする可能性
- 他言語(Python, VB.NET)に移植しづらい
- 検索や置換がしにくい
F. Variant が“空欄 → 0”を生むカラクリ
見積マクロの開発中に特にハマったのが、
「空欄のはずのセルに、なぜか 0 が入ってしまう」
これは、Variant型+自動変換が原因でした。
Dim x As Variant
x = Empty
Debug.Print CDbl(x) ' ⇒ 0 になる
空欄(Empty)を CDbl で数値化すると、勝手に 0 に変換されるんです。
対策は「条件をネストして、危ないものを先に除外する」こと:
priceVal = wsSrc.Range(priceCol & r).Value ' Variantで受け取る
If Not IsError(priceVal) Then ' エラーは即スキップ
If Not IsEmpty(priceVal) Then ' 空欄もスキップ
Dim s As String, v As Double
s = Trim(CStr(priceVal)) ' 文字列化して空白を除去
If s <> "" And IsNumeric(s) Then
v = CDbl(s) ' ここで初めて数値に変換
If v <> 0 Then
' ここから安全に計算してOK
End If
End If
End If
End If
この「一段ずつ絞り込む」書き方が、Ver007で安定動作するためのカギになっています。
G. まとめ:今日の「Dim」チェックリスト
- Dim は “変数という箱” を作る呪文
- As の右側の「型」は、その箱に何を入れるかを決める設計図
- 数値や文字は =、シートやブックは Set で代入
- Variant は便利だが、空欄 → 0 などの落とし穴がある
- 日本語変数も動くが、英語+アンダースコアが実務向き
Dim がわかると、VBAのコードを「呪文」ではなく「会話」として読めるようになります。
次にコードを開いたとき、ぜひ一番上の Dim を眺めてみてください。
「この人(変数)はどんな型で、どこで活躍してるんだろう?」と想像できるようになったら、
いくさんはもう立派なVBA使いの入口に立っています。

