私は 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