Nhờ giúp cách lọc dữ liệu vào Báo cáo chi tiết trong excell bằng VBA

Liên hệ QC

muexcell

Thành viên chính thức
Tham gia
14/5/21
Bài viết
52
Được thích
8
Nhờ diễn đàn giải pháp excell mình mới biết về VBA,và thấy rất phù hợp với nhu cầu của việc mình đang làm nhưng mình vẫn chưa viết đc nên nhờ mọi người giúp
Từ bảng cáo cáo tổng hợp hàng ngày mình cần làm báo cáo chi tiết dựa theo điều kiện thay đổi ở các ô B5:B7 ( thời gian và mã hàng tại sheet thịt)
Nhờ mọi người viết giùm mình và cho mình cái hướng dẫn để mình có thể viết các sheet còn lại.
nhờ mọi người giúp mình với
Xin cảm ơn
 

File đính kèm

  • BCKDT5.xlsx
    174.6 KB · Đọc: 14
Lần chỉnh sửa cuối:
Sửa lại tiêu đề bài viết đi bạn.

Nhờ giúp viết VAB​

Chắc là : Viết giúp VBA có vẻ đúng hơn

Mà giống như bạn phó mặc mọi dữ liệu cho người khác hay sao vậy?
 

File đính kèm

  • 205.jpg
    205.jpg
    60.9 KB · Đọc: 16
Upvote 0
Sửa lại tiêu đề bài viết đi bạn.

Nhờ giúp viết VAB​

Chắc là : Viết giúp VBA có vẻ đúng hơn

Mà giống như bạn phó mặc mọi dữ liệu cho người khác hay sao vậy?
Mình cần cung cấp thêm thông tin gì bạn hướng dẫn giúp mình nha
Mình thấy bài chỉ trước của bạn rất hay nhưng mình chưa biết nhiều nên ko sửa lại theo ý mình muốn được
Cảm ơn bạn,
 

File đính kèm

  • BCKDT5.xlsx
    174.6 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Tiêu đề vi phạm nội qui vì chung chung. Bạn cứ tưởng tượng là ai cũng cho tiêu đề "Nhờ giúp viết VBA" thì loạn mất.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Chưa ai đi vào nội dung nên chưa thấy góp ý gì, chứ thật tình tôi thấy bạn rất hời hợt khi trình bày để nhờ giúp đỡ:
1/ "điều kiện thay đổi ở các ô B5:B7 ( thời gian và mã hàng tại sheet thịt)": các ô B5:B7 của sheet nào? tôi thấy có mỗi sheet THUCHI có dữ liệu tại B5:B7 nhưng trật lất và cũng chẳng thấy có mối liên hệ gì đến kết quả tại sheet THỊT
1621612611730.png

2/ Dữ liệu ví dụ không thể hiện được bạn muốn lấy thứ gì đưa vào đâu (xem sheet THỊT thì không hiểu lấy các thông tin này từ đâu)
1621612848411.png
 
Upvote 0
Nhờ diễn đàn giải pháp excell mình mới biết về VBA,và thấy rất phù hợp với nhu cầu của việc mình đang làm nhưng mình vẫn chưa viết đc nên nhờ mọi người giúp
Từ bảng cáo cáo tổng hợp hàng ngày mình cần làm báo cáo chi tiết dựa theo điều kiện thay đổi ở các ô B5:B7 ( thời gian và mã hàng tại sheet thịt)
Nhờ mọi người viết giùm mình và cho mình cái hướng dẫn để mình có thể viết các sheet còn lại.
nhờ mọi người giúp mình với
Xin cảm ơn
Chạy code
Mã:
Sub ABC()
  Dim sArr(), Res()
  Dim sRow&, i&, k&, fDay, eDay, MH$, total#
 
  With Sheets("THUCHI")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i < 10 Then MsgBox ("Khong co du lieu!"): Exit Sub
    sArr = .Range("B10:F" & i).Value
  End With
  sRow = UBound(sArr)
  Application.ScreenUpdating = False
  With Sheet5
    i = .Range("C" & Rows.Count).End(xlUp).Row
    If i > 8 Then .Range("A9:D" & i).Clear
    fDay = Range("B5").Value: eDay = Range("B6").Value
    MH = Range("B7").Value
    If TypeName(fDay) = "Date" And TypeName(eDay) = "Date" And TypeName(MH) = "String" Then
      ReDim Res(1 To sRow, 1 To 4)
      For i = 1 To sRow
        If sArr(i, 1) >= fDay Then
          If sArr(i, 1) <= eDay Then
            If sArr(i, 3) = MH Then
              k = k + 1
              Res(k, 1) = sArr(i, 1): Res(k, 2) = sArr(i, 2)
              Res(k, 3) = sArr(i, 3): Res(k, 4) = sArr(i, 5)
              total = total + sArr(i, 5)
            End If
          End If
        End If
      Next i
      If k Then
        k = k + 1
        Res(k, 3) = "Tong Cong": Res(k, 4) = total
        .Range("A9").Resize(k, 4) = Res
        .Range("A9").Resize(k, 4).Borders.LineStyle = 1
      End If
    Else
      MsgBox ("Phai Nhap chinh xac Ngay Thang va Mat Hang!")
    End If
  End With
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Chưa ai đi vào nội dung nên chưa thấy góp ý gì, chứ thật tình tôi thấy bạn rất hời hợt khi trình bày để nhờ giúp đỡ:
1/ "điều kiện thay đổi ở các ô B5:B7 ( thời gian và mã hàng tại sheet thịt)": các ô B5:B7 của sheet nào? tôi thấy có mỗi sheet THUCHI có dữ liệu tại B5:B7 nhưng trật lất và cũng chẳng thấy có mối liên hệ gì đến kết quả tại sheet THỊT
View attachment 259174

2/ Dữ liệu ví dụ không thể hiện được bạn muốn lấy thứ gì đưa vào đâu (xem sheet THỊT thì không hiểu lấy các thông tin này

Chưa ai đi vào nội dung nên chưa thấy góp ý gì, chứ thật tình tôi thấy bạn rất hời hợt khi trình bày để nhờ giúp đỡ:
1/ "điều kiện thay đổi ở các ô B5:B7 ( thời gian và mã hàng tại sheet thịt)": các ô B5:B7 của sheet nào? tôi thấy có mỗi sheet THUCHI có dữ liệu tại B5:B7 nhưng trật lất và cũng chẳng thấy có mối liên hệ gì đến kết quả tại sheet THỊT
View attachment 259174

2/ Dữ liệu ví dụ không thể hiện được bạn muốn lấy thứ gì đưa vào đâu (xem sheet THỊT thì không hiểu lấy các thông tin này từ đâu)
View attachment 259175
Hi
Cảm ơn bạn đã góp ý
Trong sheet thịt mình có hai bảng,bảng một là bảng muốn được giúp.
Còn bảng này là bảng số liệu kết quả mong muốn ( mình tự coppy từ bảng thuchi lấy filter mã "detinh")
 
Upvote 0
Hi
Cảm ơn bạn đã góp ý
Trong sheet thịt mình có hai bảng,bảng một là bảng muốn được giúp.
Còn bảng này là bảng số liệu kết quả mong muốn ( mình tự coppy từ bảng thuchi lấy filter mã "detinh")
Sorry! Lúc đầu nhìn không rõ, chừ tôi hiểu rồi. Code cho bạn tham khảo, đảm bảo chạy nhanh.
Rich (BB code):
Sub Loc_SQL()
Dim Ngay1 As String, Ngay2 As String, MS As String

    Ngay1 = "#" & Sheet5.Range("B5") & "#"
    Ngay2 = "#" & Sheet5.Range("B6") & "#"
    MS = "'" & Sheet5.Range("B7") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select F2,F3,F4,F6 From [THUCHI$A10:F592] Where F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2), cnn   'F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2
        Sheet5.Range("G9").CopyFromRecordset .DataSource
    End With
End Sub
 
Upvote 0
Sorry! Lúc đầu nhìn không rõ, chừ tôi hiểu rồi. Code cho bạn tham khảo, đảm bảo chạy nhanh.
Rich (BB code):
Sub Loc_SQL()
Dim Ngay1 As String, Ngay2 As String, MS As String

    Ngay1 = "#" & Sheet5.Range("B5") & "#"
    Ngay2 = "#" & Sheet5.Range("B6") & "#"
    MS = "'" & Sheet5.Range("B7") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select F2,F3,F4,F6 From [THUCHI$A10:F592] Where F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2), cnn   'F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2
        Sheet5.Range("G9").CopyFromRecordset .DataSource
    End With
End Sub
Cảm ơn bạn rất nhiều.
Bài đã được tự động gộp:

Chạy code
Mã:
Sub ABC()
  Dim sArr(), Res()
  Dim sRow&, i&, k&, fDay, eDay, MH$, total#
 
  With Sheets("THUCHI")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i < 10 Then MsgBox ("Khong co du lieu!"): Exit Sub
    sArr = .Range("B10:F" & i).Value
  End With
  sRow = UBound(sArr)
  Application.ScreenUpdating = False
  With Sheet5
    i = .Range("C" & Rows.Count).End(xlUp).Row
    If i > 8 Then .Range("A9:D" & i).Clear
    fDay = Range("B5").Value: eDay = Range("B6").Value
    MH = Range("B7").Value
    If TypeName(fDay) = "Date" And TypeName(eDay) = "Date" And TypeName(MH) = "String" Then
      ReDim Res(1 To sRow, 1 To 4)
      For i = 1 To sRow
        If sArr(i, 1) >= fDay Then
          If sArr(i, 1) <= eDay Then
            If sArr(i, 3) = MH Then
              k = k + 1
              Res(k, 1) = sArr(i, 1): Res(k, 2) = sArr(i, 2)
              Res(k, 3) = sArr(i, 3): Res(k, 4) = sArr(i, 5)
              total = total + sArr(i, 5)
            End If
          End If
        End If
      Next i
      If k Then
        k = k + 1
        Res(k, 3) = "Tong Cong": Res(k, 4) = total
        .Range("A9").Resize(k, 4) = Res
        .Range("A9").Resize(k, 4).Borders.LineStyle = 1
      End If
    Else
      MsgBox ("Phai Nhap chinh xac Ngay Thang va Mat Hang!")
    End If
  End With
  Application.ScreenUpdating = True
End Sub
Cảm ơn bạn nhiều.
Mình gắn không chạy đc,bạn gắn rồi gởi file cho mình giúp đc ko.
hic cảm ơn bạn rất rất nhiều.
Thật sự mình rất yếu chỉ đang mò mẫm từng bước.
 
Lần chỉnh sửa cuối:
Upvote 0
Tay này khoái viết tắt. Nhưng riêng từ 'Excel' thì lại không tắt, mà còn viết dư. :p
 
Upvote 0
Chạy code
Mã:
Sub ABC()
  Dim sArr(), Res()
  Dim sRow&, i&, k&, fDay, eDay, MH$, total#
 
  With Sheets("THUCHI")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i < 10 Then MsgBox ("Khong co du lieu!"): Exit Sub
    sArr = .Range("B10:F" & i).Value
  End With
  sRow = UBound(sArr)
  Application.ScreenUpdating = False
  With Sheet5
    i = .Range("C" & Rows.Count).End(xlUp).Row
    If i > 8 Then .Range("A9:D" & i).Clear
    fDay = Range("B5").Value: eDay = Range("B6").Value
    MH = Range("B7").Value
    If TypeName(fDay) = "Date" And TypeName(eDay) = "Date" And TypeName(MH) = "String" Then
      ReDim Res(1 To sRow, 1 To 4)
      For i = 1 To sRow
        If sArr(i, 1) >= fDay Then
          If sArr(i, 1) <= eDay Then
            If sArr(i, 3) = MH Then
              k = k + 1
              Res(k, 1) = sArr(i, 1): Res(k, 2) = sArr(i, 2)
              Res(k, 3) = sArr(i, 3): Res(k, 4) = sArr(i, 5)
              total = total + sArr(i, 5)
            End If
          End If
        End If
      Next i
      If k Then
        k = k + 1
        Res(k, 3) = "Tong Cong": Res(k, 4) = total
        .Range("A9").Resize(k, 4) = Res
        .Range("A9").Resize(k, 4).Borders.LineStyle = 1
      End If
    Else
      MsgBox ("Phai Nhap chinh xac Ngay Thang va Mat Hang!")
    End If
  End With
  Application.ScreenUpdating = True
End Sub

Khi mình chạy máy báo như thế này bạn,bảng báo cáo tự động mình chạy hôm qua giờ ko đc
Nhờ bạn xem giúp
cảm ơn bạn nhiều
 

File đính kèm

  • Screenshot (1).png
    Screenshot (1).png
    339.9 KB · Đọc: 14
Upvote 0
Khi mình chạy máy báo như thế này bạn,bảng báo cáo tự động mình chạy hôm qua giờ ko đc
Nhờ bạn xem giúp
cảm ơn bạn nhiều
Lỗi đó bạn nhập ngày tháng định dạng dd/MM/yyyy. Bạn xem đã nhập mặt hàng đúng chưa?
 
Upvote 0
Sorry! Lúc đầu nhìn không rõ, chừ tôi hiểu rồi. Code cho bạn tham khảo, đảm bảo chạy nhanh.
Rich (BB code):
Sub Loc_SQL()
Dim Ngay1 As String, Ngay2 As String, MS As String

    Ngay1 = "#" & Sheet5.Range("B5") & "#"
    Ngay2 = "#" & Sheet5.Range("B6") & "#"
    MS = "'" & Sheet5.Range("B7") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select F2,F3,F4,F6 From [THUCHI$A10:F592] Where F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2), cnn   'F4 = " & MS & " And  F2 Between " & Ngay1 & " And " & Ngay2
        Sheet5.Range("G9").CopyFromRecordset .DataSource
    End With
End Sub
Mình gắn được nhưng file báo cáo chi tiết sheet thịt vẫn không tự động đươc bạn
bạn xem giúp mình tí
cảm ơn bạn
 
Upvote 0
Hay là bạn muốn sau khi cập nhật đủ 3 ô từ B5 - B7 thì code tự động chạy?
 
Upvote 0
Đúng rồi bạn.
cột B7 khi mình nhập mã hàng không hiện thị thông tin gì hết.
Bạn xem thử nhé. Chú ý trong trang code VBA của sheet Thit có 1 đoạn mã đếm số lần cập nhật (thay đổi) của các ô B5:B7. Nếu ô nào đó không thay đổi gì thì cũng bấm đúp vào rồi Enter thoát ra nhằm đếm cho đủ 3 lần để khởi động code lọc.
 

File đính kèm

  • BCKDT5_muexcell.xlsm
    187.5 KB · Đọc: 15
Upvote 0
Bạn xem thử nhé. Chú ý trong trang code VBA của sheet Thit có 1 đoạn mã đếm số lần cập nhật (thay đổi) của các ô B5:B7. Nếu ô nào đó không thay đổi gì thì cũng bấm đúp vào rồi Enter thoát ra nhằm đếm cho đủ 3 lần để khởi động code lọc.
Chạy rồi bạn ơi
thông tin mới chạy mà số hàng thông tin cũ vẫn còn phía dưới.
bạn xem giúp mình
(^-^) cảm ơn bạn.
 

File đính kèm

  • Screenshot (9).png
    Screenshot (9).png
    320.2 KB · Đọc: 5
Upvote 0
Web KT

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

Back
Top Bottom