Lọc dữ liệu bằng code (1 người xem)

Liên hệ QC

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

khanhthuy138

Thành viên mới
Tham gia
16/3/12
Bài viết
16
Được thích
1
Mình có 1 bảng dữ liệu dạng như sau (file đính kèm) muốn lọc lấy dữ liệu dạng Advance Filter (file ảnh là cách lấy thô bằng tay). Nhờ mọi người giúp đỡ khi thay đổi giá trị lọc LOAI thì bảng thống kê cũng thay đổi theo, và khi chọn là ALL tại giá trị lọc thì bảng thống kê sẽ hiện toàn bộ. Cảm ơn mọi người!


Quên 1 chút, dưới hàng cuối cùng có hiện cột tổng như trong bảng tổng hợp chung
 

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    13 KB · Đọc: 17
  • Book1.xls
    Book1.xls
    18 KB · Đọc: 25
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn xem trong file.
--=0 }}}}} --=0
 

File đính kèm

Upvote 0
Xin góp 1 cách áp dung hàm Filter2DArray() của anh ndu rất hay
 

File đính kèm

Upvote 0
Mình có 1 bảng dữ liệu dạng như sau (file đính kèm) muốn lọc lấy dữ liệu dạng Advance Filter (file ảnh là cách lấy thô bằng tay). Nhờ mọi người giúp đỡ khi thay đổi giá trị lọc LOAI thì bảng thống kê cũng thay đổi theo, và khi chọn là ALL tại giá trị lọc thì bảng thống kê sẽ hiện toàn bộ. Cảm ơn mọi người!



Quên 1 chút, dưới hàng cuối cùng có hiện cột tổng như trong bảng tổng hợp chung

bạn tham khảo file dưới xem đúng yêu cầu bạn ko???
 

File đính kèm

Upvote 0
Hàm Filter2DArray() là hàm viết thêm? cái file viehoai dùng tốt, mỗi cái là nó ko hiện cái khung. Không biết add hàm Filter2DArray() này vào 1 file mới thì phải làm như thế nào?

Của Goodluck thì ko hiểu sao bị lỗi #NAME?
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm Filter2DArray() là hàm viết thêm? cái file viehoai dùng tốt, mỗi cái là nó ko hiện cái khung. Không biết add hàm Filter2DArray() này vào 1 file mới thì phải làm như thế nào?

Của Goodluck thì ko hiểu sao bị lỗi #NAME?
1. Việc đóng khung mình nghĩ bạn tự làm được mà. Bạn sửa code sheet1 như sau:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim ArrKQ(), sArr()
Application.DisplayAlerts = False
If Target.Address = "$G$17" Then
sArr = Range("B7:K13").Value
If UCase(Target.Value) = "ALL" Then
ArrKQ = sArr
Else
ArrKQ = Filter2DArray(Range("B7:K13").Value, 2, Target.Value, False)
End If
If IsArray(ArrKQ) Then
Range("B20:K100").Clear
With Range("B20").Resize(UBound(ArrKQ), UBound(ArrKQ, 2))
.Value = ArrKQ
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
End With
End If
End If
Application.DisplayAlerts = True
End Sub
[/GPECODE]
2. Hàm Filter2DArray bạn cứ chép vào 1 Module của file khác cứ thế mà dùng thôi
 
Upvote 0
Hàm Filter2DArray() là hàm viết thêm? cái file viehoai dùng tốt, mỗi cái là nó ko hiện cái khung. Không biết add hàm Filter2DArray() này vào 1 file mới thì phải làm như thế nào?

Của Goodluck thì ko hiểu sao bị lỗi #NAME?
chắc bạn sự dụng ko phải là office 2010 rồi, nên hàm iferror ko sự dụng được

đã chỉnh lại ko sự dụng hàm IFERROR bạn xem có đúng ý bạn chưa
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
chắc bạn sự dụng ko phải là office 2010 rồi, nên hàm iferror ko sự dụng được
Mình dùng office 2003

1. Việc đóng khung mình nghĩ bạn tự làm được mà.
Mình tạo 1 khung trước vậy :)

Nhân tiện, mình nhờ giúp đỡ cái khó hơn (cũng file trên) là vừa thống kê theo LOAI, vừa thống kê theo khoảng thời gian tuỳ chọn (ví dụ LOAI = A, ngayden>=1/1/2013; ngaydi<=20/1/2013), không biết cái này có làm khó mấy bạn ko? Hết sức nhờ các bạn giúp đỡ.
 
Upvote 0
Mình dùng office 2003


Mình tạo 1 khung trước vậy :)

Nhân tiện, mình nhờ giúp đỡ cái khó hơn (cũng file trên) là vừa thống kê theo LOAI, vừa thống kê theo khoảng thời gian tuỳ chọn (ví dụ LOAI = A, ngayden>=1/1/2013; ngaydi<=20/1/2013), không biết cái này có làm khó mấy bạn ko? Hết sức nhờ các bạn giúp đỡ.
Bạn tham khảo Link này
 
Upvote 0
các pác cho hỏi trong code hàm fillter2darray()
câu lệnh :
Chk = (InStr("><=", Left(FindStr, 1)) > 0)
các pác giải thích cho e ý nghĩa và mục đích của câu lệnh trên ko ( e ko hiểu cú pháp này lắm )
 
Upvote 0
Bạn làm ơn mô tả tùy biến khác là như thế nào & kết quả sao mới đúng

File này mình chỉnh tuỳ biến khác thì không đúng bạn ạ.

Nếu bạn chọn "All" thì vẫn ra toàn bộ các records, bất luận là ngày nào.

Còn bạn vừa muốn hiện mọi records trong khoảng ngày tùy biến thì hãy đợi sửa lại.
 
Upvote 0
Mình dùng office 2003


Mình tạo 1 khung trước vậy :)

Nhân tiện, mình nhờ giúp đỡ cái khó hơn (cũng file trên) là vừa thống kê theo LOAI, vừa thống kê theo khoảng thời gian tuỳ chọn (ví dụ LOAI = A, ngayden>=1/1/2013; ngaydi<=20/1/2013), không biết cái này có làm khó mấy bạn ko? Hết sức nhờ các bạn giúp đỡ.
da bo ham iferror roi
ban thu lai file nay xem the co con bi loi name ko???, tren may minh thi ko co van de
 

File đính kèm

Upvote 0
Nhà em thấy bài này cũng hay, nên cố gắng làm vừa học vừa giúp bạn. Các thày và các bạn xem và cho ý kiến giúp đỡ .
 

File đính kèm

Upvote 0
Nhà em thấy bài này cũng hay, nên cố gắng làm vừa học vừa giúp bạn. Các thày và các bạn xem và cho ý kiến giúp đỡ .

