Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
ディクショナリ内の配列の書き換えについて
投稿日時: 19/04/24 19:36:45
投稿者: kimwhat

質問です。
ディクショナリ内の配列に値を代入できません。
 
sub test()
set a=createobject("scripting.dictionary")
dim rc(1 to 2)
rc(1)=1
rc(2)=2
a.add rc(1),rc
a.item(1)(2)=5
debug.print a.(1)(2)
end sub
 
このコードで2が出力されます。
うまいやり方はありますか?
また、なんで書き換えできないのでしょう

回答
投稿日時: 19/04/24 21:21:50
投稿者: WinArrow
投稿者のウェブサイトに移動

↓参考になると思われるWEBページです。
 
https://z1000s.hatenablog.com/entry/2018/04/27/225040

回答
投稿日時: 19/04/24 22:00:27
投稿者: simple

とりあえず回避策は以下。

Sub test()
    Dim dic As Object
    Dim vec
    Dim rc(1 To 2)
    
    Set dic = CreateObject("scripting.dictionary")
    
    rc(1) = 1
    rc(2) = 2
    dic.Add 3, rc
    
    dic.Item(3)(2) = 5
    Debug.Print dic(3)(2) '  => 2
    
    '配列そのものを修正してから、もう一度設定する必要がある。
    vec = dic(3)
    vec(2) = 5
    dic(3) = vec
    'なお、dic.Add 3, vec とやるとエラーになることに注意。
    
    Debug.Print dic(3)(2) '  => 5
End Sub

 
# 配列ではなく、.NetのArrayListを使うと直接操作できるんですよね。
# それで説明に躊躇してしまった。適当な理屈をつけてもいけないし。
# とりあえず回避策だけ。

投稿日時: 19/04/25 06:42:13
投稿者: kimwhat

ありがとうございます。
 
素直に配列自体を出して、配列を変更して
ディクショナリを更新する手順で回避ですね。
 
あとは配列でなく何らかのクラスにしてあげるか。
 
何で書き換えできないのでしょうね、エラーもでませんし。

投稿日時: 19/05/03 01:34:05
投稿者: kimwhat

回避することができました。
ありがとうございます。