Chào admin, nhờ giúp giải bài tập Quản lý kho, mục Báo cáo,
Minh viết code nhưng nếu không sử dụng advandfilter thì kết quả chỉ thể hiện trên 1 dòng thôi, không lấy ra được nhiều dòng nhờ ad xem file và chỉ giúp trong sheet Báo cáo hàng hoá chi tiết. Xin cảm ơn
https://drive.google.com/file/d/142Du...
Chào bạn bạn cập nhật lại báo cáo như sau:
Sub BaoCao_Update()
Dim dongcuoi As Long
dongcuoi = Sheets("Data_NhapXuat").Range("B" & Rows.Count).End(xlUp).Row
Dim t, j As Date
Dim k As String
t = Sheets("Baocao").Range("D3").Value
j = Sheets("Baocao").Range("D4").Value
k = Sheets("Baocao").Range("D5").Value
Sheets("Baocao").Range("B10:I109").ClearContents
Sheets("BaoCao").Range("B10:I109").EntireRow.Hidden = False
Dim i As Integer
Dim dongcuoi_SP As Long
Dim dongcuoi_NL As Long
Dim dongcuoi_Ngay As Long
Dim dongcuoi_SoHD As Long
For i = 6 To dongcuoi
If Sheets("Data_NhapXuat").Range("D" & i) >= t And Sheets("Data_NhapXuat").Range("D" & i) < j And Sheets("Data_NhapXuat").Range("J" & i) = k Then
dongcuoi_SP = Sheets("Baocao").Range("B" & Rows.Count).End(xlUp).Row
dongcuoi_NL = Sheets("Baocao").Range("C" & Rows.Count).End(xlUp).Row
dongcuoi_Ngay = Sheets("Baocao").Range("D" & Rows.Count).End(xlUp).Row
dongcuoi_SoHD = Sheets("Baocao").Range("E" & Rows.Count).End(xlUp).Row
With Sheets("Baocao")
.Range("B" & dongcuoi_SP + 1).Value = Sheets("Data_NhapXuat").Range("C" & i).Value ' So Phieu
.Range("C" & dongcuoi_NL + 1).Value = Sheets("Data_NhapXuat").Range("D" & i).Value ' Ngay lap
.Range("D" & dongcuoi_Ngay + 1).Value = Sheets("Data_NhapXuat").Range("E" & i).Value ' Ngay HD
.Range("E" & dongcuoi_SoHD + 1).Value = Sheets("Data_NhapXuat").Range("F" & i).Value ' So HD
End With
ElseIf Sheets("Data_NhapXuat").Range("B" & i).Value = "Nhap" Then
Sheets("Data_NhapXuat").Range("L" & i).Copy Destination:=Sheets("Baocao").Range("G9")
Else
Sheets("Data_NhapXuat").Range("L" & i).Copy Destination:=Sheets("Baocao").Range("H9")
End If
Next i
End Sub
mình đã chép code này vào và chạy thử có 2 vấn đề là cột nhập chỉ hiện được 1 dòng
và khi chạy lại code lần 2 thì chứng từ sẽ bị dồn lên duplicate 1 dòng so phiếu 002 admin chỉ giúp dùm nhé
Chào bạn bạn thử như sau nhé
Sub BaocaoArrr()
Dim dc As Long, Arr As Variant, Kq As Variant, i As Long, k As Long
dc = Sheet3.Range("B" & Sheet3.Rows.Count).End(xlUp).Row
Sheet4.Range("B10:I109").ClearContents
Arr = Sheet3.Range("B6:M" & dc).Value
ReDim Kq(LBound(Arr, 1) To UBound(Arr, 1), LBound(Arr, 2) To UBound(Arr, 2))
Dim NGAYBATDAU As Variant, NGAYKETTHUC As Variant, DKTIM As String
NGAYBATDAU = CDate(Sheet4.Range("D3").Value)
NGAYKETTHUC = CDate(Sheet4.Range("D4").Value)
DKTIM = Sheet4.Range("D5").Value
For i = LBound(Arr, 1) To UBound(Arr, 1)
If (Arr(i, 3) >= NGAYBATDAU And Arr(i, 3) <= NGAYKETTHUC) Then
If (Arr(i, 9) = DKTIM) Then
k = k + 1
Kq(k, 1) = Arr(i, 2)
Kq(k, 2) = Arr(i, 3)
Kq(k, 3) = Arr(i, 4)
Kq(k, 4) = Arr(i, 5)
Kq(k, 5) = Arr(i, 6)
If (Left(Arr(i, 2), 3) = "PXK") Then
Kq(k, 7) = Arr(i, 11)
Kq(k, 8) = Sheet4.Range("I9").Value + Arr(i, 11) - Kq(k, 7)
Else
Kq(k, 6) = Arr(i, 11)
Kq(k, 8) = Sheet4.Range("I9").Value + Arr(i, 11) - Kq(k, 7)
End If
End If
End If
Next i
If (k > 0) Then Sheet4.Range("B10").Resize(k, 8).Value = Kq
End Sub
Nhờ adin giải thích thêm biến và vòng lặp này giúp với ạ
ReDim Kq(LBound(Arr, 1) To UBound(Arr, 1), LBound(Arr, 2) To UBound(Arr, 2))
For i = LBound(Arr, 1) To UBound(Arr, 1)
Chào bạn phần này là mình sử dụng mảng bạn nhé.
Học phần mảng ở khoá nào vậy admin
Chào bạn bạn xem nhé