こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【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

説明が下手すぎてすみません。
実際は、もっとたくさん入れ子になっている為、抽象化できないと非常に困ります。
答えられそうだけど質問の意味をもう少しきちんと…ということであれば努力しますので、なんとか、よろしくお願いいたします。

投稿日時 - 2018-04-12 01:02:39

QNo.9487635

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>変数にユーザー定義型の変数を入れて使いたかったのです…。
変数をユーザー定義型で宣言すれば入りますが、
private type a
  b as string
 c as a
end type
のようなことを必要な階層だけしたいということでしょうか?
構造体でのやり方が思いつきませんでした。

配列ならvariantに代入できますので似たようなことができると思います。
どこに何を入れたかは暗黙のルールか、多次元配列で印をつければよいと思います。(構造体のような扱いやすさはなくなってしまいますが)

投稿日時 - 2018-04-14 14:41:25

ANo.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

投稿日時 - 2018-04-12 20:57:45

補足

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

投稿日時 - 2018-04-12 21:19:20

あなたにオススメの質問