初心者オサムシがExcelのマクロと戦う戦闘ブログである
by オサムシ
タグ:Static ( 1 ) タグの人気記事
試験メモ【静的変数とオブジェクト変数】/VBAエキスパート

静的変数とオブジェクト変数



静的変数

プロシージャ内で宣言した変数は、通常そのプロシージャが終了するとリセットされます

静的変数とは、プロシージャが終了しても消えない変数です

ブックが開いている限り、変数は保持されます

ブックを閉じると、上書き保存しても変数はリセットされます

変数を宣言するときDimではなくStaticをつかいます

Sub sample5()
Static hensu5 As Long
hensu5 = hensu5 + 1
MsgBox hensu5
End Sub


これで、マクロを実行する度に変数に1が加算されていきます

オブジェクト変数

読んで字のごとし、オブジェクトを格納した変数をいいます

通常の変数は値が格納されていますが、オブジェクト変数は、オブジェクトそのものが格納されている為、格納されたオブジェクトと同じ性質を持ちます
つまりValue・Formulaなどのプロパティや、Insert・Deleteなどのメソッドが使えるということです

当然、オブジェクト型変数の宣言をしなければなりません

よく使うオブジェクト変数を宣言してみます
①セル Dim hensu As Range
②シート Dim hensu As Worksheet
③ブック Dim hensu As Workbook

もっと大雑把に宣言する方法もあります
Dim hensu As Object
これですべてのオブジェクトを格納できます
また、万能型であるVariant型は、あらゆるオブジェクトも格納できます

オブジェクト変数にオブジェクトを代入するときは「Set」命令を使います

Set hensu = Renge("A1")

検証してみましょう

Sub sample6()
Dim hensu6 As Object '変数にオブジェクトを定義
Set hensu6 = Range("A1") 'A1セルを代入
hensu6 = "テスト"
Set hensu6 = Nothing '格納したオブジェクトを破棄
MsgBox hensu6
End Sub

d0285354_150413.jpg

d0285354_1503692.jpg

Nothingでhensu6を破棄していますので、最後のMsgBoxはエラーとなります
このように、明示的にオブジェクト変数を破棄することができます

オブジェクト変数が参照している参照元オブジェクトを取得したい場合ですが、下記の方法を考えてみました
Sub sample7()
Dim hensu7 As Object
Set hensu7 = Range("A1")
'hensu7 = "テスト"
htype = TypeName(hensu6) '変数のタイプを取得
MsgBox htype '取得した変数のタイプを表示
Select Case htype '取得した変数タイプによって処理を変える
Case "Worksheet"
a = hensu7.Name
Case "Workbook"
a = hensu7.Name
Case "Range"
a = hensu7.Address
End Select
MsgBox a 'Select Caseで判定した内容を表示
End Sub

d0285354_151683.jpg

d0285354_1511314.jpg

一応、使いそうな3つのオブジェクトタイプを想定してSelect Caseで判定・選択して表示というのを書いてみましたが、どんなオブジェクトにも対応できるもっとスッキリした良い方法あったらぜひコメントお願いします。osamushi

オサムシじゃーなる
[PR]
by 03musi | 2013-02-11 15:18 | 試験メモ/VBAエキスパート


カテゴリ
試験メモ/VBAエキスパート
マクロ 基礎
マクロ 応用
Excel 基礎
Excel 応用
Office
日記
もくじ

ファン

フォロー中のブログ
初心者のためのOffic...
七里ヶ浜だより Lett...
はじめてのMac-Sup...
初心者のためのOffic...

検索

タグ

その他のジャンル