読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

変数と型

Excel VBA 変数

変数宣言の書き方

この記事では配列については扱っていません。ぐぐってください。
(いずれここでも書きたい)

VBAでは、

Dim 変数名 As

という形で宣言を行います。
「As 型」は省略することも可能です。(後述しますが非推奨

例をいくつか挙げると、

Dim hoge
Dim fuga As Long

という感じです。

尚、以下のようにカンマ区切りで一度に複数の宣言をすることもできますがこれも非推奨。
可読性が落ちるので。

' hogeが型指定なし、fugaがLong
Dim hoge, fuga As Long
' hogeもfugaもLong
Dim hoge As Long, fuga As Long

そもそも指定できる型にはどういうものがあるのかというと…色々あるのですが、とりあえずよく使うやつを抜粋。以下のような感じで把握しておけばOKです。

【データ型変数】
数字とか文字とかが入るやつ

String    文字列
Long      整数
Single    実数
Boolean   True/False
Date      日付
Variant   何でも

【オブジェクト型変数】
ワークシートとかセルそのものが入るやつ

Worksheet ワークシート
Range     セル範囲
Object    オブジェクトなら何でも

「データ型」「オブジェクト型」って何だよ!という方、深く気にしなくてOKです。
なんとなくのイメージで。

また、宣言時に型を指定していない場合は自動的にVariantになります。
何を入れてもOKになります。やった万能じゃん。

尚、型を指定しないこと・Variantを使うことのデメリットは以下のような感じ。

  • 可読性が落ちる
  • コーディングミスに気付きにくい
  • メモリをたくさん使う

ミスに気付きにくいというのは、
例えば数値であるLong型で宣言した変数に文字列を入れようとするとエラーになるのですが、
Variantは何でも入るので、もちろん何を入れてもエラーにならないのです。

各型における変数のセット方法

以下のような感じ。
データを入れるときは「変数 = データ」とし、
オブジェクトを入れるときは「Set 変数 = オブジェクト」とします。

よく分からない人は覚えなくていいので、とりあえず「変数 = データ」と書いて、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」というエラーが出たら頭に「Set」を付けてみましょう。

Dim hoge1 As String
hoge1 = "文字列"

Dim hoge2 As Long
hoge2 = 1

Dim hoge3 As Single
hoge3 = 0.1

Dim hoge4 As Boolean
hoge4 = True

Dim hoge5 As Date
hoge5 = "2015/01/01"
hoge5 = "2015/01/01 12:34:56"

Dim hoge6 As Variant
hoge6 = "文字列"
hoge6 = 1
Set hoge6 = ThisWorkbook.Worksheets("Sheet1")

Dim hoge7 As Worksheet
Set hoge7 = ThisWorkbook.Worksheets("Sheet1")

Dim hoge8 As Range
Set hoge8 = ThisWorkbook.Worksheets("Sheet1").Range("A1")

Dim hoge9 As Object
Set hoge9 = ThisWorkbook.Worksheets("Sheet1")
Set hoge9 = ThisWorkbook.Worksheets("Sheet1").Range("A1")