dポイントプレゼントキャンペーン実施中!

ExcelVBAの初心者です。
VBAなどで、JavaのHashtableのクラスにあたるような機能は何かありますでしょうか。
redim Preserveなどで、追加することはできても、removeしたときに
サイズがその分縮小されるような機能を実現したいのですが、
ご教授いただけますと幸いです。

よろしくお願いいたします。

A 回答 (4件)

> このDictionaryをリストとして表示させたいのですが、


> JavaのListModelのようにデータの変更があるごとに
> 項目が置き換わるようなことは可能でしょうか。

調べてみましたが、同じようなものは残念ながらないようです。
クラスを定義してwrappingするという手もExcel VBAだと使えないので
さてどうしたものでしょうか。

無理やりですが、ひとつモジュールを割いて、そのモジュールのみで
辞書が見えるようにしておき、辞書に対する操作はそのモジュール
内の手続きを通して行うようにするというのはどうでしょうか?

自前で情報を管理することになりますが、更新を検知することは
できますので、それで処理の引き金にすることはできるのではないかと。
    • good
    • 0
この回答へのお礼

sakusaker7さん、ありがとうございました。
何とか教えていただいた既存の機能の中で、うまく立ち回って補いたいと思います。
今後も何かありましたら、よろしくお願いいたします。

お礼日時:2007/01/25 09:16

「JavaのHashTable」のようなものということなら、こういうものがあります。



Dim vKey
Dim sItem, sMsg
Dim oDict

Set oDict = CreateObject("Scripting.Dictionary")
oDict.Add "One", "Engine"
oDict.Add "Two", "Wheel"
oDict.Add "Three", "Tire"
oDict.Add "Four", "Spanner"

For Each vKey in oDict
sItem = oDict.Item(vKey)
sMsg = sMsg & sItem & vbCrLf
Next

MsgBox sMsg

辞書から削除するには
oDict.Remove "KEY"
のように Remove メソッドを使います。

この回答への補足

sakusaker7さん、ありがとうございます。
なんとか希望通りの動作をさせることができました。
さて、続いて質問させていただきたいのですが、
このDictionaryをリストとして表示させたいのですが、
JavaのListModelのようにデータの変更があるごとに
項目が置き換わるようなことは可能でしょうか。

重ねての質問で恐縮ですが、何卒お願いいたします。

補足日時:2007/01/18 16:51
    • good
    • 0

再度の登場です。



ReMoveメソッドを使うなら、Collectionオブジェクトもあります。

-----------------------------------------------------
Sub Test()
 Dim R, Msg

 Dim myCol As New Collection

  myCol.Add "AAA"
  myCol.Add "BBB"
  myCol.Add "CCC"

    Msg = Msg & myCol.Count & Chr(10)

    For Each R In myCol
      Msg = Msg & R & Chr(10)
    Next R

  myCol.Remove 2  '●2番目の要素”BBB”を削除

    Msg = Msg & myCol.Count & Chr(10)

    For Each R In myCol
      Msg = Msg & R & Chr(10)
    Next R

  MsgBox Msg

End Sub
-------------------------------------------------------

なぜ質問のようなことが必要なのか少し具体的に提示すると
より的確な回答が寄せられると思います。
 
    • good
    • 0
この回答へのお礼

onlyromさん、ありがとうございました。
御礼が遅れてしまい、大変申し訳ありませんでした。
いただいた回答を元に、工夫してみたいと思います。
また何かありましたら、何卒よろしくお願いします。

お礼日時:2007/01/25 09:18

こんにちは。


Javaにはとんと無知ですが回答がないようなので。

>redim Preserveなどで、追加することはできても
>removeしたときにサイズがその分縮小されるような機能を

ReDimは配列変数に動的にメモリ領域の再割り当てを行うものですから
当然、増だけではなく、減もできるわけですよね。
-------------------------------------------------------
Sub Test()
 Dim Msg As String
 Dim R As Integer
 Dim N As Integer

 Dim myArray()

 N = 3
 ReDim myArray(N)
   For R = 0 To N
     myArray(R) = R + 1000
   Next R

 N = 5
 ReDim Preserve myArray(N)
   For R = 4 To N
     myArray(R) = R + 5000
   Next R


'------------------------------
'配列を1つ少なくする

  N = N - 1
  ReDim Preserve myArray(N)
'-------------------------------

 For R = LBound(myArray) To UBound(myArray)
   Msg = Msg & R & " " & myArray(R) & Chr(10)
 Next R

 MsgBox Msg

End Sub
----------------------------------------------------------------

勘違いしてましたら平にご容赦願います。
 
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!