Accessでデータを一時的に保存する方法まとめ(変数・定数・配列・ユーザー定義型・コレクション)
変数
パブリック変数
※使用には注意が必要
宣言するところ | 標準モジュールの宣言セクション |
ステートメント | Public |
適用範囲(スコープ) | 全モジュールの全プロシージャから参照可能 |
有効期限 | ・モジュールに変更をした場合 ・Endステートメントでプロシージャ終了時に初期化 |
モジュールレベル変数
宣言するところ | 宣言セクション |
ステートメント | Dim Private |
適用範囲(スコープ) | 宣言されたモジュール内の全プロシージャから参照可能 |
有効期限 | ・モジュールに変更をした場合 ・Endステートメントでプロシージャ終了時に初期化 |
プロシージャレベル変数
宣言するところ | プロシージャの中 |
ステートメント | Dim Private |
適用範囲(スコープ) | 宣言されたプロシージャの中からだけ参照可能 |
有効期限 | プロシージャ終了時に初期化 |
定数
パブリック定数
宣言するところ | 標準モジュールの宣言セクション |
ステートメント | Public Const |
適用範囲(スコープ) | 全モジュールの全プロシージャから参照可能 |
モジュールレベル定数
宣言するところ | 宣言セクション |
ステートメント | Const |
適用範囲(スコープ) | 宣言されたモジュール内の全プロシージャから参照可能 |
プロシージャレベル定数
宣言するところ | プロシージャの中 |
ステートメント | Const |
適用範囲(スコープ) | 宣言されたプロシージャの中だけ参照可能 |
静的変数
プロシージャの中で使える。プロシージャが終了しても値が初期化されずに保持される。
※宣言セクションでは宣言不可。パブリック変数・モジュールレベル変数は静的変数にはできない。
宣言するところ | プロシージャの中 |
ステートメント | Static |
適用範囲(スコープ) | ・モジュールに変更をした場合 ・Endステートメントでプロシージャ終了時に初期化 |
オブジェクト変数
変数のように値ではなく、オブジェクトへの参照を格納できる。
固有オブジェクト型と総称オブジェクト型があり、一般的にオブジェクトの型がわかるときは固有・わからない時は総称を使う。固有オブジェクトでの宣言のほうが実行速度はやや速い。
固有オブジェクト型での宣言 | 総称オブジェクト型での宣言 |
Dim オブジェクト変数 As Form Dim オブジェクト変数 As Label Dim オブジェクト変数 As TextBox | Dim オブジェクト変数 As Object |
オブジェクト変数にオブジェクトの参照を代入する時は、Setステートメントを使う。
例)Set MyForm = Forms(“Fフォーム”)
参照の解除にはキーワード「Nothing」を代入する
例) Set MyForm = Nothing
オブジェクトへの参照の代入の確認方法は、
例)MyForm Is Nothing
配列
変数に複数の値を代入したい場合に使う。代入できるデータ型は1種類のみ。
変数と同じようにPublicステートメントやPrivateステートメントを使用して適用範囲を指定可能。
一次元配列と多次元配列がある。多次元配列はメモリ消費が多いので多用はしないこと。
静的配列と動的配列があり、静的配列は最初から要素数が決まっているもので、動的配列は要素数が配列宣言時には確定しておらず後で決めるもの。
まず静的配列については以下の通り。
配列変数の宣言は、
例)Dim MyArray(5) As String
配列変数に値を代入するには、
例)MyArray(i) = I & “要素”
インデックス番号とは配列に格納された複数の値(=要素)につけられる番号で、0から始まる。
Option Baseステートメントを宣言セクションで宣言するとインデックス番号の最小値を変更できる。
配列変数ごとにインデックス番号の最小値をと最大値を設定したい場合は、
例)Dim MyArray(1 To 5) As String
とすることで設定できる。
多次元配列の宣言は、
例)Dim MyArray(2,2) As String
となる。
次に動的配列を見てみる。
動的配列では宣言時に配列の要素数を設定しないため、以下のような宣言になる。
例)Dim MyArray() As String
実際に使用する段階で、ReDimステートメントで要素数を設定する。要素数は数値でも変数でも可。
例)ReDim MyArray(MyLng)
例)ReDim Preserve MyArray(3)
例)Erase MyArray
ユーザー定義型
要素名 1 As データ型1
要素名 2 As データ型2
要素名 3 As データ型3
End Type
例)
Type ShokuinType
職員番号 As Long
部署コード As String
職員名 As String
End Type
例)Dim MyShokuin As ShokuinType
例)
MyShokuin( i ).職員番号 = Me.txt.Value
MyShokuin( i ).コード = Me.txt1.Value
MyShokuin( i ).職員名 = Me.txt2.Value
例)
Me.txt.Caption = Me.txt.Caption & MyShokuin( i ).職員番号 & MyShokuin( i ).コード & MyShokuin( i ).職員名 & vbCrLf
コレクション
Set コレクション = New Collection
または、
Dim コレクション As New Collection
例)Dim MyCol As New Collection
またCollectionオブジェクトには、メソッドとプロパティもある。
メソッド | 内容 |
Add | コレクションに要素を追加 |
Remove | コレクションから要素を削除 |
Item | コレクションから指定した文字列に対応する要素を返す |
プロパティ | 内容 |
Count | コレクションの要素の数を返す |
MyCol.Add 12345
MyCol.Add Me.txt
MyCol.Add “ABCDEF”
のようにやる。
また、要素の順番を変えることもできる。
で、この要素を一つ目にすることができ、
で、この要素を最後に持っていくことができる。
上の例ではMyColは独自に作成したCollectionオブジェクトだが、Accessに備わるオブジェクトの集合とのしてのコレクションもある。
コレクション名 | 内容 |
Forms | 現在開いている全フォーム Applicationオブジェクトのメンバ |
Reports | 現在開いている全レポート Applicationオブジェクトのメンバ |
Printers | システムで使用可能な全プリンタ Applicationオブジェクトのメンバ |
Me.Controls | フォーム・レポート上の全コントロール |
CurrentProject.AllForms | データベース内にある全フォーム |
CurrentProject.AllReports | データベース内にある全レポート |