Я начал сам пробовать изменить его и к сожалению на строчке
Код |
---|
With Sheet2 iarr = .Range(.[a5].End(xlToRight), .[a5].End(xlDown)).Value |
макрос дает ошибку Overflow ((
По задумке, макрос должен сверять значения в столбце 59 на первом листе со вторым листои и так же столбцом номер 59 и если кода совпали, то перезаписывать строчку, если нет, то создать новую.
Код |
---|
Sub baseupd59()
Dim arr(), iarr(), x
Dim i, j, dic As New Scripting.Dictionary
With Sheet1
arr = .Range(.[a5].End(xlToRight), .[a5].End(xlDown)).Value
End With
With Sheet2
iarr = .Range(.[a5].End(xlToRight), .[a5].End(xlDown)).Value
End With
For i = 2 To UBound(iarr)
dic.Item(CStr(iarr(i, 59))) = i
Next i
ReDim larr(1 To UBound(arr), 1 To UBound(arr, 2))
For i = 2 To UBound(arr)
If Not dic.Exists(CStr(arr(i, 59))) Then
x = x + 1
For j = 1 To UBound(arr, 59): larr(x, j) = arr(i, j): Next j
Else: For j = 1 To UBound(arr, 2): iarr(dic.Item(CStr(arr(i, 59))), j) = arr(i, j): Next j
End If
Next i
With Sheet2
.Columns(59).NumberFormat = "@"
.[a2].Resize(UBound(iarr), UBound(iarr, 2)).Value = iarr
i = .Range("a" & .Rows.Count).End(xlUp).Row + 1
If Not IsEmpty(larr(1, 1)) Then .Range("a" & i).Resize(i, UBound(larr, 2)).Value = larr
End With
End Sub
|
Помогите пожалуйста