#514 | 配列を使ったスタックのプロシージャ例 | VBA | |
「スタック」とは、「後入れ先出し」でデータを保管したり取り出したりするデータ構造あるいはデータの保管場所のことです。 たとえば、お皿を1枚ずつ上に積み上げていき(保管)、取り出すときは上から1枚ずつ取る要領と同じです。もし「A」「B」「C」という順番にスタックにデータを入れたとき、取り出す際は「C」「B」「A」という逆の順番、すなわち後入れ先出しでデータが取り出されます。 ここでは、配列を使ってそのようなデータ構造を実現するサンプルプロシージャ(クラス)を紹介します。 プログラム例: 標準モジュールではなくクラスモジュールとして作ってあります。実際に試す際には、”クラスモジュール”を新規作成した上で下記のコードを貼り付け、さらに「stack」という名前でモジュールを保存してください。 Option Compare Database Option Explicit Private mStackData() As Variant 'スタックのデータを保管する配列 Private mStackCnt As Long 'スタックのデータ数 Public Sub Push(Value As Variant) 'スタックの最上部にデータを入れる '配列のサイズをひとつ増やす ReDim Preserve mStackData(mStackCnt) '配列の最後にデータを代入 mStackData(mStackCnt) = Value 'スタックのデータ数をインクリメント mStackCnt = mStackCnt + 1 End Sub Public Function Pop() As Variant 'スタックの最上部からデータをひとつ取り出してその値を返す '配列の最後のデータを返り値に設定 Pop = mStackData(mStackCnt - 1) 'スタックのデータ数をデクリメント mStackCnt = mStackCnt - 1 '配列のサイズをひとつ減らす ReDim Preserve mStackData(mStackCnt) End Function 実行例: 上記プログラム例はクラスモジュールなので、これを利用する際は「Dim ●● As New stack 」(”●●”は任意、”stack”はクラスモジュールの保存名)のように宣言した上で、各プロシージャをメソッドとして「.」を付けて呼び出します。 Sub StackTest() Dim mystack As New stack With mystack .Push "A" .Push "B" .Push "C" Debug.Print .Pop Debug.Print .Pop Debug.Print .Pop .Push "A" .Push "B" Debug.Print .Pop .Push "C" Debug.Print .Pop Debug.Print .Pop End With End Sub 実行結果: |
|||
|
Copyright © T'sWare All rights reserved |