[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False
If Intersect(Target, [G17]) Is Nothing Then Exit Sub
Me.UsedRange.Resize(, 10).Offset(19).Clear
Sheet1.[B6:K14].AdvancedFilter 2, [G16:G17], [B20]
With Range("L21:L30")
.Formula = "=IF(AND(RC[-8]>=R17C4,RC[-7]<=R17C5),RC[-9],"""")"
.Value = .Value
End With
With Rows("21:40").Select
Selection.EntireRow.Hidden = False
End With
With Range("L21:L40").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Hidden = True
End With
Range("G17").Select
Application.ScreenUpdating = True
End Sub[/GPECODE]

hình như bạn hơi lạm dụng từ khóa
With
'
.
.
end with


ALL của bạn không có kết quả nha!

nếu chỉ muốn lọc thôi thế thì sử dụng advencefilter được rồi :

[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False

If Not Intersect(Target, [e17:G17]) Is Nothing Then
Sheet1.[c20:K30].Clear
If Sheet1.[e17] = "" Or Sheet1.[f17] = "" Then
Sheet1.[c6:K14].AdvancedFilter 2, [m16:m17], [c20:K20]
Else
Sheet1.[c6:K14].AdvancedFilter 2, [k16:m17], [c20:K20]
End If
End If

Application.ScreenUpdating = True
End Sub


[/GPECODE]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn Good-luck, lời giải hay thật. Theo góp ý của bạn mình đã sửa lại code, đúng là lạm dụng thật. Không biết bài này có bao nhiêu lời giải nhỉ ? Nhân tiện hỏi mọi người : Hôm trước mình tải về mấy tập tin dính virust, tập "NEGS.xls" và Tập "StarUp.xls", code của nó thì xóa rồi nhưng gốc tập tin vẫn hiện trên cửa sổ VBA, xóa nó thế nào nhỉ ? Trông tức mắt lắm .
 
Lần chỉnh sửa cuối:
Upvote 0
[ThongBao]To Kh Biet;465470: Lạc đề rồi!
.[/ThongBao]
 
Upvote 0
Chạy tốt bạn Good-Luck. Nhưng mà code VBA bạn ghi mình đọc ko ra (font chữ lỗi?!)

Chừ đang thử lọc theo ngày (khoảng giữa 2 ngày), nhưng mà khi mình thử đổi xác định ngày theo (mình giả định thêm 1 cột nữa, nếu thuộc khoảng 2 ngày đó thì xuất giá trị 1, không đúng giá trị 0 rồi lọc những record có giá trị 1), tuy nhiên ko rõ tại sao là nó ko đổi. Mình mới tự học cái code for excel mấy ngày thôi, hồi xưa chừ chưa đc học.

------------------------------------------
Đây là cái file dùng lại sửa. Khi mình tự gõ số 2 vào ô J17 rồi enter thì nó mới lọc, nếu chỉ thay đổi 3 ô G17, H17, I17 thì ko có hiện tượng gì. Nhờ mọi người giúp với.

 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chạy tốt bạn Good-Luck. Nhưng mà code VBA bạn ghi mình đọc ko ra (font chữ lỗi?!)

Chừ đang thử lọc theo ngày (khoảng giữa 2 ngày), nhưng mà khi mình thử đổi xác định ngày theo (mình giả định thêm 1 cột nữa, nếu thuộc khoảng 2 ngày đó thì xuất giá trị 1, không đúng giá trị 0 rồi lọc những record có giá trị 1), tuy nhiên ko rõ tại sao là nó ko đổi. Mình mới tự học cái code for excel mấy ngày thôi, hồi xưa chừ chưa đc học.

------------------------------------------
Đây là cái file dùng lại sửa. Khi mình tự gõ số 2 vào ô J17 rồi enter thì nó mới lọc, nếu chỉ thay đổi 3 ô G17, H17, I17 thì ko có hiện tượng gì. Nhờ mọi người giúp với.

xài cái cách nào thì xai một cách thôi, muốn lọc phạm vi rộng hơn thì thiết lập lại phạm vi là ok
[GPECODE=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, [g17:i17]) Is Nothing Then
Sheet1.[c20:n30].Clear
Sheet1.[c6:n14].AdvancedFilter 2, [k16:m17], [c20:n20]
End If
Application.ScreenUpdating = True
End Sub


[/GPECODE]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thì vậy mới gọi là học chứ bác Goodluck, tks đã giúp đỡ. Đang test lại :D
 
Upvote 0
Nhờ các bác giúp cho, vì em gà quá, làm không được.
Nội dung: có 1 bảng tính (sheet 1) và nó có thể nhập thêm dữ liệu nhiều hơn nữa
Sheet 2: Lọc theo cột DG, tức là nếu có giá trị thuộc cột DG thì lọc, xếp theo thứ tự nhỏ đến lớn dần.
Sheet 3: Lọc theo cột DG và tên, xếp theo thứ tự nhỏ đến lớn dần.

Mong các bác giúp đỡ
 

File đính kèm

Upvote 0
Mình mở bộ thu macro, nó như sau

PHP:
Option Explicit
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 2/24/2013 by Microsoft
'
    Sheets("Sheet1").Select
    Range("C7:J20").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=8, Criteria1:="<>"
    Selection.Copy
    Sheets("Sheet2").Select
    Range("B3").Select
    ActiveSheet.Paste
    Range("B3:I10").Select
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("I4"), Order1:=xlAscending, Key2:=Range("B4") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
End Sub

Câu 2 bạn tự thử đi nha!
 
Upvote 0
Xem trong file, có sửa vài chổ cho lưu loát thêm

[thongBao]Bác cho cái file chứ thế này thì chịu sầu bác ạ :(
[/thongBao]
 

File đính kèm

Upvote 0
Ủa sao em đổi số hoặc thêm số liệu thì bảng ở sheet 2 không thấy đổi gì hết bác ạ
 
Upvote 0
Đây, chính xác là cái file đang cần làm lại, đã làm được 1 ít còn lại chắc phải nhờ các cao thủ giúp e 1 số nội dung: khoá Protect Sheet nhưng ko chạy đc code; sắp xếp dữ liệu.

1/Đây là lỗi sau khi khoá Protect Sheet và chạy Advance Filter bằng code
http://img593.imageshack.us/img593/434/22334.png

2/Nhận tiện nhờ các bác sắp xếp dùng em theo cột ghi chú: trong cột này có số lượng ngày thì xếp theo cột này từ bé đến lớn (cột ghi chú chỉ hiện ngày nếu công trình chọn là Tạm).

Thực tế e không là người nào làm file này trong phần giới thiệu, chỉ là được nhờ lại. Bác cao thủ nào giúp em hoàn thành 2 vấn đề trên, xin hậu tạ bác 1 thẻ cào điện thoại 50k để tỏ thành ý, sau ni chắc hợp tác lâu dài :D
 

File đính kèm

Upvote 0
Đây, chính xác là cái file đang cần làm lại, đã làm được 1 ít còn lại chắc phải nhờ các cao thủ giúp e 1 số nội dung: khoá Protect Sheet nhưng ko chạy đc code; sắp xếp dữ liệu.

1/Đây là lỗi sau khi khoá Protect Sheet và chạy Advance Filter bằng code
http://img593.imageshack.us/img593/434/22334.png

2/Nhận tiện nhờ các bác sắp xếp dùng em theo cột ghi chú: trong cột này có số lượng ngày thì xếp theo cột này từ bé đến lớn (cột ghi chú chỉ hiện ngày nếu công trình chọn là Tạm).

Thực tế e không là người nào làm file này trong phần giới thiệu, chỉ là được nhờ lại. Bác cao thủ nào giúp em hoàn thành 2 vấn đề trên,
xin hậu tạ bác 1 thẻ cào điện thoại 50k để tỏ thành ý, sau ni chắc hợp tác lâu dài :D
thấy vậy hết ham (mất hết lửa máu) vậy thì ra bác này đang kinh doanh
 
Upvote 0
thấy vậy hết ham (mất hết lửa máu) vậy thì ra bác này đang kinh doanh
Ác chết, cái này là hậu tạ chứ kinh doanh gì bác, em làm free cho mấy anh đấy mà :D Còn ý nghĩa của "hợp tác" là sau ni có chi là có địa chỉ nhờ ngay ấy :D có chút lòng thành, bác lại nghĩ là kinh doanh thì tiêu òi :P Sản phẩm sau khi hoàn thành thì free cho quận, huyện luôn đó bác, hoàn toàn không có bất cứ phí nào. Họ bí về code nên mới phải nhờ ấy chứ.
 
Upvote 0
Cái này nhờ các bác giúp đỡ, vì cuối tuần sau phổ biến về các đơn vị rồi.
 
Upvote 0
Chậc, bác Goodluck phán 1 câu xanh rờn, làm mọi ng cũng k ai thèm vô giúp đc. Bác chưa nắm rõ nội tình thì bác đừng nên gây ảnh hưởng xấu vậy chớ bác. Rõ chán chưa :|
 
Upvote 0
Chậc, bác Goodluck phán 1 câu xanh rờn, làm mọi ng cũng k ai thèm vô giúp đc. Bác chưa nắm rõ nội tình thì bác đừng nên gây ảnh hưởng xấu vậy chớ bác. Rõ chán chưa :|
ác đường quy tội cho người khác tuỳ tiện vậy chứ, vấn đề ở đây ko phải do lời phát ngôn của mình, mà chí là do câu nói này đây
...... xin hậu tạ bác 1 thẻ cào điện thoại 50k để tỏ thành ý, sau ni chắc hợp tác lâu dài :D
ở đây người có kiến thức giúp bạn mình tin rằng ai cũng là người có tuổi cả, nên khi thấy bài viết trên họ sẽ nghĩ thế nào nếu họ trả lời???
nên tóm lại : GPE giúp đỡn nhau phi lợi nhuận, chỉ là trao đổi, tương trở lẫn nhau thôi , chứ lời nói của mình làm sao có được cân nặng vậy chứ ,mình đâu phải là thẩm phán

thân
" ôi nói ít làm nhiều ít hay sai , lời nói cổ nhân đúng là ko sai"
 
Upvote 0
Cái ni là lòng thành, thì nếu bác nào quan tâm thì e biếu, ko thì e ghi nhận :D chớ bác nói kinh doanh thì chết, e cũng làm free. Thì bác tính đi, nếu có phí "kinh doanh" thật sự thì e nhờ tụi sinh viên CNTT cho lẹ chứ lân la lên đây làm gì. Chủ yếu vừa hỏi vừa học vì thực tế trước giờ hoàn toàn ko học 1 chút nào về Marco for excel (phần mềm lập trình cao nhất đã học là... pascal).

Nói chung e với bác có hiểu lầm chút :D có gì bác thông cảm nhá, he he
 
Upvote 0

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

Back
Top Bottom