Lọc dữ liệu từ một sheet qua các sheet khác (4 người xem)

Liên hệ QC

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

khaothibaclieu

Thành viên hoạt động
Tham gia
10/4/08
Bài viết
113
Được thích
14
Nhờ mọi người giúp đỡ. Mình muốn lọc từ sheet NhapDS sang các sheet Toán, Lý theo môn học sinh đăng kí dự thi nhưng mình không biết cách làm.
Ví dụ: Học sinh đăng kí thi Toán thì được lọc qua sheet Toán.
Nhờ mọi người hướng dẫn. Lọc bằng công thức cũng được vì dữ liệu của mình không lớn.
Ở sheet các môn Toán, Lý khi lọc xong thì phải dấu cột "Môn thi" đi.
Nếu dùng VBA thì càng tốt. Nếu được thì làm cho có vẻ chuyên nghiệp luôn là chỉ cần tạo một combo box để người dùng chỉ chọn hoặc có vào một ô nào đó ví dụ như "In Môn thi" thì chương trình chạy ra luôn danh sách của môn đó ở một sheet khác, không cần phải tạo nhiều sheet cho nhiều môn. Nếu vậy thì tên môn thi ở dòng Tiêu đề Danh sách thí sinh cũng phải được thể hiện sau khi đã dấu cột môn thi đi.
Quan trọng nhất là các bạn chỉ bảo luôn cách làm để sau này mình có thể giải quyết vấn đề tương tự.
Cám ơn trước.
 

File đính kèm

PHP:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$H$4" Then [B8:K15].ClearContents k = 8 For i = 9 To Sheet3.[B9].End(xlDown).Row If Sheet3.Cells(i, 2) = [H4].Value Then     Range("B" & k & ":K" & k) = Sheet3.Range("B" & i & ":K" & i).Value     k = k + 1 End If Next End If End Sub
Bạn xem file nha! Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Bài toán này nếu làm nhanh nhất là dùng AutoFilter... Nếu dùng VBA cũng nên đi theo hướng này, tốc độ sẽ nhanh hơn rất nhiều so với vòng lập For
Tôi nhận xét rằng: Nếu phải trích ra từ 10 sheet trở lên và dử liệu bố trí phức tạp hơn thì mới nghĩ đến chuyện làm bằng VBA.. còn ở đây có 3 sheet: 3 lần Filter, 3 lần copy và 3 lần paste ---> đâu có lâu, lại vô cùng dể hiểu
 
Bài toán này nếu làm nhanh nhất là dùng AutoFilter... Nếu dùng VBA cũng nên đi theo hướng này, tốc độ sẽ nhanh hơn rất nhiều so với vòng lập For
Tôi nhận xét rằng: Nếu phải trích ra từ 10 sheet trở lên và dử liệu bố trí phức tạp hơn thì mới nghĩ đến chuyện làm bằng VBA.. còn ở đây có 3 sheet: 3 lần Filter, 3 lần copy và 3 lần paste ---> đâu có lâu, lại vô cùng dể hiểu

Cám ơn bạn đã quan tâm. Tôi chỉ làm sheet ví dụ thôi. Dĩ nhiên là bạn thấy có nhiều môn thi đấy (hơn 10 sheet). Vấn đề là tôi muốn học hỏi thêm qua các ví dụ từ thực tiễn.
 
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$4" Then
[B8:K15].ClearContents
k = 8
For i = 9 To Sheet3.[B9].End(xlDown).Row
If Sheet3.Cells(i, 2) = [H4].Value Then
    Range("B" & k & ":K" & k) = Sheet3.Range("B" & i & ":K" & i).Value
    k = k + 1
End If
Next
End If
End Sub
Bạn xem file nha!
Thân.

Rất cám ơn bạn nhưng tại sao tôi đổi qua các môn khác không thấy có sự lọc dữ liệu vậy.
 
Có khi tên nhãn lạ , nó không hiểu; bạn chỉ đổi tên nhãn thôi , rồi chạy , ra đuơcaở shêt khác sẽ cho nó về đúng môn mà mình mong muốn.
 
Bạn đổi tên ở ô màu vàng ấy! Còn các ô ở dưới thì chỉ hiển thị giá trị thôi! Thân.
 
