Lọc dữ liệu theo ngày, tháng (1 người xem)

Liên hệ QC

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

nguyenbinh6486

Thành viên mới
Tham gia
10/10/08
Bài viết
3
Được thích
0
Các anh chị giúp em với!
Em muốn lọc dữ liệu theo tháng 1,2,3...để hiện ra danh sách thu, chi trong tháng tương ứng là bao nhiêu thì em phải làm thế nào?
Em có kèm theo file. mong các anh chị giúp em!!
Mà sao em gởi file đính kèm để anh chị xem lại bị báo lỗi hoài àh( file .xls chỉ có 20KB thôi)!
 
Lần chỉnh sửa cuối:
Các anh chị giúp em với!
Em muốn lọc dữ liệu theo tháng 1,2,3...để hiện ra danh sách thu, chi trong tháng tương ứng là bao nhiêu thì em phải làm thế nào?
Em có kèm theo file. mong các anh chị giúp em!!
Mà sao em gởi file đính kèm để anh chị xem lại bị báo lỗi hoài àh( file .xls chỉ có 20KB thôi)!

dear:
bạn có thể sử dụng "subtotal" để làm,cách làm như sau:
1/Sort dữ liệu theo thứ tự của tháng(vd:1,2,3....)
2/Vào Data/Subtotals: ở đây có nhiều lựa chọn cho bạn
a/ Add each change in: thay đổi dữ liệu theo từng mục(ở đây là tháng)
b/Use function: sử dụng hàm(vd: sum,count.....)
c/Add subtotal to: tuỳ theo sự lựa chọn của bạn(vd: chi trong tháng hoặc thu trong tháng..)
vài dòng gởi bạn
thân.
 
Các anh chị giúp em với!
Em muốn lọc dữ liệu theo tháng 1,2,3...để hiện ra danh sách thu, chi trong tháng tương ứng là bao nhiêu thì em phải làm thế nào?
Em có kèm theo file. mong các anh chị giúp em!!
Mà sao em gởi file đính kèm để anh chị xem lại bị báo lỗi hoài àh( file .xls chỉ có 20KB thôi)!

Gửi bạn file tham khảo nè
 

File đính kèm

Tải file giúp bạn

Bạn nguyenbinh6486 nhờ tải file lên, các anh chị giúp dùm.
 

File đính kèm

Xin các bạn chỉ gíup. Mình muốn qua sheet2 lọc mặt hàng và số lượng đã nhập từ một ngày bất kỳ tới một ngày bất kỳ thì phải làm thế nào.Cảm ơn các bạn trước.
 
Lần chỉnh sửa cuối:
Xin các bạn chỉ gíup. Mình muốn qua sheet2 lọc mặt hàng và số lượng đã nhập từ một ngày bất kỳ tới một ngày bất kỳ thì phải làm thế nào.Cảm ơn các bạn trước.
Bạn thử file này xem có đúng ý bạn không nha!
 

File đính kèm

trợ giúp về lọc dữ liệu

tôi cũng đang gặp phải 1 vấn đề về lọc dữ liệu đây . mong các bạn chỉ giáo :
tôi muốn lọc tự động bằng hàm ra mỗi ngày 5 người có doanh thu cao nhất và 5 người có doanh thu thấp nhất . đã nghĩ nhiều hàm mà chưa ra. bạn nào giúp được tôi với ( file đính kèm )
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi muốn lọc tự động bằng hàm ra mỗi ngày 5 người có doanh thu cao nhất và 5 người có doanh thu thấp nhất
Nếu đồng ý sort theo ngày tháng sau đó doanh thu, thì có công thức: 2 công thức cho min, 2 công thức cho max và 3 name
Min cũng có thể tính bằng công thức mảng {= DTi}
 

File đính kèm

Lần chỉnh sửa cuối:
Nếu đồng ý sort theo ngày tháng sau đó doanh thu, thì có công thức: 2 công thức cho min, 2 công thức cho max và 3 name
Min cũng có thể tính bằng công thức mảng {= DTi}
Sai yêu cầu rồi sư phụ ơi!
Người ta nói lọc ra 5 NGƯỜI có doanh thu cao nhất và 5 NGƯỜI có doanh thu thấp nhất...
Chứ người ta không nói lọc ra 5 mức doanh thu cao nhất và 5 mức doanh thu thấp nhất!
 
tôi cũng đang gặp phải 1 vấn đề về lọc dữ liệu đây . mong các bạn chỉ giáo :
tôi muốn lọc tự động bằng hàm ra mỗi ngày 5 người có doanh thu cao nhất và 5 người có doanh thu thấp nhất . đã nghĩ nhiều hàm mà chưa ra. bạn nào giúp được tôi với ( file đính kèm )

