Bài Bạn bị xó do ở trên chủ đề Bạn ghi nhờ các anh giúp đỡ....Bạn chưa đọc kỹ hướng dẫn khi post bài à.Rất mong các anh chị giúp em. Em cũng không hiểu tại sao bài của mình bị xóa nữa?
Dạng bài toán lọc kiểu này đã có đầy trên GPE rồi, thiết nghĩ tầm cở như bạn viết hơn 70 bài chắc cũng đã từng đọc qua chứ nhỉ?Rất mong các anh chị giúp em. Em cũng không hiểu tại sao bài của mình bị xóa nữa?
Xem tam file lày đi vậy.Nếu em mà viết được rồi thì cần chi phải đưa lên diễn đàn nữa hả Pro.
Nếu Pro thấy dạng bài này có nhiều trên diễn đàn thì cho em một đường link đi
PRo. thanks!
Thì bạn cứ thử gõ từ khóa này đi: Lọc dử liệu nhiều điều kiệnNếu em mà viết được rồi thì cần chi phải đưa lên diễn đàn nữa hả Pro.
Nếu Pro thấy dạng bài này có nhiều trên diễn đàn thì cho em một đường link đi
PRo. thanks!
Dử liệu 20.000 dòng thì nên dùng VBA đi đồng chí ơi! Dùng công thức nó chạy được mới lạ đấyCái đó của bác nếu dùng với khoảng 20000 dòng thì có ổn không hả bác. với lại khi làm như vậy thì
em cũng phải in theo trang nữa. và ở các combo đó thì bác có thể làm giảm các lần xuất hiện của nó đi đượcn không? rất mong các anh chị giúp đỡ. thanks!
Em thì dùng Dictionary Object để làm bài này, code ngắn gọn hơn rất nhiều và thậm chí không dùng bất cứ vùng phụ nàoDữ liệu nhiều thì dùng VBA, đặc biệt là dùng ADO. Nếu dùng code Advanced Filter hay AutoFilter e rằng không giải quyết vụ validation của 2 ô C2, C4 dài thậm thượt, khó chọn lắm.
Ghi chú:
- Hình như tác giả nhầm: C2 là Location chứ không phải Area.
- List Location và list Area không cần tạo trước
Private Sub Worksheet_Deactivate()
Range("G:G").ClearContents
Range("A1").CurrentRegion.Resize(, 1).AdvancedFilter 2, , [G1], True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dk1 As String, Dk2 As String, Dic
On Error Resume Next
Set Dic = CreateObject("Scripting.Dictionary")
Dic.RemoveAll
If Target.Address = "$C$2" Or Target.Address = "$C$4" Then
Dk1 = [C2].Value: Dk2 = [C4].Value
Range("A7:E60000").ClearContents
With Sheet1.Range("A1").CurrentRegion
If Target.Address = "$C$2" Then
.AutoFilter 1, Dk1
For Each Clls In Intersect(.Cells, .Offset(1, 1)).Resize(, 1).SpecialCells(12)
Dic.Add Clls.Value, ""
Next Clls
End If
.Parent.Range("H2").Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.Keys)
.AutoFilter 2, Dk2
Intersect(.Cells, .Offset(1, 2)).SpecialCells(12).Copy
Range("B7").PasteSpecial 3
.AutoFilter
End With
With Range("A6").CurrentRegion
If .Rows.Count > 1 Then .Resize(, 1).SpecialCells(4).Value = Evaluate("ROW(R:R)")
End With
Target.Select
End If
End Sub
Vùng phụ này đàng nào cũng phải có, dù là dùng bất cứ phương pháp gì ---> Hỏng có nó thì Validation của bạn lấy list chổ nào?Em thấy của bác vẫn dùng vùng phụ đó chứ.
Cái này đúng là ngắn gọn hơn. Bác có thể hướng dẫn và giải thích giúp em không? thaks!
Pivot Table thì nhanh thật, nhưng trong trường hợp này vẫn không tạo được list rút gọn cho Area. Sau khi chọn Location xong, chả biết cái Area nào nên chọn trong 1 DS gồm tất cả Area của cả Location khác, vẫn dài thậm thượt. Chọn sai thì trắng trơn.Em đang nghĩ với file thật liệu có nên suy nghĩ dùng PivotTable không nhỉ?
Ah.. không! Với PivotTable thì ta không cần tạo bất cứ cái gì ---> Tự thân trong Drop Down list của nó luôn là list duy nhất rồiPivot Table thì nhanh thật, nhưng trong trường hợp này vẫn không tạo được list duy nhất cho Area. Sau khi chọn Location xong, chả biết cái Area nào nên chọn trong 1 DS gồm tất cả Area của cả Location khác, vẫn dài thậm thượt. Chọn sai thì trắng trơn.