• 締切済み

【VBA】入れ子のユーザー定義型

閲覧ありがとうございます。 入れ子になってるユーザー定義型(構造体)に、値を代入する処理を抽象化したいのですが、上手くできません。 色々間違っているかもしれませんが、やりたいことのイメージは下のような感じです。 Private Type id kind As String memberId As String End Type Private Type items kind As String name As String id As id End Type sub main() (省略) Dim tmp As Variant tmp = jsonのレスポンスが1行ずつ配列で入ってる Dim items() As items items() = loading(tmp) (省略) End Sub Private Function loading(ByVal tmp As Variant) Dim pair() As Variant pair = Split(tmp, ":") Dim head As String Dim items() As items  If 末尾が"{"だったら、 If pair(0) = "{" then head = "items(0)" else if pair(1) = "{" then head = head & pair(1) Else head.pair(0) = pair(1) ←pair(0)は名前、pair(1)は値がそれぞれ入っている endif loading = items() End Function 説明が下手すぎてすみません。 実際は、もっとたくさん入れ子になっている為、抽象化できないと非常に困ります。 答えられそうだけど質問の意味をもう少しきちんと…ということであれば努力しますので、なんとか、よろしくお願いいたします。

みんなの回答

回答No.2

>変数にユーザー定義型の変数を入れて使いたかったのです…。 変数をユーザー定義型で宣言すれば入りますが、 private type a   b as string  c as a end type のようなことを必要な階層だけしたいということでしょうか? 構造体でのやり方が思いつきませんでした。 配列ならvariantに代入できますので似たようなことができると思います。 どこに何を入れたかは暗黙のルールか、多次元配列で印をつければよいと思います。(構造体のような扱いやすさはなくなってしまいますが)

回答No.1

やりたいことがよくわかりません。 head As Stringなのにhead.pair(0)が成立するのでしょうか? 入力イメージと出力イメージを書いたほうがアドバイスしやすいかも。 例:  入力 strTmp =123-21  出力 int(0)=1 int(1)=2 int(2)(0)=3 int(2)(1)=2 int(2)(2)=1

sugaru1
質問者

補足

>head As Stringなのにhead.pair(0)が成立するのでしょうか? しないから困ってました…。 変数にユーザー定義型の変数を入れて使いたかったのです…。 ごめんなさい、入力イメージと出力イメージでうまく表せないです…。 力になってくれようとしたのすみません。。。