Việc lấy 5 DT cao nhất và thấp nhất không hề khó ---> Cái khó là phải đối chiếu ngược lại để trích ra Mã NV tương ứng với DT (vì có khả năng DT bị trùng)
Bạn xem file này nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
tôi cũng đang gặp phải 1 vấn đề về lọc dữ liệu đây . mong các bạn chỉ giáo :
tôi muốn lọc tự động bằng hàm ra mỗi ngày 5 người có doanh thu cao nhất và 5 người có doanh thu thấp nhất . đã nghĩ nhiều hàm mà chưa ra. bạn nào giúp được tôi với ( file đính kèm )
Xin góp một cái cho vui. Vui thôi nha, hỏng dám nói là hay.

Mới đầu tôi tính góp ý với bạn là bạn sửa lại cái Data của bạn một chút, gì mà ô trống tùm lum, rồi cột số tiền bằng 0 cũng tùm lum... Nhưng rồi thôi, để vậy chơi luôn, biết đâu bạn có ý đồ gì đó mà tôi không biết.

Tôi làm ngay trên cái file của bạn luôn nha. Mở file ra, bạn sẽ thấy cái này:
000-382.jpg
Nhấn chọn ô F3 (cái ô có màu hồng), sẽ có một cái mũi tên be bé xinh xinh hiện ra cho bạn chọn ngày muốn xem.

Bạn cũng có thể gõ thẳng ngày vào đó, nhưng nhớ là, data của bạn có đến ngày nào thì chỉ được gõ tối đa là ngày đó thôi, gõ ngày không có trong data Excel nó la làng ráng chịu.

Và dĩ nhiên là nếu bạn nhập thêm dữ liệu vào data thì danh sách ngày trong cái ô này cũng sẽ tự động cập nhật (nhưng hiện tại thì sau khi nhập xong, làm ơn nhấn Save một cái, danh sách đó mới cập nhật được, chứ tôi không có làm cho nó cập nhật ngay khi bạn vừa nhập thêm data xong).

Mấy con số 1,2,3,4,5 ở F4:F8 là chỉ ra người xếp cao (hoặc thấp) thứ 1, thứ 2... chứ không phải là con số chỉ ngày.

Như trên có nói, dữ liệu của bạn có nhiều số 0 và ô trống quá... nên tạm thời tôi không để ý tới mấy số 0 và mấy cái ô trống đó. Bởi vì nếu tính số 0 thì cái chỗ xếp loại 5 người có doanh thu thấp nhất (Bottom 5) nhiều khi sẽ có đến 4 người có số tiền doanh thu là 0... nhìn tức cười lắm... Còn nếu bạn muốn xếp loại cả những người có doanh thu là 0, thì bạn nói nha, tôi sửa lại cho.

(File đính kèm, xin download ở bài #16: Max5Min5.xls)
 
Lần chỉnh sửa cuối:
Xin góp một cái cho vui. Vui thôi nha, hỏng dám nói là hay.

.
Hình như có sai cái gì đó... tôi thay đổi số liệu mà chẳng thấy công thức cập nhật (thử thay cell D5 = 2, lý ra nó phải là nhỏ nhất trong ngày 1 chứ)
Thêm nữa: Chú ý 2 Mã khác nhau có cùng DT trong 1 ngày nha!
 
Hình như có sai cái gì đó... tôi thay đổi số liệu mà chẳng thấy công thức cập nhật (thử thay cell D5 = 2, lý ra nó phải là nhỏ nhất trong ngày 1 chứ)
Thêm nữa: Chú ý 2 Mã khác nhau có cùng DT trong 1 ngày nha!
À à... em quên vụ này. Anh download lại file ở bài trên, em đã sửa rồi. Anh xem rồi góp ý thêm dùm em với.

Ủa... lại thêm cái vụ "2 Mã khác nhau có cùng DT trong 1 ngày" nữa... Lại phải chờ em tí... Em xem lại...
 
Lần chỉnh sửa cuối:
À à... em quên vụ này. Anh download lại file ở bài trên, em đã sửa rồi. Anh xem rồi góp ý thêm dùm em với.

Ủa... lại thêm cái vụ "2 Mã khác nhau có cùng DT trong 1 ngày" nữa... Lại phải chờ em tí... Em xem lại...
Có thể chỉnh sửa lại:
- Bỏ bớt biến
- Thay vòng lập For = Advanced Filter (lọc list ngày)
- Hình như BNTT quên Clear sạch vùng trước khi lọc (muốn đặt kết quả lọc tại đâu thì phải xóa vùng ấy trước)
Tạm sửa lại:
PHP:
Sub Loc()
    Sheet2.Range("E:G").ClearContents
    With Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp))
       .Resize(, 3).AutoFilter 1, Sheet1.[F3]
       .Resize(, 3).AutoFilter 2, "<>"
       .Offset(, 0).Copy Destination:=Sheet2.[E1]
       .Offset(, 1).Copy Destination:=Sheet2.[G1]
       .Offset(, 2).Copy Destination:=Sheet2.[F1]
       .AutoFilter
    End With
End Sub
PHP:
Sub Start()
    Union(Sheet2.Range("A:C"), Range("K:K")).ClearContents
    Range(Sheet1.[B1], Sheet1.[B65536].End(xlUp)).Resize(, 3).Copy
    Sheet2.Range("A1").PasteSpecial 3
    With Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp))
       .Resize(, 3).Sort .Cells(1, 2), 2, .Cells(1, 1), Header:=xlYes
       .AdvancedFilter 2, , Sheet2.[K1], True
    End With
    Call Loc
End Sub
Với code này thì phải sửa lại 1 name:
PHP:
SumNgay =OFFSET(Sheet2!$K$2,,,COUNTA(Sheet2!$K$2:$K$1000))
Tuy nhiên vẫn còn phải cải tiến:
- Cố gắng bỏ bớt các vùng tạm (hiện có 2 vùng tạm ---> Cố gắng giảm còn 1 vùng)
- Nếu dùng VBA thì cố gắng bỏ luôn công thức ---> Thay VLOOKUP bằng Find method
vân vân...
 
Đã xong vụ "2 Mã khác nhau có cùng DT trong 1 ngày", và cập nhật lại danh sách ngay khi vừa sửa hoặc thêm bớt dữ liệu.

- Hình như BNTT quên Clear sạch vùng trước khi lọc (muốn đặt kết quả lọc tại đâu thì phải xóa vùng ấy trước)
Anh quên mất rằng, khi Advanced trích lọc dữ liệu sang vùng khác, nó sẽ xóa sạch tất cả những gì đang có trong đó à? Đâu có cần phải Clear cái vùng sẽ trích lọc ra này? Anh Unhide cái Sheet2 trong file của em nha, rồi sau mỗi lần chọn tháng ở "cái ô màu hồng" (bên Sheet1), anh nhảy sang Sheet2 xem thử cái vùng lọc (E:G) nó có bị 2 tháng ở trong đó không là biết liền hà.
 

File đính kèm

Lần chỉnh sửa cuối:
Đã xong vụ "2 Mã khác nhau có cùng DT trong 1 ngày", và cập nhật lại danh sách ngay khi vừa sửa hoặc thêm bớt dữ liệu.


Anh quên mất rằng, khi Advanced trích lọc dữ liệu sang vùng khác, nó sẽ xóa sạch tất cả những gì đang có trong đó à? Đâu có cần phải Clear cái vùng sẽ trích lọc ra này? Anh Unhide cái Sheet2 trong file của em nha, rồi sau mỗi lần chọn tháng ở "cái ô màu hồng" (bên Sheet1), anh nhảy sang Sheet2 xem thử cái vùng lọc (E:G) nó có bị 2 tháng ở trong đó không là biết liền hà.
BNTT kiểm tra lại trường hợp này nhé: Trong dử liệu nhập, ta mới vừa nhập xong dử liệu ngày 6... tức ngày 6 chỉ mới có 1 dòng dử liệu
???
-----------------------------------------------------------------------------------
Để làm file này bằng VBA, tôi làm theo quy trình như sau:
1> AutoFilter dử liệu với cột Ngày = điều kiện nhập tại cell F3
2> AutoFilter dử liệu với cột MNV <> rổng
3> Copy dử liệu vừa Filter sang vùng tạm tại sheet2 (không lấy cột Ngày)
4> Hủy chế độ AutoFilter ở sheet1
Đoạn code này như sau:
PHP:
With Range(Sheet1.[B1], Sheet1.[B65536].End(xlUp)).Resize(, 3)
       .AutoFilter 1, CDbl(Target): .AutoFilter 2, "<>"
       .Offset(, 1).Resize(, 2).SpecialCells(12).Copy
       Sheet2.Range("A1").PasteSpecial 3
       .AutoFilter
 End With
5> Chuyển sang sheet2, ta sort cột T.DT tăng dần rồi copy 5 cell trên cùng, dán vào G4 của Sheet1
6> Lại sort tiếp vùng tạm ở sheet2.. sort T.DT giảm dần rồi cũng copy 5 cell trên cùng, dán vào I4 của Sheet1
Hai công đoạn này hầu như giống nhau (chỉ khác công đoạn sort) nên có thể ghép lại thành 1:
PHP:
With Sheet2.Range("A1").CurrentRegion
       For i = 1 To 2
           .Sort .Cells(1, 2), i, Header:=1
           Target.Offset(1, i * 2 - 1).Resize(5, 2).Value = .Offset(1).Resize(5).Value
       Next i
  End With
