Sub Main()
Dim SArr, Tmp, Cnd, Res, Freq, OptionNo(1 To 1440) As Integer, Sn
Dim i, j, k, l, ncount, Tg
Dim Dic1 As Object, Dic2 As Object
Dim Priority As Object
Tg = Timer
Freq = Sheet1.Range("G2:AQ1441")
SArr = Sheet1.Range("A2", Sheet1.Range("B2").End(xlDown))
Cnd = Sheet1.Range("D2:D1441")
Res = Sheet1.Range("E2:F1441")
Set Dic1 = CreateObject("Scripting.Dictionary")
Set Dic2 = CreateObject("Scripting.Dictionary")
Set Priority = CreateObject("System.Collections.ArrayList")
For i = 1 To UBound(SArr)
Dic1(SArr(i, 1) & SArr(i, 2)) = Dic1(SArr(i, 1) & SArr(i, 2)) & " " & i
Next i
For i = 1 To 1440
OptionNo(i) = 0
Next i
For i = 2 To UBound(Cnd)
For Each j In Split(Trim(Dic1(Cnd(i - 1, 1) & Res(i - 1, 1))))
j = CLng(j)
If SArr(j + 1, 1) = Cnd(i, 1) Then Dic2(SArr(j + 1, 2)) = ""
Next j
For Each j In Split(Trim(Dic1(Cnd(i - 1, 1) & Res(i - 1, 2))))
j = CLng(j)
If SArr(j + 1, 1) = Cnd(i, 1) Then Dic2(SArr(j + 1, 2)) = ""
Next j
Priority.Add 0
For j = 2 To 37
For l = 1 To j - 1
If Freq(i, j) < Freq(i, l) Then
Priority.Insert l - 1, j - 1
Exit For
Else: If l = j - 1 Then Priority.Insert l, j - 1
End If
Next l
Next j
Sn = Priority.toarray
ncount = 0
For j = 0 To 36
If Dic2.Exists(Sn(j)) = False Then
k = k + 1
Res(i, k) = Sn(j)
If k = 2 Then
If j = 36 then k = 0 else k = 1
ncount = ncount + 1
If ncount > OptionNo(i) Then
OptionNo(i) = ncount
Exit For
End If
End If
End If
Next j
If j = 36 And k < 2 Then
i = i - 2
If i = 0 Then
MsgBox "Khong co truong hop thoa man"
Exit Sub
End If
End If
k = 0
Priority.Clear
Dic2.RemoveAll
Next i
Sheet1.Range("AS1").Value = "Option No."
Sheet1.Range("AS2:AS1441").Value = Application.Transpose(OptionNo)
Sheet1.Range("E2:F1441").Value = Res
MsgBox Timer - Tg
With Sheet3
.UsedRange.Clear
.Range("A3").Resize(UBound(Cnd), 1) = Cnd
.Range("B3").Resize(UBound(Res), UBound(Res, 2)) = Res
.Range("A1") = Timer - Tg
End With
Beep
Beep
Beep
End Sub