Giup mình viết code vba cho báo cáo

Liên hệ QC

langkhachquaduong

Thành viên chính thức
Tham gia
23/7/19
Bài viết
50
Được thích
8
Mình đã viết code sử dụng dictionary nhưng không được nên mình đã xóa hết code. Bên sheet báo cáo là kết quả mình mong muốn. Có bạn nào giúp mình được không. Xin cám ơn.
 

File đính kèm

File đính kèm

Upvote 0
Mình đã viết code sử dụng dictionary nhưng không được nên mình đã xóa hết code. Bên sheet báo cáo là kết quả mình mong muốn. Có bạn nào giúp mình được không. Xin cám ơn.
Hình như bạn đưa ra ví dụ tại sheet kết quả là sai vì trong sheet bán và sheet thu không có ngày nào nhỏ hơn ngày 01/01/2020 và không có ngày nào lớn hơn ngày 03/07/2020, có nghĩa khi lọc ra thì sheet kết quả sẽ bằng sheet bán và sheet thu (gộp lại).
 
Upvote 0

File đính kèm

Upvote 0
Mình đã viết code sử dụng dictionary nhưng không được nên mình đã xóa hết code. Bên sheet báo cáo là kết quả mình mong muốn. Có bạn nào giúp mình được không. Xin cám ơn.
Bạn kiểm tra kỹ lại kết quả mong muốn của bạn có chính xác chưa mới tính được.
Công thức trong cột G từ trên xuống cũng không thống nhất.
 
Upvote 0
Hình như bạn đưa ra ví dụ tại sheet kết quả là sai vì trong sheet bán và sheet thu không có ngày nào nhỏ hơn ngày 01/01/2020 và không có ngày nào lớn hơn ngày 03/07/2020, có nghĩa khi lọc ra thì sheet kết quả sẽ bằng sheet bán và sheet thu (gộp lại).
Cái này tìm trong khoảng từ ngày 01/01/2020 đến 07/03/2020 mà bạn.
Bài đã được tự động gộp:

Bạn kiểm tra file dưới xem sao.
Ý mình muốn là ở bên sheet bán
04/01/2020 mặt hàng a1 có thành tiền 100.000
04/01/2020 mặt hàng a1 có thành tiền 200.000
Nhưng sang sheet báo cáo gộp tổng 2 mặt hàng giống nhau cùng ngày thành 1
04/01/2020 mặt hàng a1 có thành tiền 300.000
Bài đã được tự động gộp:

Bạn kiểm tra kỹ lại kết quả mong muốn của bạn có chính xác chưa mới tính được.
Công thức trong cột G từ trên xuống cũng không thống nhất.
Công thức như vậy chính xác rồi mà.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái này tìm trong khoảng từ ngày 01/01/2020 đến 07/03/2020 mà bạn.
Bài đã được tự động gộp:


Ý mình muốn là ở bên sheet bán
04/01/2020 mặt hàng a1 có thành tiền 100.000
04/01/2020 mặt hàng a1 có thành tiền 200.000
Nhưng sang sheet báo cáo gộp tổng 2 mặt hàng giống nhau cùng ngày thành 1
04/01/2020 mặt hàng a1 có thành tiền 300.000
Bài đã được tự động gộp:

Bạn kiểm tra lại file dưới xem sao.
Công thức như vậy chính xác rồi mà.
Cái này tìm trong khoảng từ ngày 01/01/2020 đến 07/03/2020 mà bạn.
Bài đã được tự động gộp:


Ý mình muốn là ở bên sheet bán
04/01/2020 mặt hàng a1 có thành tiền 100.000
04/01/2020 mặt hàng a1 có thành tiền 200.000
Nhưng sang sheet báo cáo gộp tổng 2 mặt hàng giống nhau cùng ngày thành 1
04/01/2020 mặt hàng a1 có thành tiền 300.000
Bài đã được tự động gộp:


Công thức như vậy chính xác rồi mà.
Bạn kiểm tra lại file dưới xem sao.
 

File đính kèm

Upvote 0
Mình ktra như vậy mà:
G11=SUM($E$9:E11)-SUM($F$9:F11)
G12=SUM($E$9:E12)-SUM($F$9:F12)
Bạn kiểm tra lại xem
Công thức như vậy chính xác rồi mà.
Đây là file tôi tải từ bài #1
Khi nào bạn rảnh rỗi thì mở ra xem nhé. Bảo đảm nó nguyên từ bài #1, tôi không chỉnh sửa công thức và kết quả.
Không xài file .xls (lu bu lắm)
Những người tham gia topic này nếu không hiểu bạn, chờ các thành viên khác vậy.
Chào tạm biệt!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn kiểm tra lại file dưới xem sao.
Cám ơn bạn. Mình áp dụng theo code của bạn và nhất chi lan để viết theo ý mình. Mình tính tổng mục giống nhau ở cột nợ và có thì chưa biết làm sao. Mình gửi file lên nhờ bạn giúp đỡ.
 

File đính kèm

Upvote 0
Cám ơn bạn. Mình áp dụng theo code của bạn và nhất chi lan để viết theo ý mình. Mình tính tổng mục giống nhau ở cột nợ và có thì chưa biết làm sao. Mình gửi file lên nhờ bạn giúp đỡ.
mình chưa hiểu ý bạn. Bạn gửi ví dụ lên cho dễ hiểu. :)
 
Upvote 0
Bạn gửi file minh xem lại coi
Bài đã được tự động gộp:

Mình gửi lại file
Dữ liệu phải nhập đúng chuẩn. Chạy code
Mã:
Sub XYZ()
  Dim sArr(), aCol(), Res()
  Dim fDate As Date, eDate As Date
  Dim i&, k&, kHang$, colNo$
  With Sheet1
    aBan = .Range("A2", .Range("G" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet2
    aThu = .Range("A2", .Range("F" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet3
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 8 Then .Range("A9:G" & i).Clear
    fDate = .Range("C4").Value2
    eDate = .Range("C5").Value2
    kHang = .Range("C6").Value2
  End With
  ReDim Res(1 To UBound(aBan) + UBound(aThu), 1 To 7)
  aCol = Array(0, 1, 2, 3, 4, 7)
  Call AddRes(aBan, "XK", aCol, Res, k, fDate, eDate, kHang)
  aCol = Array(0, 1, 3, 4, 5, 6)
  Call AddRes(aThu, "PC", aCol, Res, k, fDate, eDate, kHang)

  If k > 0 Then
    With Sheet3
      .Range("A9").Resize(k, 7) = Res
      .Range("A9").Resize(k, 7).Sort .[A9], 1, Header:=xlNo
      Res = .Range("E9").Resize(k + 1, 3)
      For i = 1 To k
        Res(i, 3) = Res(i, 1) - Res(i, 2)
        If i > 1 Then Res(i, 3) = Res(i, 3) + Res(i - 1, 3)
        Res(k + 1, 1) = Res(k + 1, 1) + Res(i, 1)
        Res(k + 1, 2) = Res(k + 1, 2) + Res(i, 2)
      Next i
      .Range("E9").Resize(k + 1, 3) = Res
      .Range("A" & k + 9) = "Tong"
      .Range("A" & k + 9).Resize(, 4).MergeCells = True
      .Range("A9").Resize(k + 1, 7).Borders.LineStyle = 1
   End With
  End If
End Sub

Private Sub AddRes(ByVal sArr, ByVal strNo, aCol, Res, k, fDate, eDate, kHang)
  Dim sRow&, i&, jk&, Phieu$
  sRow = UBound(sArr)
  For i = 1 To sRow
    If sArr(i, 1) > eDate Then Exit For
    If sArr(i, 1) >= fDate And sArr(i, aCol(3)) = kHang Then
      If Phieu <> sArr(i, aCol(2)) Then
        Phieu = sArr(i, aCol(2))
        k = k + 1
        For j = 1 To 4
          Res(k, j) = sArr(i, aCol(j))
        Next j
        If Left(Phieu, 2) = strNo Then jk = 5 Else jk = 6
        Res(k, jk) = sArr(i, aCol(5))
      Else
        Res(k, jk) = Res(k, jk) + sArr(i, aCol(5))
      End If
    End If
  Next i
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn check lại xem thế nào (Mình mới chỉ sửa 1 ít code cho phần sheet bán, sheet thu tương tự bạn có thể tự sửa được).
Suy nghĩ mãi không ra.Cám ơn bạn nhiều.
Bài đã được tự động gộp:

Dữ liệu phải nhập đúng chuẩn. Chạy code
Mã:
Sub XYZ()
  Dim sArr(), aCol(), Res()
  Dim fDate As Date, eDate As Date
  Dim i&, k&, kHang$, colNo$
  With Sheet1
    aBan = .Range("A2", .Range("G" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet2
    aThu = .Range("A2", .Range("F" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet3
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 8 Then .Range("A9:G" & i).Clear
    fDate = .Range("C4").Value2
    eDate = .Range("C5").Value2
    kHang = .Range("C6").Value2
  End With
  ReDim Res(1 To UBound(aBan) + UBound(aThu), 1 To 7)
  aCol = Array(0, 1, 2, 3, 4, 7)
  Call AddRes(aBan, "XK", aCol, Res, k, fDate, eDate, kHang)
  aCol = Array(0, 1, 3, 4, 5, 6)
  Call AddRes(aThu, "PC", aCol, Res, k, fDate, eDate, kHang)

  If k > 0 Then
    With Sheet3
      .Range("A9").Resize(k, 7) = Res
      .Range("A9").Resize(k, 7).Sort .[A9], 1, Header:=xlNo
      Res = .Range("E9").Resize(k + 1, 3)
      For i = 1 To k
        Res(i, 3) = Res(i, 1) - Res(i, 2)
        If i > 1 Then Res(i, 3) = Res(i, 3) + Res(i - 1, 3)
        Res(k + 1, 1) = Res(k + 1, 1) + Res(i, 1)
        Res(k + 1, 2) = Res(k + 1, 2) + Res(i, 2)
      Next i
      .Range("E9").Resize(k + 1, 3) = Res
      .Range("A" & k + 9) = "Tong"
      .Range("A" & k + 9).Resize(, 4).MergeCells = True
      .Range("A9").Resize(k + 1, 7).Borders.LineStyle = 1
   End With
  End If
End Sub

Private Sub AddRes(ByVal sArr, ByVal strNo, aCol, Res, k, fDate, eDate, kHang)
  Dim sRow&, i&, jk&, Phieu$
  sRow = UBound(sArr)
  For i = 1 To sRow
    If sArr(i, 1) > eDate Then Exit For
    If sArr(i, 1) >= fDate And sArr(i, aCol(3)) = kHang Then
      If Phieu <> sArr(i, aCol(2)) Then
        Phieu = sArr(i, aCol(2))
        k = k + 1
        For j = 1 To 4
          Res(k, j) = sArr(i, aCol(j))
        Next j
        If Left(Phieu, 2) = strNo Then jk = 5 Else jk = 6
        Res(k, jk) = sArr(i, aCol(5))
      Else
        Res(k, jk) = Res(k, jk) + sArr(i, aCol(5))
      End If
    End If
  Next i
End Sub
Mình cám ơn bạn.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom