VBAでスタックを実装しました。
そのスタックにRangeオブジェクトを格納したいのですが、うまくいきません。
スタックのpushとpopの部分は下記のように書きました。
VBA
1'Stack classモジュール 2 3Private arr() As Variant 4Private size As Long 5 6Private Sub Class_Initialize() 'コンストラクタ 7 ReDim arr(0) 8 size = 0 9End Sub 10 11Public Sub push(item As Variant) 12 size = UBound(arr) + 1 13 ReDim Preserve arr(size) 14 15 Dim valueType As Long 16 valueType = VarType(item) 17 18 Select Case valueType 19 Case vbObject, vbDataObject, vbUserDefinedType 20 Set arr(size) = item 21 Case Else 22 arr(size) = item 23 End Select 24End Sub 25 26Public Function pop() As Variant 27 If size = 0 Then 28 Err.Raise 1001, Description:="スタックは空です" 29 End If 30 31 Dim valueType As Long 32 valueType = VarType(arr(size)) 33 34 Select Case valueType 35 Case vbObject, vbDataObject, vbUserDefinedType 36 Set pop = arr(size) 37 Case Else 38 pop = arr(size) 39 End Select 40 41 size = size - 1 42 ReDim Preserve arr(size) 43End Function 44 45Function length() As Long 46 '省略 47End Function 48 49Public Function getStack() As Variant 50 '省略 51End Function 52
このStackオブジェクトに以下のようにRangeオブジェクトを格納しようとしました。
VBA
1Public stk As Stack 2 3Sub main() 4 5 Dim current As Range 6 7 Set stk = New Stack 8 Set current = Range("B3") 9 current.Select 10 stk.push current.Offset(0, 1) 11 current = stk.pop() 12 current.Select 13End Sub
これで、スタックに格納できているように見えるのですpopしたときに何も取り出せていないようです。
スタックの実装にある
valueType = VarType(arr(size))
の'valueType'の値が'0'になっていました。これは、スタックにpushされたオブジェクトは空ということだと思いますが、手詰まりでここからどうして良いかわかりません。
どこをどう直すと良いのでしょうか。
回答1件
あなたの回答
tips
プレビュー