Public Sub Laydulieu()
Dim sArr(), dArr(), arr(), sarr1(), darr1(), dArr2(), arr4(), dArr4(), sArr4()
Dim Dic As Object, i As Long, J As Long, K As Long, R As Long, KT As String
Dim Rng As Range, v As Variant, Stt As Long, Sodem As Long, Tam As String
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
KT = ", K" & ChrW$(237) & "ch th" & ChrW$(432) & ChrW$(7899) & "c: "
With Sheets("Dulieu")
Set Rng = .Range("B4", .Range("B65535").End(3)).Resize(, 6)
arr = .Range("B3:G3").Value
sArr = .Range("L4", .Range("L65535").End(3)).Resize(, 12).Value
End With
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'code bo sung
If Sheet1.Range("w2").Value = "" Then
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Sheet1.[b4] = "" Then Exit Sub
For i = 1 To UBound(sArr)
Dic(sArr(i, 1)) = 1
Next i
ReDim dArr(1 To UBound(sArr) * 2, 1 To 9)
For Each v In Dic.keys()
For i = 1 To UBound(sArr)
If sArr(i, 1) = v Then
Sodem = Sodem + 1
If Sodem = 1 Then
K = K + 1: Stt = Stt + 1
dArr(K, 1) = Stt
dArr(K, 2) = Application.VLookup(v, Rng, 2, False)
For J = 3 To 4
Tam = Application.VLookup(v, Rng, J, False)
If Tam <> Empty Then dArr(K, 2) = dArr(K, 2) & "; " & arr(1, J) & ": " & Tam
Next J
End If
K = K + 1
If sArr(i, 4) <> Empty Then
dArr(K, 2) = sArr(i, 3) & KT & sArr(i, 4) & " m"
Else
dArr(K, 2) = sArr(i, 3)
End If
dArr(K, 3) = sArr(i, 5): dArr(K, 4) = sArr(i, 6): dArr(K, 5) = sArr(i, 7)
dArr(K, 6) = sArr(i, 8): dArr(K, 7) = sArr(i, 9): dArr(K, 8) = sArr(i, 10)
dArr(K, 9) = sArr(i, 11)
End If
Next i
Sodem = 0
Next
With Sheets("ThamDinh")
.Range("A6:N10000").ClearContents
.Range("A6:N10000").ClearFormats
.Range("A6").Resize(K, 9) = dArr
End With
Set Dic = Nothing
Application.ScreenUpdating = True
Sheet3.Activate
Call tinhtien2
Call dinhdang2
''''''''''''''''''''''''''''''''''''''''''''''''
Else
ReDim darr1(1 To UBound(sArr), 1 To 11)
For n = 1 To UBound(sArr)
If sArr(n, 12) = Sheet1.[w2] Then
K = K + 1
darr1(K, 1) = sArr(n, 1)
For l = 2 To 11
darr1(K, l) = sArr(n, l)
Next l
End If
Next n
'(đoạn này mình tạo mãng lấy dữ liệu theo đợt ở cột W (dữ liệu cột W minht ạo thêm so với file gốc)
''''''''''''''''''''''''''''''
If Sheet1.[b4] = "" Then Exit Sub
For i = 1 To UBound(darr1)
Dic(darr1(i, 1)) = 1
Next i
ReDim dArr2(1 To UBound(darr1) * 2, 1 To 9)
For Each v In Dic.keys()
For i = 1 To UBound(darr1)
If darr1(i, 1) = v Then
Sodem = Sodem + 1
If Sodem = 1 Then
K = K + 1: Stt = Stt + 1
dArr2(K, 1) = Stt
dArr2(K, 2) = Application.VLookup(v, Rng, 2, False)
For J = 3 To 4
Tam = Application.VLookup(v, Rng, J, False)
If Tam <> Empty Then dArr2(K, 2) = darr1(K, 2) & "; " & arr(1, J) & ": " & Tam
Next J
End If
K = K + 1
If darr1(i, 4) <> Empty Then
dArr2(K, 2) = darr1(i, 3) & KT & darr1(i, 4) & " m"
Else
dArr2(K, 2) = darr1(i, 3)
End If
dArr2(K, 3) = darr1(i, 5): dArr2(K, 4) = darr1(i, 6): dArr2(K, 5) = darr1(i, 7)
dArr2(K, 6) = darr1(i, 8): dArr2(K, 7) = darr1(i, 9): dArr2(K, 8) = darr1(i, 10)
dArr2(K, 9) = darr1(i, 11)
End If
Next i
Sodem = 0
Next
With Sheets("ThamDinh")
.Range("A6:N10000").ClearContents
.Range("A6:N10000").ClearFormats
.Range("A6").Resize(K, 9) = dArr2
End With
Set Dic = Nothing
Application.ScreenUpdating = True
Sheet3.Activate
Call tinhtien2
Call dinhdang2
End If
End Sub[code]
Nó báo lỗi ở dòng [code]Tam = Application.VLookup(v, Rng, J, False)