質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

受付中

vbaでのforループの回し方について(json)

satprogram
satprogram

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

2回答

0グッド

0クリップ

310閲覧

投稿2023/01/29 02:59

前提

vbaでjson出力を実現しようとすると、共通部分のオブジェクト定義の箇所でエラーが出ます。

実現したいこと

json出力をvbaで実現させたい

発生している問題・エラーメッセージ

このキーは既にこのコレクションの要素に割り当てられています。

実現させたいjson

{ "A": { "a": "num" }, "B": { "a": "num", "b": ["bStr1", "bStr2"], //"b"と"c"の要素数は同じです "c": ["cStr1", "cStr2"], "d": "dStr" }, "C": { "a": "num", "b": ["bStr1", "bStr2", "bStr3"], "c": ["cStr1", "cStr2", "cStr3"], "d": "dStr" }, "D": { "a": "num", "b": ["bStr1"], "c": ["cStr1"], "d": "dStr" } }

試したこと

keyが"B","C","D"については、valueのオブジェクトが共通しているのでforループで回したいが、keyが"B"のvalueを定義した後に、"C"のvalueを定義しようとすると、"a","b","c","d"の部分で上記エラーが出ます。
※下記コードの~部分は省略しています。

//大元のオブジェクトを定義 Dim Dic1 As New Dictionary //共通部分のオブジェクトを定義 Dim Di2 As New Dictionary Dic2.Add "a", ~ Dic2.Add "b", ~ Dic2.Add "c", ~ Dic2.Add "d", ~ Dic1.Add "A", Dic2 Dic2.Add "a", ~ Dic2.Add "b", ~ Dic2.Add "c", ~ Dic2.Add "d", ~ Dic1.Add "B", Dic2 Dic2.Add "a", ~ Dic2.Add "b", ~ Dic2.Add "c", ~ Dic2.Add "d", ~ Dic1.Add "C", Dic2 Dic2.Add "a", ~ Dic2.Add "b", ~ Dic2.Add "c", ~ Dic2.Add "d", ~ Dic1.Add "D", Dic2

ご回答のほど、何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

otn

2023/01/29 03:14

エラーの意味は理解していますか?
satprogram

2023/01/29 03:19

同じキー、つまり"a", "b", "c", "d"をDic2に割り当てようとしているため、エラーが出ていると認識しています。しかし、出力したいjsonを実現する上で他の方法がまだ分かっていないです、、、、
otn

2023/01/29 10:44

1つのDictionaryに同じキーは1つしか存在できないので、同じキーをaddしては駄目だと言うことはわかりますか? 1つのDictionaryを更新したいのか、それぞれ別のDictionaryにしたいのか、どちらなのでしょう?

回答2

0

Dic1に追加するDictionaryをそれぞれ別のオブジェクトとしたいのなら、それぞれ別に生成(New)する必要があります。

vba

1 Dim Dic1 As Dictionary 2 Dim Dic2 As Dictionary 3 4 Set Dic1 = New Dictionary 5 6 Set Dic2 = New Dictionary 7 Dic2.Add "a", "num" 8 Dic1.Add "A", Dic2 9 10 Set Dic2 = New Dictionary 11 Dic2.Add "a", "num" 12 Dic2.Add "b", Array("bStr1", "bStr2") 13 Dic2.Add "c", Array("cStr1", "cStr2") 14 Dic2.Add "d", "dStr" 15 Dic1.Add "B", Dic2 16 17 Set Dic2 = New Dictionary 18 Dic2.Add "a", "num" 19 Dic2.Add "b", Array("bStr1", "bStr2", "bStr3") 20 Dic2.Add "c", Array("cStr1", "cStr2", "cStr3") 21 Dic2.Add "d", "dStr" 22 Dic1.Add "C", Dic2 23 24 Set Dic2 = New Dictionary 25 Dic2.Add "a", "num" 26 Dic2.Add "b", Array("bStr1", "bStr2") 27 Dic2.Add "c", Array("cStr1", "cStr2") 28 Dic2.Add "d", "dStr" 29 Dic1.Add "D", Dic2 30 31 'Dictionaryの中身の確認 32 Dim key1, key2 33 For Each key1 In Dic1.keys 34 Debug.Print key1 & ":" 35 For Each key2 In Dic1(key1) 36 If IsArray(Dic2(key2)) Then 37 Debug.Print vbTab & key2 & ": " & Join(Dic2(key2), ",") 38 Else 39 Debug.Print vbTab & key2 & ": " & Dic2(key2) 40 End If 41 Next 42 Next 43

投稿2023/01/29 06:00

hatena19

総合スコア32213

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

提示コードをみるかぎり、Addで要素(アイテム)を常に追加しているので提示エラーが発生していると思われます。
よってキーが存在していれば値の更新を行うようにすればよいかと思います。
参考:【VBA】Dictionaryのアイテムの値を変更する方法【検索して値を入力する】

投稿2023/01/29 03:17

can110

総合スコア36974

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

satprogram

2023/01/29 03:37

「キーが存在していれば値の更新を行う」について、"B", "C", "D"に追加したいオブジェクトは形は同じですが、別物として扱いたい場合、「キーが存在していれば値の更新を行う」ことで実現できるのでしょうか? vba初学なもので、ご教示お願いいたします、、、
can110

2023/01/29 03:43

私もVBAほとんど触ったことないのですが 別物として扱いたいものが値なのであれば実現できるはずです。
satprogram

2023/01/29 03:56

承知しました。有難うございます!

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。