Lần chỉnh sửa cuối:
Thử file này xem!
Mổi khi bạn chọn vào 1 sheet thì nó tự động lọc
Nếu sau này danh sách bạn dài thêm và có thêm những môn mới thì cứ việc thêm tên sheet trùng tên với tên môn thì... chắc chắn nó sẽ lọc chính xác
Bài này làm trên cơ sở Sort và AutoFilter... Bảo đãm tốc độ nhanh
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim Rng As Range, TempRng As Range, TenSh As Worksheet
  Application.ScreenUpdating = False
  Set TenSh = ActiveSheet
  If TenSh.Name <> "Huongdan" And TenSh.Name <> "Dinhnghia" And TenSh.Name <> "NhapDS" Then
    Set TempRng = [A7].CurrentRegion
    If TempRng.Rows.Count > 1 Then
        TempRng.Offset(1).Resize(TempRng.Rows.Count - 1).Delete
    End If
    Set Rng = Sheets("NhapDS").[A9].CurrentRegion
    Rng.Offset(2).Sort Key1:=Rng(3, 2), Order1:=1, Header:=xlNo
    Rng.AutoFilter Field:=2, Criteria1:=TenSh.Name
    Rng.Offset(2).SpecialCells(2, 23).Copy
    [A8].Insert Shift:=xlDown
    Sheets("NhapDS").ShowAllData
    Rng.Offset(2).Sort Key1:=Rng(3, 1), Order1:=1, Header:=xlNo
  End If
End Sub
Chú ý: Tôi đã sửa lại dử liệu của bạn 1 chút: Phần dử liệu và tiêu đề nằm trên cùng phải cách nhau ít nhất 1 dòng... Như thể sẽ dể dàng định vị dử liệu hơn
Bạn theo dỏi đề tài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=13658&page=2
Gần giống đến 99% yêu cầu của bạn đấy
 

File đính kèm

Lần chỉnh sửa cuối:
- Vào sheet "In Danh Sach" --> chọn môn nào sẽ hiển thị danh sách hs thi môn đó

- Mình đã sửa lại cột thứ tự ở sheet "NhapDS" --> hiển thị TT tự động khi nhập dữ liệu (tối đa 200 hs)

Pass Unprotect Sheet : devilwoman


Download file :

http://www.box.net/rssdownload/202438406/Nhap lieu thi HSGL12.rar
 
Lần chỉnh sửa cuối:
- Vào sheet "In Danh Sach" --> chọn môn nào sẽ hiển thị danh sách hs thi môn đó

- Mình đã sửa lại cột thứ tự ở sheet "NhapDS" --> hiển thị TT tự động khi nhập dữ liệu (tối đa 200 hs)

Pass Unprotect Sheet : devilwoman


Download file :

http://www.box.net/rssdownload/202438406/Nhap lieu thi HSGL12.rar

}}}}} Bạn cho minh code và cách làm như bạn được không?

Chỉ cần như là ở phần" In Danh Sach" có cái hàm lọc đó , để mình làm file quản lý của riêng mình được ko?
mail: cnt.ndc@gmail.com

Pass Unprotect Sheet : devilwoman (ko đúng bạn)


thanks
 
Lần chỉnh sửa cuối:
quá hay bác ạ. em cũng có một file với yêu cầu tương tự, nên cũng đang tự học, em nghiên cứu file của bác để tự làm nếu có chỗ nào không hiểu , em up lên mong bác chỉ giáo .
Thử file này xem!
Mổi khi bạn chọn vào 1 sheet thì nó tự động lọc
Nếu sau này danh sách bạn dài thêm và có thêm những môn mới thì cứ việc thêm tên sheet trùng tên với tên môn thì... chắc chắn nó sẽ lọc chính xác
Bài này làm trên cơ sở Sort và AutoFilter... Bảo đãm tốc độ nhanh
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim Rng As Range, TempRng As Range, TenSh As Worksheet
  Application.ScreenUpdating = False
  Set TenSh = ActiveSheet
  If TenSh.Name <> "Huongdan" And TenSh.Name <> "Dinhnghia" And TenSh.Name <> "NhapDS" Then
    Set TempRng = [A7].CurrentRegion
    If TempRng.Rows.Count > 1 Then
        TempRng.Offset(1).Resize(TempRng.Rows.Count - 1).Delete
    End If
    Set Rng = Sheets("NhapDS").[A9].CurrentRegion
    Rng.Offset(2).Sort Key1:=Rng(3, 2), Order1:=1, Header:=xlNo
    Rng.AutoFilter Field:=2, Criteria1:=TenSh.Name
    Rng.Offset(2).SpecialCells(2, 23).Copy
    [A8].Insert Shift:=xlDown
    Sheets("NhapDS").ShowAllData
    Rng.Offset(2).Sort Key1:=Rng(3, 1), Order1:=1, Header:=xlNo
  End If
End Sub
Chú ý: Tôi đã sửa lại dử liệu của bạn 1 chút: Phần dử liệu và tiêu đề nằm trên cùng phải cách nhau ít nhất 1 dòng... Như thể sẽ dể dàng định vị dử liệu hơn
Bạn theo dỏi đề tài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=13658&page=2
Gần giống đến 99% yêu cầu của bạn đấy
 
"Rng.Offset(2).Sort Key1:=Rng(3, 2), Order1:=1, Header:=xlNo" có bác nào online giải thích hộ em câu lệnh này cái .
 
Web KT

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

Back
Top Bottom