[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Dictionaryの値に入れた配列の値を上書き』(ポルポラ)
Dictionaryの値に配列が入っています。
その配列の値を上書きしたいのですが、何度やっても上書きされません。
どのようにすればよいでしょうか?
Sub 練習()
Dim P As Object
Dim moji(3) As String
Dim K As Variant
Dim num As Integer
Dim i As Integer
Dim m As String
Set P = CreateObject("Scripting.Dictionary")
moji(0) = "僕"
moji(1) = "俺"
moji(2) = "私"
P.Add "A", moji
P.Add "B", moji
P.Add "C", moji
num = 10
m = P.Item("A")(0)
P("A")(0) = m & "だよ"
For Each K In P
For i = 0 To 2 Sheets("色々試すためのシート").Range("A" & num) = K & ":" & P.Item(K)(i) num = num + 1 Next
Next
End Sub
[なって欲しい結果]
A:僕だよ
A:俺
A:私
B:僕
B:俺
B:私
C:僕
C:俺
C:私
[実行結果]
A:僕
A:俺
A:私
B:僕
B:俺
B:私
C:僕
C:俺
C:私
< 使用 Excel:Office365、使用 OS:Windows10 >
>Dim m As String ↓ Dim m() As String ’まぁ、Variant型にしてしまえば、配列にしないでいいので簡便だけど。
>' m = P.Item("A")(0) ’← P("A")の配列を取り出して、その第1ファクタを取得しただけ。 >' P("A")(0) = m & "だよ" ’ P("A")の配列を取り出して、その第1ファクタを変更しただけ。P("A")に書き戻されていない。 ↓ m = P.Item("A") ’ P("A")の配列を取得する m(0) = m(0) & "だよ" ’その配列の第1ファクタを変更する P.Item("A") = m ’変更された配列全体を、P("A")に書き戻す。
(半平太) 2019/06/05(水) 10:57
>その配列の値を上書きしたいのですが、何度やっても上書きされません。 これは所謂Dictionary等の連想配列の特融の性質です。
配列の要素が定数である時、一度配列そのものを変数にして、編集後の配列を戻すか、別の配列を入れなおす作業が必要になります。 しかし、要素がオブジェクトの時はそのまま編集できます。
dic("Beatles")=Array("Liverpool",CreateObject("Scripting.Dictionary")) dic("Beatles")(1)("John") = "Lennon" はOKですが、 dic("Beatles")(0) = "Paul" はNGです。 (seiya) 2019/06/05(水) 11:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.