-----------------------------------------------------------------------------------
7> Vậy là xong! Thêm tí "mắm muối" vào là có thể "ăn" được:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  On Error Resume Next
  If Target.Address = "$F$3" Then
     Application.ScreenUpdating = False
     Sheet1.Range("G4:J8").ClearContents
     Sheet2.Range("A:B").ClearContents
     If IsNumeric(Target) Or Target = "All" Then
       With Range(Sheet1.[B1], Sheet1.[B65536].End(xlUp)).Resize(, 3)
         .AutoFilter 1, CDbl(Target): .AutoFilter 2, "<>"
         .Offset(, 1).Resize(, 2).SpecialCells(12).Copy
         Sheet2.Range("A1").PasteSpecial 3
         .AutoFilter
       End With
       With Sheet2.Range("A1").CurrentRegion
         For i = 1 To 2
           .Sort .Cells(1, 2), i, Header:=1
           Target.Offset(1, i * 2 - 1).Resize(5, 2).Value = .Offset(1).Resize(5).Value
         Next i
       End With
     End If
  End If
End Sub
-----------------------------------------------------------------------------------
Cách dùng:
- Code chỉ làm việc khi ta gõ vào F3 (không cần Validation vì... hao code, hao vùng phụ)
- Khi nhập liệu tại các cột B, C, D thì code không cập nhật ---> Thật ra có thể làm cho code cập nhật ngay khi nhập liệu, nhưng điều này không mấy gì hay (code sẽ làm việc liên tục)
- Nếu gõ sai điều kiện thì sẽ cho kết quả = rổng
- Nếu gõ chử All vào cell F3, đồng nghĩa ta muốn lọc toàn bộ
-----------------------------------------------------------------------------------
Lưu ý:
- Như các bạn thấy, trong file có 4 vùng tham gia tính toán: Vùng dử liệu gốc (B:D), vùng nhập điều kiện lọc tại F3, vùng tạm tại sheet2 và vùng kết quả G4:J8
- Vậy chúng ta chỉ cần "bám" vào 4 vùng này mà triển khai code ---> Không cần đặt quá nhiều biến và tăng thêm tham chiếu (đôi lúc dể chóng mặt lắm)
Lấy ví dụ nếu ta viết:
With Sheet2.Range("A1").CurrentRegion
mà lại
.Sort Sheet2.Range("B1")
thì... hơi bị dở ---> Lý do là vô tình bạn lại cho thằng em Sheet2.Range("B1") thành vùng thứ 5... mai này nếu có chỉnh sửa, chèn dòng, chèn cột.... mà vào sửa lại code chắc "khùng" luôn
Theo tôi, phải bám vào cái With ở trên:
With Sheet2.Range("A1").CurrentRegion
.Sort .Cells(1, 2)
.........

Nếu có sửa code, chỉ sửa lại Sheet2.Range("A1") ---> Ở giửa With... End With không thay đổi
- Đoạn code trên cùng, các bạn thấy có CDbl(Target) ---> Lý do là phòng ngừa dử liệu thật có thể là NGÀY THÁNG (chứ không phải số), lúc ấy không lồng CDbl vào là không xong!
- Ngoài ra nếu ta dùng CDbl thì khi bạn gõ vào F3 dử liệu kiểu TEXT, nó sẽ lọc TOÀN BỘ ---> Đấy là lý do có đoạn If IsNumeric(Target) Or Target = "All" Then (đương nhiên đã có On Error Resume Next bẩy lổi nằm trên cùng)
- Nói chung viết code chỉ là "tập dượt" ---> Còn để làm bài này hoàn hảo, tôi thấy nên dùng Pivot Table là hay nhất
...vân vân....
Đó chỉ là kinh nghiệm cá nhân, các bạn bổ sung nếu có sai sót
 

File đính kèm

to ndu96081631
Mình đã xem file bạn gởi .Mong bạn hướng dẫn giúp mình hiểu đoạn code sau mình đã áp dụng vào file mình nhưng không được. Xin cảm ơn
".AutoFilter 1, ">=" & CDbl(Sheet2.[B3]), xlAnd, "<=" & CDbl(Sheet2.[B4])
.SpecialCells(12).Copy: Sheet2.Range("A7").PasteSpecial 3
.AutoFilter"
 

File đính kèm

Anh ndu96081631 này, em muốn lọc theo mặt hàng được không ạ, Ý em là không phải dùng AutoFilter đó, làm theo cách dùng VBA như anh đó.
 
Web KT

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

Back
Top Bottom