Sub GPE()
'Arr la mang ket qua : trong do Arr(i,1) = dia chi dong
' Arr(i,2) = Chieu dai
' Arr(i,3) = M min
' Arr(i,4) = M average
' Arr(i,5) = M Max
Dim tmpArr, tmp, Arr(), ArrIndex(1 To 3), ArrLength(1 To 3)
Dim i&, j&, index, str$, n&
tmpArr = Range("A11", [F65536].End(3))
ReDim Arr(1 To UBound(tmpArr, 1), 1 To 5)
'________________________________________________________________
With CreateObject("scripting.dictionary")
For i = 1 To UBound(tmpArr, 1)
tmp = CStr(Trim(tmpArr(i, 1))) & CStr(Trim(tmpArr(i, 2)))
If Len(tmp) Then
If Not .exists(tmp) Then
n = n + 1: .Add tmp, n
ArrIndex(1) = i: ArrIndex(2) = i: ArrIndex(3) = i
ArrLength(1) = CDbl(tmpArr(i, 3)): ArrLength(2) = CDbl(tmpArr(i, 3)): ArrLength(3) = CDbl(tmpArr(i, 3))
Arr(n, 1) = ArrIndex: Arr(n, 2) = ArrLength
Arr(n, 3) = CDbl(tmpArr(i, 6)): Arr(n, 4) = CDbl(tmpArr(i, 6)): Arr(n, 5) = CDbl(tmpArr(i, 6))
Else
j = .Item(tmp)
Select Case tmpArr(i, 3)
Case Is < Arr(j, 2)(1)
Arr(j, 1)(1) = i: Arr(j, 2)(1) = CDbl(tmpArr(i, 3)): Arr(j, 3) = CDbl(tmpArr(i, 6))
Case Is = Arr(j, 2)(1)
If tmpArr(i, 6) < Arr(j, 3) Then
Arr(j, 1)(1) = i: Arr(j, 2)(1) = CDbl(tmpArr(i, 3)): Arr(j, 3) = CDbl(tmpArr(i, 6))
End If
'............................................................................................................
Case Is > Arr(j, 2)(3)
Arr(j, 1)(3) = i: Arr(j, 2)(3) = CDbl(tmpArr(i, 3)): Arr(j, 5) = CDbl(tmpArr(i, 6))
Case Is = Arr(j, 2)(3)
If tmpArr(i, 6) < Arr(j, 5) Then
Arr(j, 1)(3) = i: Arr(j, 2)(3) = CDbl(tmpArr(i, 3)): Arr(j, 5) = CDbl(tmpArr(i, 6))
End If
End Select
If cdbl(tmpArr(i, 6)) > Arr(j, 4) Then
Arr(j, 4) = cdbl(tmpArr(i, 6)): Arr(j, 1)(2) = i
End If
End If
End If
Next
End With
'_________________________To mau du lieu tim thay________________________________________________________________________________
If n Then
Cells.Interior.Color = xlNone
ReDim tmpArr(1 To UBound(tmpArr, 1))
For i = 1 To n
For Each index In Arr(i, 1)
tmpArr(index) = True
j = 10 + index: Range("A" & j).Resize(, 29).Interior.Color = vbYellow
Next
Next
If MsgBox("Xoa du lieu khong thoa man", vbOKCancel) = vbOK Then
Application.ScreenUpdating = False
Cells.Interior.Color = xlNone
For i = 1 To UBound(tmpArr)
If Not tmpArr(i) Then
For j = i To UBound(tmpArr)
If tmpArr(j) Then
str = str & i + 10 & ":" & j + 9 & ","
i = j
Exit For
End If
Next
End If
Next
On Error Resume Next
Range(Left(str, Len(str) - 1)).Delete
'_______Lam dep + ke khung_____________________________________________________________
For Each index In Array(9, 12)
Range("A11:AC11").Resize(n * 3).Borders(index).LineStyle = xlNone
Next
For i = 3 To n * 3
j = i + 10
With Range("A" & j & ":AC" & j).Borders(9)
.Color = vbBlue
.LineStyle = xlDash
.Weight = xlMedium
End With
i = i + 2
Next
End If
End If
Application.ScreenUpdating = True
End Sub