Thống kê tình hình sử dụng hóa đơn theo điều kiện

Liên hệ QC

quick87

(/ội...
Tham gia
8/4/08
Bài viết
375
Được thích
351
Giới tính
Nam
Em chào mọi người,

Em có vấn đề liên quan đến việc tổng hợp báo cáo tình hình sử dụng hóa đơn theo Quý theo từng Mẫu số và ký hiệu từ sheet "Chitiet" theo mẫu kết quả được tổng hợp tại sheet: "Thongke" mong được giúp đỡ. Cụ thể:

Dữ liệu được liệt kê tại sheet "Chitiet":

1582859376812.png


Tổng hợp theo mẫu báo cáo tại Sheet "Thongke":

1582858927625.png

Từng chỉ tiêu tại sheet "Thongke" được lấy bên sheet "Chitiet" theo điều kiện như sau:

(1) Mẫu số: được lấy từ Cột B
(2) Ký hiệu: được lấy từ Cột C
(3) Số lượng đã sử dụng: là tổng số hóa đơn có trạng thái là: "Đã in" tại cột "Trạng thái hóa đơn" (Cột M)
(4) Số lượng xóa bỏ: là tổng số hóa đơn có trạng thái là: "Đã xóa" tại cột "Trạng thái hóa đơn" (Cột M)
(5) Số: liệt kê chi tiết những hóa đơn có trạng thái là xóa bỏ, được liệt kê theo từng số và cách nhau bằng dấu ";, nếu số liên tục thì được thống kê theo khoảng (-)

Ví dụ, với "Mẫu số" là "01GTKT0/001", có "Ký hiệu hóa đơn" là "AA/19E" có số hóa đơn xóa bỏ như hình dưới là:

1582859573085.png

=> sẽ cần phải thống kê như sau: 88795-88802;88806-88807;88817-88819;88855-88856;88858;88860;88902-88903;94489;94757;...
và cho đến những số còn lại.

(6) Từ số: số hóa đơn cuối cùng đã sử dụng trong Quý.

Mong được mọi người giúp đỡ ạ. Em cảm ơn thật nhiều.
Chi tiết, em xin phép gửi file đính kèm.
 

File đính kèm

  • Hoi_Thong ke hoa don.zip
    1.9 MB · Đọc: 44
Bỏ lệnh If dư
Mã:
Sub HoaDon()
  Dim HD(), TT(), Res(), Res2() As String
  Dim i&, k&, sRow&, tmp&

  With Sheets("Chitiet")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i < 2 Then MsgBox ("Khong co du lieu"): Exit Sub
    HD = .Range("B1:D" & i + 1).Value
    TT = .Range("M1:M" & i + 1).Value
  End With
  sRow = UBound(HD)
  ReDim Res(1 To 100, 1 To 6)
  ReDim Res2(1 To 100, 1 To 1)
  For i = 2 To sRow - 1
    If HD(i, 1) & HD(i, 2) <> HD(i - 1, 1) & HD(i - 1, 2) Then
      k = k + 1
      Res(k, 1) = HD(i, 1)
      Res(k, 2) = HD(i, 2)
    End If
    If (TT(i, 1) Like "?? x?a") Then
      If HD(i, 1) & HD(i, 2) & TT(i, 1) <> HD(i - 1, 1) & HD(i - 1, 2) & TT(i - 1, 1) Then
        Res(k, 5) = Res(k, 5) & ";" & Val(HD(i, 3))
      ElseIf HD(i, 1) & HD(i, 2) & TT(i, 1) <> HD(i + 1, 1) & HD(i + 1, 2) & TT(i + 1, 1) Then
        Res(k, 5) = Res(k, 5) & "-" & Val(HD(i, 3))
      End If
    End If
    If TT(i, 1) Like "?? in" Then
      Res(k, 3) = Res(k, 3) + 1
    Else
      Res(k, 4) = Res(k, 4) + 1
    End If
    If HD(i, 1) & HD(i, 2) <> HD(i + 1, 1) & HD(i + 1, 2) Then
      If Len(Res(k, 5)) Then
        Res(k, 5) = Mid(Res(k, 5), 2, Len(Res(k, 5)))
      End If
      Res2(k, 1) = HD(i, 3)
    End If
  Next i
  With Sheets("ThongKe")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i > 4 Then .Range("B5:G" & i).ClearContents
    .Range("B5").Resize(k, 5) = Res
    .Range("G5").Resize(k) = Res2
  End With
End Sub
Dạ, em cảm ơn anh!
 
Upvote 0
2 code trên không phải của mình (làm sao mà viết được như vậy :eek:), mình chỉ giúp bạn sữa code trong file, theo yêu cầu của bạn :boxing:
 
Upvote 0
Web KT
Back
Top Bottom