Sub GPE()
Dim DR As Range, Rng As Range, Dic As Object, Dic35 As Object, Dic95 As Object
Dim Sarr(), S_UX(), UXarr(), i As Long, R As Long, LastR As Long, Tmp As String
Application.ScreenUpdating = False
Set Dic = CreateObject("Scripting.Dictionary")
Set Dic35 = CreateObject("Scripting.Dictionary")
Set Dic95 = CreateObject("Scripting.Dictionary")
R = Sheets("DATA").Range("A65500").End(xlUp).Row
Set DR = Sheets("DATA").Range("A2:R" & R)
LastR = Sheets("CONTROLLER").Range("A65500").End(xlUp).Row
Sarr = Sheets("CONTROLLER").Range("A2:N" & LastR).Value
S_UX = Sheets("CONTROLLER").Range("S2:W" & LastR).Value
UXarr = Sheets("UX").Range("A2:Q" & Sheets("UX").Range("A65500").End(xlUp).Row).Value
For i = 1 To UBound(Sarr)
Tmp = Sarr(i, 1)
Dic.Add (Tmp), i
If Sarr(i, 11) < 95 Then
Dic95.Add (Tmp), i
If Sarr(i, 11) <= 35 Then Dic35.Add (Tmp), i
End If
Next i
For i = 1 To R - 1
Tmp = DR(i, 1).Value
If Not Dic.exists(Tmp) Then
If DR(i, 11) >= "02" And DR(i, 11) <= "33" Then
If Rng Is Nothing Then
Set Rng = Range(DR(i, 1), DR(i, 18))
Else
Set Rng = Application.Union(Rng, Range(DR(i, 1), DR(i, 18)))
End If
End If
Else
If Dic95.exists(Tmp) Then
k = Dic95.Item(Tmp)
Sarr(k, 11) = Format(DR(i, 11), "@@")
If Dic35.exists(Tmp) Then
k = Dic35.Item(Tmp)
Sarr(k, 10) = DR(i, 10)
Sarr(k, 12) = DR(i, 12)
Sarr(k, 13) = DR(i, 13)
Sarr(k, 14) = DR(i, 14)
End If
End If
End If
Next i
For i = 1 To UBound(UXarr)
Tmp = UXarr(i, 1)
If Dic.exists(Tmp) Then
n = Dic.Item(Tmp)
S_UX(n, 1) = UXarr(i, 13)
S_UX(n, 2) = UXarr(i, 14)
S_UX(n, 3) = UXarr(i, 15)
S_UX(n, 4) = UXarr(i, 16)
S_UX(n, 5) = UXarr(i, 17)
End If
Next i
If k Then
Sheets("CONTROLLER").Range("I2").Resize(LastR - 1).NumberFormat = "@"
Sheets("CONTROLLER").Range("K2").Resize(LastR - 1).NumberFormat = "@"
Sheets("CONTROLLER").Range("A2").Resize(LastR - 1, 14) = Sarr
MsgBox ("Old Row Is Updated From Data")
End If
If n Then
Sheets("CONTROLLER").Range("S2").Resize(LastR - 1, 5) = S_UX
MsgBox ("Old Row Is Updated From UX")
End If
Sheets("NEW").Range("A2:R20000").ClearContents
If Not Rng Is Nothing Then
Rng.Copy Sheets("NEW").Range("A2")
Rng.Copy Sheets("CONTROLLER").Range("A" & LastR + 1)
MsgBox ("Updated New Row")
Else
MsgBox ("No Row Inserted")
End If
Application.ScreenUpdating = True
End Sub