0

次のループがあります

r = 4
c = 4

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")
For a_counter = 1 To 7
For Each userbean In userBeanList

Sheets("Sheet2").Cells(r, c) = userbean.nodeName

Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
 r = r + 2
a_counter = a_counter + 1
If (a_counter = 7) Then Exit For

Next userbean
c = c + 1
r = 4
a_counter = 1
Next a_counter

これは基本的に私のノードを通過し、行 4 にノード名を出力し、その後に行 5 の下のセルにノード値を出力します。これを 6 回繰り返して、ノード名に続いてスプレッドシートのリストのノード値を取得します。次に、7に達するとforループが終了し、列が1ずつインクリメントされ、行が4にリセットされ、これが繰り返されるカウンターがあります。ただし、userBeanList の For Each userbean は最初にリセットされているように見えるため、次のユーザー Bean を取得するのではなく、最初のユーザー Bean を再度取得します。以下のコードを修正して、ノードで次のユーザー Bean を取得するにはどうすればよいですか?

4

1 に答える 1

3

これを試して:

r = 4
c = 4
a_counter = 1

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    a_counter = a_counter + 1
    If a_counter  >= 7 Then
        c = c + 1
        r = 4
        a_counter = 1
    End If

Next userbean

a_counter を for ループとして使用しようとしていますが、別のカウンターとして、邪魔になる for ループは必要ありません。


編集:

a-Counter はまったく必要ありません。r 値を使用して、6 がいつ完了したかを確認できます。

r = 4
c = 4

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    If r  > 14 Then
        c = c + 1
        r = 4
    End If

Next userbean
于 2016-03-05T21:20:23.480 に答える