Lọc và hiển thị dữ liệu theo nhiều điều kiện.

  • Thread starter Thread starter rosy84
  • Ngày gửi Ngày gửi
Liên hệ QC

rosy84

Thành viên hoạt động
Tham gia
15/3/09
Bài viết
170
Được thích
38
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?
 

File đính kèm

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?
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 à.
Theo mình nghĩ khi bạn nhập số liệu vào C2 (từ AREA) thì không thể hiện dữ liệu ở C4 (tức location) được vì VD: K17 có rất nhiều dữ liệu.
Còn hiện ở item thì có thể được.
Bạn xem lại yêu cầu 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?
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ỉ?
Nếu là tôi thì tôi dùng code VBA, cũng đơn giản thôi, code dựa trên cơ sở AutoFilter hoặc Advanced Filter ---> Bạn record macro là ra ngay!
 
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!
 

File đính kèm

Cá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!
 
Cá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!
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ạ đấy
 
Dữ 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
 

File đính kèm

Lần chỉnh sửa cuối:
Anh có thể giúp em việc nữa không? vì dữ liệu đó em cần fải in ra.
Dữ liệu thì lại có nhiều. Anh có thể giúp em cách phân trang khi in không? em có gửi kèm file chứa mẫu in. Thank!
 

File đính kèm

Em phải cho biết:
- Nội dung của counter1, counter2, check1, check2 là gì?
- 4 dòng đó mỗi cuối trang đều có hay chỉ trang cuối thôi?
 
Cái đó là không cần nội dung, vì nó dùng để ghi sau khi in.

Cái đó là trang mẫu, nghĩa là trang nào cũng phải có cả. thanks!
 
Vậy chỉ cần setup page footer thôi.
 
Dữ 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
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ào
1> Code cho sheet DATA
PHP:
Private Sub Worksheet_Deactivate()
  Range("G:G").ClearContents
  Range("A1").CurrentRegion.Resize(, 1).AdvancedFilter 2, , [G1], True
End Sub
2> Code cho sheet Report
PHP:
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
Tất cả vẫn dựa trên nền AutoFilter và Advanced Filter làm chủ đạo + Dictionary Object làm nhiệm vụ lọc Area nữa là xong!
 

File đính kèm

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!
 
Phải công nhận là cái Dictionary Object hay quá. Dùng nó để lấy List duy nhất rất hay.

Nhưng nói về những báo cáo nói chung, thì không phải báo cáo nào cũng bê nguyên xi mọi cột của bảng hoặc 1 số cột liên tục của bảng vào báo cáo:

- Có trường hợp lấy 1 số cột không liên tục và không thứ tự:dùng code của ndu vẫn có thể copy từng cột được, nhưng mất công.
- Có trường hợp lấy dữ liệu các cột sau khi tính toán với nhau
- Có trường hợp lọc dữ liệu với nhiều điều kiện trên nhiều cột, có cả điều kiện chứa công thức.
- Có trường hợp lấy dữ liệu từ 2 bảng Master và Child (có mối quan hệ 1 ~ nhiều)
- Có trường hợp kết hợp những cái trên

Trong trường hợp đó thì ADO mạnh hơn và linh hoạt hơn. Code ADO tuy dài vậy, nhưng mấu chốt nằm hết ở câu lệnh SQL, mà SQL làm hết những trường hợp trên ngon.

Nói đi cũng phải nói lại: Dùng đại đao ADO cho file cụ thể này hơi phí thật.
 
Lần chỉnh sửa cuối:
Sư phụ ơi!
Cái file này dù sao cũng là giả lập... Em đang nghĩ với file thật liệu có nên suy nghĩ dùng PivotTable không nhỉ?
Em cho rằng nếu có thể dùng được thì công cụ này chắc là VÔ ĐỊCH rồi
-------------
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!
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?
 
Lần chỉnh sửa cuối:
Em đang nghĩ với file thật liệu có nên suy nghĩ dùng PivotTable không nhỉ?
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.
 
Lần chỉnh sửa cuối:
Pivot 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.
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ồi
Đại khái thể này nè sư phụ:

attachment.php


Xin lổi, em không rành về món này lắm... làm bừa không biết đúng không?
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    32.3 KB · Đọc: 99
Lần chỉnh sửa cuối:
Nhầm tí sửa lại mà muộn rồi, Pivot lấy DS Area duy nhất rồi chứ, nhưng không rút gọn cho riêng từng Location. Bấm xổ xuống vẫn là 9 cái để chọn, chứ không phải chỉ có 3. không biết cái nào, thậm chí không biết mấy cái.

Mục đích của tác giả là chỉ chọn 1 trong 3 thôi mà. Dữ liệu giả lập thì nó ít vậy và còn có thứ tự sẵn riêng cho từng Location, thực tế nó nằm tùm lum xen kẽ nhau cơ.

attachment.php
 

File đính kèm

  • List Pivot.jpg
    List Pivot.jpg
    23.5 KB · Đọc: 106
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom