Sub TongHop_C1()
Dim arrData() As Variant, arrF1() As Variant, arrF2() As Variant, arrF3() As Variant
Dim dicF1 As Dictionary, dicF2 As Dictionary, dicF3 As Dictionary
Dim tenNV$, dk$, RowNum&, i&, j&, k&, n&
Set dicF1 = New Dictionary
Set dicF2 = New Dictionary
Set dicF3 = New Dictionary
arrData = Sheet1.UsedRange.Value
tenNV = Sheet2.Range("B3")
dk = Sheet2.Range("B4")
Worksheets("BaoCao").Range("J3:N1000").ClearContents
'Xac dinh dong
For RowNum = 2 To UBound(arrData, 1) 'Bo dong 1 tieu de
If arrData(RowNum, 2) Like tenNV Then
Exit For
End If
Next RowNum
If RowNum > UBound(arrData, 1) Then
MsgBox "Khong co du lieu F1"
Exit Sub
End If
dicF1.Add layMaNVrow(arrData(RowNum, 2)), 1
'Lay du lieu tu rownum
j = 0
ReDim arrF1(300)
For i = 4 To UBound(arrData, 2) - 1
If arrData(RowNum, i) Like dk And Not layMaNVrow(arrData(RowNum, 2)) Like layMaNVcol(arrData(1, i)) Then
arrF1(j) = arrData(1, i)
dicF1.Add layMaNVcol(arrData(1, i)), j + 2
j = j + 1
End If
Next i
ReDim Preserve arrF1(j)
Worksheets("BaoCao").Range("J3").Resize(UBound(arrF1, 1)).Value = WorksheetFunction.Transpose(arrF1)
' For i = 0 To dicF1.Count - 1
' Debug.Print dicF1.Keys()(i), dicF1.Items()(i)
' Next i
'// Xac dinh F2 -----------------------------------------------
j = 0 '** de noi lien tiep F2
ReDim arrF2(500, 1)
For i = 0 To UBound(arrF1) - 1
For RowNum = 2 To UBound(arrData, 1) 'Xac dinh dong
If layMaNVrow(arrData(RowNum, 2)) Like layMaNVcol(arrF1(i)) Then
Exit For
End If
Next RowNum
arrF2(j, 0) = arrF1(i) 'arrData(RowNum, 2) & " - " & arrData(RowNum, 3)
If RowNum > UBound(arrData, 1) Then
j = j + 1 'nhay dong ke neu F1 khong nam trong cot doc(khong co F2)
GoTo skipf1
End If
n = j 'nhay dong ke neu F1 khong co F2
For k = 4 To UBound(arrData, 2)
If arrData(RowNum, k) Like dk And dicF1.Exists(layMaNVcol(arrData(1, k))) = False Then
If dicF2.Exists(layMaNVcol(arrData(1, k))) = False Then
arrF2(j, 0) = arrF1(i) 'arrData(RowNum, 2) & " - " & arrData(RowNum, 3) '
arrF2(j, 1) = arrData(1, k)
dicF2.Add layMaNVcol(arrData(1, k)), arrData(1, k)
j = j + 1
End If
End If
Next k
If j = n Then j = j + 1
skipf1:
Next i
arrF2 = ReDimPreserve(arrF2, j, 2)
'------------------------------------------------------------------/
'//Xac dinh F3
j = 0 '** de noi lien tiep F3
ReDim arrF3(1000, 1)
For i = 0 To dicF2.Count - 1
For RowNum = 2 To UBound(arrData, 1) 'Xac dinh dong
If layMaNVrow(arrData(RowNum, 2)) Like dicF2.Keys()(i) Then
Exit For
End If
Next RowNum
If RowNum > UBound(arrData, 1) Then
j = j + 1
GoTo skipf2
End If
arrF3(j, 0) = dicF2.Items()(i) 'arrData(RowNum, 2) & " - " & arrData(RowNum, 3)
n = j 'nhay dong ke neu F2 khong co F3
For k = 4 To UBound(arrData, 2) - 1
If arrData(RowNum, k) Like dk And dicF1.Exists(layMaNVcol(arrData(1, k))) = False And dicF2.Exists(layMaNVcol(arrData(1, k))) = False Then
If dicF3.Exists(layMaNVcol(arrData(1, k))) = False Then
arrF3(j, 0) = dicF2.Items()(i) 'arrData(RowNum, 2) & " - " & arrData(RowNum, 3)
arrF3(j, 1) = arrData(1, k)
dicF3.Add layMaNVcol(arrData(1, k)), arrData(1, k)
j = j + 1
End If
End If
Next k
If j = n Then j = j + 1
skipf2:
Next i
arrF3 = ReDimPreserve(arrF3, j, 2)
'Debug.Print dicF3.Count
'---------------------------------------------------------/
Worksheets("BaoCao").Range("K3").Resize(UBound(arrF2, 1), UBound(arrF2, 2)).Value = arrF2
Worksheets("BaoCao").Range("M3").Resize(UBound(arrF3, 1), UBound(arrF3, 2)).Value = arrF3
MsgBox "Xong."
Erase arrF1
Erase arrF2
Erase arrF3
Set dicF1 = Nothing
Set dicF2 = Nothing
Set dicF3 = Nothing
Sheets("BaoCao").PivotTables("PivotTable1").RefreshTable
Sheets("BaoCao").PivotTables("PivotTable2").RefreshTable
End Sub