Sub Dongia_VL_NC_MTC()
Dim sArr, dArr(), I As Long, Ihm As Long, Er As Long
Dim VL As String, NC As String, MTC As String, Ivl As Long, Inc As Long, Im As Long
With Sheets("DGCT")
VL = .Range("K6"): NC = .Range("L6"): MTC = .Range("M6")
sArr = .Range("A7:A" & .Range("C65535").End(3).Row).Resize(, 10).Value ' Tạo 1 mảng sArr
ReDim dArr(1 To UBound(sArr), 1 To 3) ' Khai báo mảng dArr có số hàng bằng hàng mảng sArr, số cột bằng 3
For I = 1 To UBound(sArr) ' Chạy từ hàng 1 đến hàng cuối của mảng sArr
If sArr(I, 2) = Empty Then ' Khi ô cột B không có giá trị
If sArr(I, 4) = VL Then Ivl = I + 6 ' Nếu dòng nào của cột D ="a.) Vật liệu" thì ghi lại 1 cái Ivl =I hàng đó
If sArr(I, 4) = NC Then Inc = I + 6 ' Nếu dòng nào của cột D ="b.) Nhân công" thì ghi lại 1 cái Inc =I hàng đó
If sArr(I, 4) = MTC Then Im = I + 6 ' Nếu dòng nào của cột D ="c.) Máy thi công" thì ghi lại 1 cái Im=I hàng đó
End If
If sArr(I, 2) <> Empty Then Ihm = I ' Nếu dòng nào có dữ liệu thì ghi lại Ihm=I
If Ivl Then
dArr(Ihm, 1) = "=" & .Range("J" & Ivl).Address: Ivl = 0
' Khi có Ivl gán vào mảng dArr với vị trí là Ihm và cột là 1, sau đó gán lại Ivl=0 (trả lại ban đầu)
End If
If Inc Then
dArr(Ihm, 2) = "=" & .Range("J" & Inc).Address: Inc = 0
' Khi có Inc gán vào mảng dArr với vị trí là Ihm và cột là 2, sau đó gán lại Inc=0 (trả lại ban đầu)
End If
If Im Then
dArr(Ihm, 3) = "=" & .Range("J" & Im).Address: Im = 0
' Khi có Im gán vào mảng dArr với vị trí là Ihm và cột là 3, sau đó gán lại Im=0 (trả lại ban đầu)
End If
Next I
Er = .Range("D65535").End(3).Row 'Xác định dòng cuối có dữ liệu của cột D
.Range("K7:M" & Er + 1).ClearContents 'Xóa dữ liệu cũ từ K7 đến M có dữ liệu
.Range("K7").Resize(I - 1, 3) = dArr 'Gán dữ liệu xuống bảng tính
End With
End Sub