Trích lọc kết quả theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thinhnx22

Thành viên hoạt động
Tham gia
22/12/15
Bài viết
182
Được thích
38
Gửi anh chị và các bạn,
Công ty mình đến thời điểm hiện tại có 3 trường hợp bán hàng phát sinh:
TH1: bán sản phẩm không chịu thuế
TH2: bán sản phẩm chịu thuế
TH3: bán sản phẩm chịu thuế + hàng khuyến mại kèm theo
Trong sheet KQ mình đã mô tả kết quả cần lấy theo từng tình huống.
Mình code thử một file test để anh chị dễ hình dùng hơn cách mình muốn lấy (vì không phải ai học cùng chuyên ngành)
Nếu file cần thiết kế lại để dễ làm thì anh chị cứ góp ý.
Rất mong được sự giúp đỡ của anh chị.
Chân thành cảm ơn.
 

File đính kèm

Gửi anh chị và các bạn,
Công ty mình đến thời điểm hiện tại có 3 trường hợp bán hàng phát sinh:
TH1: bán sản phẩm không chịu thuế
TH2: bán sản phẩm chịu thuế
TH3: bán sản phẩm chịu thuế + hàng khuyến mại kèm theo
Trong sheet KQ mình đã mô tả kết quả cần lấy theo từng tình huống.
Mình code thử một file test để anh chị dễ hình dùng hơn cách mình muốn lấy (vì không phải ai học cùng chuyên ngành)
Nếu file cần thiết kế lại để dễ làm thì anh chị cứ góp ý.
Rất mong được sự giúp đỡ của anh chị.
Chân thành cảm ơn.
Mã:
Sub Laysolieu()
  Dim sArr(), Res(), kMai()
  Dim eRow&, sRow&, sCol&, i&, j&, k&
 
  With Sheets("kq")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow > 21 Then .Range("B22:AA" & eRow).ClearContents
  End With
  With Sheets("chitiet")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow < 22 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A22:Z" & eRow).Value
    kMai = .Range("A21:X21").Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  If sRow * 6 < Rows.Count Then
    ReDim Res(1 To sRow * 6, 1 To sCol)
  Else
    ReDim Res(1 To Rows.Count - 22, 1 To sCol)
  End If
  For i = 1 To sRow
    If sArr(i, 1) <> Empty Then
      k = k + 1
      Res(k, 1) = sArr(i, 3)
      Res(k, 2) = sArr(i, 4)
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
      Res(k, 5) = "131"
      Res(k, 7) = sArr(i, 12)
      If sArr(i, 20) = "CT" Then
        Res(k, 6) = "5111"
        Res(k, 16) = "có"
      Else
        Res(k, 6) = "5112"
        Res(k, 16) = "ko"
      End If
      If sArr(i, 14) > 0 Then
        k = k + 1
        Res(k, 1) = sArr(i, 3)
        Res(k, 2) = sArr(i, 4)
        Res(k, 3) = sArr(i, 2)
        Res(k, 4) = "VAT-DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
        Res(k, 5) = "131"
        Res(k, 6) = "33311"
        Res(k, 7) = sArr(i, 14)
        Res(k, 16) = "có"
      End If
      If sArr(i, 20) = "CT" Then
        For j = 21 To 24
          If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 1) = sArr(i, 3)
            Res(k, 2) = sArr(i, 4)
            Res(k, 3) = sArr(i, 2)
            Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
            Res(k, 5) = "6411"
            If j < 23 Then
              Res(k, 6) = "5111"
            Else
              Res(k, 6) = "33311"
            End If
            Res(k, 7) = sArr(i, j)
            Res(k, 14) = kMai(1, j)
            Res(k, 16) = "có"
          End If
        Next j
      End If
    End If
  Next
  If k Then
    With Sheets("kq")
      .Range("B22").Resize(k, 3).NumberFormat = "@"
      .Range("H22").Resize(k).NumberFormat = "#,##0"
      .Range("B22").Resize(k, sCol).Value = Res
    End With
  End If
End Sub
 

File đính kèm

Upvote 0
Mã:
Sub Laysolieu()
  Dim sArr(), Res(), kMai()
  Dim eRow&, sRow&, sCol&, i&, j&, k&

  With Sheets("kq")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow > 21 Then .Range("B22:AA" & eRow).ClearContents
  End With
  With Sheets("chitiet")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow < 22 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A22:Z" & eRow).Value
    kMai = .Range("A21:X21").Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  If sRow * 6 < Rows.Count Then
    ReDim Res(1 To sRow * 6, 1 To sCol)
  Else
    ReDim Res(1 To Rows.Count - 22, 1 To sCol)
  End If
  For i = 1 To sRow
    If sArr(i, 1) <> Empty Then
      k = k + 1
      Res(k, 1) = sArr(i, 3)
      Res(k, 2) = sArr(i, 4)
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
      Res(k, 5) = "131"
      Res(k, 7) = sArr(i, 12)
      If sArr(i, 20) = "CT" Then
        Res(k, 6) = "5111"
        Res(k, 16) = "có"
      Else
        Res(k, 6) = "5112"
        Res(k, 16) = "ko"
      End If
      If sArr(i, 14) > 0 Then
        k = k + 1
        Res(k, 1) = sArr(i, 3)
        Res(k, 2) = sArr(i, 4)
        Res(k, 3) = sArr(i, 2)
        Res(k, 4) = "VAT-DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
        Res(k, 5) = "131"
        Res(k, 6) = "33311"
        Res(k, 7) = sArr(i, 14)
        Res(k, 16) = "có"
      End If
      If sArr(i, 20) = "CT" Then
        For j = 21 To 24
          If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 1) = sArr(i, 3)
            Res(k, 2) = sArr(i, 4)
            Res(k, 3) = sArr(i, 2)
            Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
            Res(k, 5) = "6411"
            If j < 23 Then
              Res(k, 6) = "5111"
            Else
              Res(k, 6) = "33311"
            End If
            Res(k, 7) = sArr(i, j)
            Res(k, 14) = kMai(1, j)
            Res(k, 16) = "có"
          End If
        Next j
      End If
    End If
  Next
  If k Then
    With Sheets("kq")
      .Range("B22").Resize(k, 3).NumberFormat = "@"
      .Range("H22").Resize(k).NumberFormat = "#,##0"
      .Range("B22").Resize(k, sCol).Value = Res
    End With
  End If
End Sub
Chào bác HieuCD, bác xem lại giúp cháu dòng 24 và 25 ở sheet kết quả với ạ. Phần Nợ tk 131 có tk 5111: kết quả phải là: 6.398.182-(317.273+180.909)=5.900.000. Phần nợ tk 131 có tk 33311: 639.818-(31727+18091)=590.000 (như cháu mô tả trong file). Còn tất cả phần còn lại đều đúng rồi ạ. Cháu cảm ơn bác nhiều.
 
Upvote 0
Chào bác HieuCD, bác xem lại giúp cháu dòng 24 và 25 ở sheet kết quả với ạ. Phần Nợ tk 131 có tk 5111: kết quả phải là: 6.398.182-(317.273+180.909)=5.900.000. Phần nợ tk 131 có tk 33311: 639.818-(31727+18091)=590.000 (như cháu mô tả trong file). Còn tất cả phần còn lại đều đúng rồi ạ. Cháu cảm ơn bác nhiều.
Trừ bớt
Mã:
Sub Laysolieu()
  Dim sArr(), Res(), kMai()
  Dim eRow&, sRow&, sCol&, i&, j&, k&
 
  With Sheets("kq")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow > 21 Then .Range("B22:AA" & eRow).ClearContents
  End With
  With Sheets("chitiet")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow < 22 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A22:Z" & eRow).Value
    kMai = .Range("A21:X21").Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  If sRow * 6 < Rows.Count Then
    ReDim Res(1 To sRow * 6, 1 To sCol)
  Else
    ReDim Res(1 To Rows.Count - 22, 1 To sCol)
  End If
  For i = 1 To sRow
    If sArr(i, 1) <> Empty Then
      k = k + 1
      Res(k, 1) = sArr(i, 3)
      Res(k, 2) = sArr(i, 4)
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
      Res(k, 5) = "131"
      Res(k, 7) = sArr(i, 12) - sArr(i, 21) - sArr(i, 22)
      If sArr(i, 20) = "CT" Then
        Res(k, 6) = "5111"
        Res(k, 16) = "có"
      Else
        Res(k, 6) = "5112"
        Res(k, 16) = "ko"
      End If
      If sArr(i, 14) > 0 Then
        k = k + 1
        Res(k, 1) = sArr(i, 3)
        Res(k, 2) = sArr(i, 4)
        Res(k, 3) = sArr(i, 2)
        Res(k, 4) = "VAT-DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
        Res(k, 5) = "131"
        Res(k, 6) = "33311"
        Res(k, 7) = sArr(i, 14) - sArr(i, 23) - sArr(i, 24)
        Res(k, 16) = "có"
      End If
      If sArr(i, 20) = "CT" Then
        For j = 21 To 24
          If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 1) = sArr(i, 3)
            Res(k, 2) = sArr(i, 4)
            Res(k, 3) = sArr(i, 2)
            Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
            Res(k, 5) = "6411"
            If j < 23 Then
              Res(k, 6) = "5111"
            Else
              Res(k, 6) = "33311"
            End If
            Res(k, 7) = sArr(i, j)
            Res(k, 14) = kMai(1, j)
            Res(k, 16) = "có"
          End If
        Next j
      End If
    End If
  Next
  If k Then
    With Sheets("kq")
      .Range("B22").Resize(k, 3).NumberFormat = "@"
      .Range("H22").Resize(k).NumberFormat = "#,##0"
      .Range("B22").Resize(k, sCol).Value = Res
    End With
  End If
End Sub
 
Upvote 0
Trừ bớt
Mã:
Sub Laysolieu()
  Dim sArr(), Res(), kMai()
  Dim eRow&, sRow&, sCol&, i&, j&, k&

  With Sheets("kq")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow > 21 Then .Range("B22:AA" & eRow).ClearContents
  End With
  With Sheets("chitiet")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow < 22 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A22:Z" & eRow).Value
    kMai = .Range("A21:X21").Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  If sRow * 6 < Rows.Count Then
    ReDim Res(1 To sRow * 6, 1 To sCol)
  Else
    ReDim Res(1 To Rows.Count - 22, 1 To sCol)
  End If
  For i = 1 To sRow
    If sArr(i, 1) <> Empty Then
      k = k + 1
      Res(k, 1) = sArr(i, 3)
      Res(k, 2) = sArr(i, 4)
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
      Res(k, 5) = "131"
      Res(k, 7) = sArr(i, 12) - sArr(i, 21) - sArr(i, 22)
      If sArr(i, 20) = "CT" Then
        Res(k, 6) = "5111"
        Res(k, 16) = "có"
      Else
        Res(k, 6) = "5112"
        Res(k, 16) = "ko"
      End If
      If sArr(i, 14) > 0 Then
        k = k + 1
        Res(k, 1) = sArr(i, 3)
        Res(k, 2) = sArr(i, 4)
        Res(k, 3) = sArr(i, 2)
        Res(k, 4) = "VAT-DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
        Res(k, 5) = "131"
        Res(k, 6) = "33311"
        Res(k, 7) = sArr(i, 14) - sArr(i, 23) - sArr(i, 24)
        Res(k, 16) = "có"
      End If
      If sArr(i, 20) = "CT" Then
        For j = 21 To 24
          If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 1) = sArr(i, 3)
            Res(k, 2) = sArr(i, 4)
            Res(k, 3) = sArr(i, 2)
            Res(k, 4) = "DT bán hàng" & "-" & sArr(i, 18) & "-" & sArr(i, 6) & "-HD:" & sArr(i, 3) & sArr(i, 1)
            Res(k, 5) = "6411"
            If j < 23 Then
              Res(k, 6) = "5111"
            Else
              Res(k, 6) = "33311"
            End If
            Res(k, 7) = sArr(i, j)
            Res(k, 14) = kMai(1, j)
            Res(k, 16) = "có"
          End If
        Next j
      End If
    End If
  Next
  If k Then
    With Sheets("kq")
      .Range("B22").Resize(k, 3).NumberFormat = "@"
      .Range("H22").Resize(k).NumberFormat = "#,##0"
      .Range("B22").Resize(k, sCol).Value = Res
    End With
  End If
End Sub
Cháu cũng vừa tự sửa được rồi ạ. Cảm ơn bác nhiều, chúc bác nhiều sức khỏe.
 
Upvote 0
Web KT

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

Back
Top Bottom