人気ブログランキング | 話題のタグを見る

初心者オサムシがExcelのマクロと戦う戦闘ブログである
by オサムシ
試験メモ【ユーザー定義型変数と変数の範囲(スコープ)】/VBAエキスパート

ユーザー定義型変数と変数の範囲(スコープ)



ユーザー定義型変数

複数の定義型をセットにして使いたい場合には「ユーザー定義型」を使います

例えば下記のようなシートをマクロで扱う場合に使えます
試験メモ【ユーザー定義型変数と変数の範囲(スコープ)】/VBAエキスパート_d0285354_16361226.jpg


それではマクロを書いてみましょう
Option Explicit
Type dlist
namae As String
tosu As Long
End Type
Sub sample1()
Dim dobutu(3) As dlist, i As Long
For i = 2 To 4
dobutu(i - 1).namae = Cells(i, 1)
dobutu(i - 1).tosu = Cells(i, 2)
Next i
MsgBox dobutu(2).namae & vbCrLf & dobutu(2).tosu
End Sub


このようにユーザー定義型は違う型をセットにすることもできますし、同じ型をセットにすることもできます

ちなみにユーザー定義型はオブジェクトモジュール内では使えません
標準モジュールなどを使いましょう

変数の範囲(スコープ)

通常、プロシージャ内で定義される変数は、プロシージャ内でしか通用しません

例えば、全く同じ変数名であっても、違うプロシージャであれば、全く別のものです

これはメリットであると同時に、用途によっては混乱を招くということと、一度定義した変数名でも、違うプロシージャでは使えないというデメリットがあります

このような場合は、「モジュール変数」を使います

モジュール変数は、モジュールシートの先頭の、プロシージャより上に書きます
試験メモ【ユーザー定義型変数と変数の範囲(スコープ)】/VBAエキスパート_d0285354_1646524.jpg

左の赤枠はプロジェクトで、「Microsoft Excel Objects」がオブジェクトモジュール、選択されているところが「標準モジュール」です

実行してみましょう
試験メモ【ユーザー定義型変数と変数の範囲(スコープ)】/VBAエキスパート_d0285354_16493340.jpg


モジュール変数は、モジュール内でのみ有効です

この場合、Dimで宣言してもPrivateで宣言しても結果は同じです

Publicで宣言すると、プロジェクト内(赤枠内)の他のモジュールからも参照できます

ちなみにこの変数の適用範囲の事を「スコープ」といいます

モジュール変数ならば「変数のスコープがモジュール内である」と使います

定数 Const

「Const」は定数を宣言するときに使います

当然、定数ですからプロシージャ内では変更できません

尚、「Microsoft Excel Objects」モジュールでは何かと規制が多いので、汎用的に使うマクロは標準モジュールに書きましょう。osamushi

オサムシじゃーなる
by 03musi | 2013-02-11 16:39 | 試験メモ/VBAエキスパート
<< 試験メモ【イベントプロシージャ... 試験メモ【静的変数とオブジェク... >>