1

私は VBA の初心者で、配列を含むマクロを開発しています。

配列部分では、2 つの Excel ワークブックからいくつかの範囲を 2 つの別個の配列 (timearray と guzikarray) にコピーする必要があります。次に、2 つの配列を一致させ、結果を 3 番目の配列 (masterarray) にコピーします。最後に、3 番目の配列の内容をワークシートに書き戻します。

しかし、マッチングを開始すると、最初の 2 つの配列の内容が自動的に消去されることがわかりました。そのため、ワークシートには何も書き込まれませんでした。誰でも理由を教えてもらえますか?

'copy ranges to two arrays: timearray and guzikarray

masterrows = mastersheet.UsedRange.Rows.count
guzikrows = guziksheet.UsedRange.Rows.count
ReDim timearray(1 To masterrows, 1 To 2)
For i = 1 To i = masterrows
    timearray(i, 1) = Cells(i, 6).Value
    timearray(i, 2) = Cells(i, 10).Value
Next
ReDim guzikarray(1 To guzikrows, 1 To 6)
For i = 1 To i = guzikrows
    guzikarray(i, 1) = guziksheet.Cells(i, 11).Value
    guzikarray(i, 2) = guziksheet.Cells(i, 17).Value
    guzikarray(i, 3) = guziksheet.Cells(i, 14).Value
    guzikarray(i, 4) = guziksheet.Cells(i, 16).Value
    guzikarray(i, 5) = guziksheet.Cells(i, 18).Value
    guzikarray(i, 6) = guziksheet.Cells(i, 26).Value
Next

'match timearray and guzikarray, and then copied the results to masterarray

ReDim Preserve masterarray(1 To masterrows, 1 To 4)
For i = 2 To i = masterrows
    min = 100000
    For j = 2 To j = guzikrows
        If timearray(i, 1) = guzikarray(j, 1) Then
            If timearray(i, 2) = guzikarray(j, 2) Then
                If guzikarray(j, 6) <> 0 Then
                    masterarray(i, 1) = guzikarray(j, 4)
                    masterarray(i, 3) = guzikarray(j, 3)
                    If guzikarray(j, 5) < min Then
                        min = guzikarray(j, 5)
                        masterarray(i, 2) = min
                    End If
                    If timearray(i, 1) <> timearray(i + 1, 1) Then
                        If timearray(i, 1) <> timearray(i - 1, 1) Then
                            If guzikarray(j, 2) <> guzikarray(j - 1, 2) Then  masterarray(i, 4) = guzikarray(j - 1, 5)
                        End If
                    End If
                End If
            End If
        End If
    Next
Next

'write the results back to master array

Range(Cells(2, 17), Cells(masterrows, 20)).Value = masterarray
4

1 に答える 1