Giải thích code lọc dữ liệu

Liên hệ QC

ngoctrongdat

Thành viên mới
Tham gia
31/8/08
Bài viết
45
Được thích
13
Tôi được ndu viết giùm một đoạn code cho việc lọc dữ liệu học sinh giỏi, học sinh tiên tiến như sau:
Mã:
Option Explicit
Sub Trichloc()
  Dim i As Long
  Application.ScreenUpdating = False
  Sheets("hsg").[A6:G1000].Clear
  Sheets("HSTT").[A6:G1000].Clear
  With Sheets("lop").[A6].CurrentRegion
    For i = 1 To 2
      .AutoFilter 4, Choose(i, "G", "K"): .AutoFilter 5, "T"
      .SpecialCells(12).Copy
      With Sheets(Choose(i, "hsg", "HSTT")).[A6]
        .PasteSpecial
        If .CurrentRegion.Rows.Count > 1 Then
          .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
        End If
      End With
    Next i
  End With
  Sheets("lop").AutoFilterMode = False
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
  Application.ScreenUpdating = True
End Sub
Tuy nhiên kiến thức về macro của bản thân còn hạn chế nên rất cần các bạn giúp đỡ giải thích giùm một số nội dung trong đoạn code trên:
-Con số 12 trong dòng lệnh: ".SpecialCells(12).Copy " có ý nghĩa gì?
-Ý nghĩa của dòng lệnh: .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
Và nói chung là nếu bác nào có điều kiện dịch toàn bộ đoạn code đó sang tiếng việt (giải thích) ý nghĩa đầy đủ của nó thì càng tốt
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Tôi được ndu viết giùm một đoạn code cho việc lọc dữ liệu học sinh giỏi, học sinh tiên tiến như sau:
PHP:
Option Explicit
Sub Trichloc()
  Dim i As Long
1  Application.ScreenUpdating = False
  Sheets("hsg").[A6:G1000].Clear
3  Sheets("HSTT").[A6:G1000].Clear
  With Sheets("lop").[A6].CurrentRegion
5    For i = 1 To 2
      .AutoFilter 4, Choose(i, "G", "K"): .AutoFilter 5, "T"
 7     .SpecialCells(12).Copy
      With Sheets(Choose(i, "hsg", "HSTT")).[A6]
 9       .PasteSpecial
        If .CurrentRegion.Rows.Count > 1 Then
 11         .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
        End If
 13     End With
    Next i
 15 End With
  Sheets("lop").AutoFilterMode = False
 17 Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
  Application.ScreenUpdating = True
End Sub


Tuy nhiên kiến thức về macro của bản thân còn hạn chế nên rất cần các bạn giúp đỡ giải thích giùm một số nội dung trong đoạn code trên:
-Con số 12 trong dòng lệnh: ".SpecialCells(12).Copy " có ý nghĩa gì?
-Ý nghĩa của dòng lệnh: .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
Và nói chung là nếu bác nào có điều kiện dịch toàn bộ đoạn code đó sang tiếng việt (giải thích) ý nghĩa đầy đủ của nó thì càng tốt

Tôi xin diễn nôm lại cho bạn nhé, hy vọng bạn hiểu, nếu không sẽ giải thích tiếp. Thông cảm vì giải thích vụng về
D1: Cho màn hình khỏi giựt khi chạy code
(2) Xóa dữ liệu
For i = 1 To 2 Chọn i từ 1đến 2
.SpecialCells(12).Copy Copy những dòng xuất hiện sau khi AutoFilter (Visible Cell Only) bạn nhấn Ctr G sẽ thấy. .PasteSpecial Dán value .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)") Tạo số TT End With
End With
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)") Hiện thông báo, "TB" là 1 name, nhấn Ctr F3 sẽ thấy End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cụ thể hơn bạn hãy cho biết:
-Ý nghĩa của số 12 trong dòng lệnh .SpecialCells(12).Copy

-Ý nghĩa của Row(R:R) trong dòng lệnh .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")

-Để tạo ra được một TB giống như trong file đó thì các bước được thực hiện như thế nào?+-+-+-+
 
Upvote 0
Cụ thể hơn bạn hãy cho biết:
-Ý nghĩa của số 12 trong dòng lệnh .SpecialCells(12).Copy

-Ý nghĩa của Row(R:R) trong dòng lệnh .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")

-Để tạo ra được một TB giống như trong file đó thì các bước được thực hiện như thế nào?+-+-+-+
Nội dung chính của code chẳng qua chỉ là AutoFilter theo điều kiện thôi mà bạn!
1> Mấy cái SpcialCells(...) là lấy từ hộp Goto (Ctrl + G\Special) ---> Bạn cứ tự mình thí nghiệm sẽ biết
2> Evaluate("ROW(R:R)") ---> Bạn thí nghiệm bằng cách quét chọn 1 cột nào đó (chẳng hạn là C5:C10) rồi gõ vào thanh Formula công thức =ROW(R:R) sau đó bấm Ctrl + Shift + Enter thử xem nó ra kết quả gì ---> Lồng Evaluate vào để biến công thức thành giá trị
3> Để tạo ra TB, bạn xem chi tiết tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=22396
 
Upvote 0
Nội dung chính của code chẳng qua chỉ là AutoFilter theo điều kiện thôi mà bạn!
1> Mấy cái SpcialCells(...) là lấy từ hộp Goto (Ctrl + G\Special) ---> Bạn cứ tự mình thí nghiệm sẽ biết
2> Evaluate("ROW(R:R)") ---> Bạn thí nghiệm bằng cách quét chọn 1 cột nào đó (chẳng hạn là C5:C10) rồi gõ vào thanh Formula công thức =ROW(R:R) sau đó bấm Ctrl + Shift + Enter thử xem nó ra kết quả gì ---> Lồng Evaluate vào để biến công thức thành giá trị
3> Để tạo ra TB, bạn xem chi tiết tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=22396
Cảm ơn bạn nhiều. Tôi đã sơ lược hiểu về những thứ này rồi đấy! (Bạn xem tôi tạo được thông báo rồi)
Tuy nhiên còn nhiều vấn đề chưa biết rất mong bạn giúp!
 

File đính kèm

Upvote 0
Code mới đây!

PHP:
Option Explicit
1 Dim Sh As Worksheet, Rng As Range
Private Sub Worksheet_Change(ByVal Target As Range)
3 If Not Intersect(Target, [i1]) Is Nothing Then
   Range([B7], Cells([B65500].End(xlUp).Row, "G")).ClearContents
5   GPE_COM
   Sh.Range("i7:N" & Sh.[i65500].End(xlUp).Row).Copy Destination:=[B7]
7   Set Sh = Nothing:          Set Rng = Nothing
 End If
End Sub

Mã:
[B]Sub GPE_COM()[/B]
21 Set Sh = Sheets("Lop")
 Set Rng = Sh.Range("B6:G" & Sh.[B65500].End(xlUp).Row)
23 Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
        "M1:M2"), CopyToRange:=Sh.Range("I6:N6"), Unique:=False
[B]End Sub[/B]


Các bác dịch giùm code này sang tiếng việt giúp em nhé!!!!!!!!!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
(Bạn nên cho biết chi tiết khi dùng 2 macro này!)

Dòng 1: Khai báo 2 biến đối tượng dùng chung trong 2 macro;

Dòng 3: Nếu NSD (Người sử dụng) đụng vô [I1] của trang tính (Chắc tại đây có danh sách đỗ xuống), thì thực thi các dòng lệnh còn lại (của macro này)

Dòng 4: Xóa dữ liệu trong vùng từ [B7] cho đến dòng cuối chứa dữ liệu của cột 'B' tại cột 'G'. Ví dụ: Dòng cuối chứa dữ liệu cột 'B' là 35, thì xóa từ [B7]..[G35]

Dòng 5: Thực thi các dòng lệnh có trong macro mang tên 'GPE_COM"

Dòng 6: Copy vùng dữ liệu (Xem lại dòng lệnh 4 sẽ hiểu vùng cần Copy) đến vùng có ô trái nhất trên cùng (được xác định) là [B7]

Dòng lệnh 7: Vì khai báo biến dùng chung, nên nhứt thiết phải xóa nội dung trong biến để thu hồi bộ nhớ.

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
Sang macro thứ hai:

Dòng 21: Gán cho biến đối tượng Sh là trang tính có tên "Lop" (Nên nhớ, biến này dùng chung trong các macro có trong module hiện hành. Nói rõ hơn: Xem lại dòng lệnh 6 bên trên)

Dòng 22: Gán cho biến đối tượng kiểu Range dùng chung là 1 vùng, mà để hiểu vùng này là vùng nào, cần suy từ việc hiểu dòng lệnh 4 bên trên;

Dòng 23: Thực hiện phương thức AdvancedFilter với vùng đã chứa trong biến Rng;
với Vùng Điều kiện (Chuẩn) là 'M1:M2'; Vùng thể hiện (tiêu đề) là: "I6:N6" ở trang tính chứa trong biến Sh

Các bác dịch giùm code này sang tiếng việt giúp em nhé!!!!!!!!!

Như vậy theo mình, bạn phải nhuyễn dòng lệnh 4;
Có thể bằng cách thêm sau nó dòng lệnh
Mã:
MsgBox Range[COLOR=#007700]([[/COLOR][COLOR=#0000bb]B7[/COLOR][COLOR=#007700]], [/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000bb]B65500[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Row[/COLOR][COLOR=#007700], [/COLOR][COLOR=#dd0000]"G"[/COLOR][COLOR=#007700])).Address[/COLOR]
để rõ thêm trong mọi trường hợp;

(Tương tự, để hiểu Rng là vùng nào hiện hữu, bạn có thể thêm dòng lệnh

Mã:
 MsgBox Rng.Address
vào nơi nào bạn thấy là thích hợp & chưa chán với các hộp thoại trao đổi thông tin giữa bạn & VBA)
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi lại bài có chứa macro

Đây là file mà bác yêu cầu. Bác xem và giúp em cụ thể hơn em nêu trong bài rồi.
 

File đính kèm

Upvote 0
Đây là file mà bác yêu cầu. Bác xem và giúp em cụ thể hơn em nêu trong bài rồi.
Trong file bạn hỏi cách lấy được danh sách duy nhất để làm Validation List ---> Thường người ta dùng Advanced Filter với tùy chọn Unique Records only để lọc
Tuy nhiên nếu là tôi thì tôi làm khác:
- Đàng nào cũng chỉ có 4 điều kiện lọc, vậy không cần phải lọc duy nhất là gì ---> Cứ gõ trực tiếp vào Validation list cho xong ---> Đở tốn cột phụ
- Yêu cầu lọc khá đơn giản nên không cần đến Advanced Filter ---> Tôi dùng AutoFilter sẽ gọn hơn rất nhiều
Bạn xem file nhé (chú ý name trong Define name nhé)
Code chính chỉ có nhiêu đây:
PHP:
   With Sheet1.Range(Sheet1.[A6], Sheet1.[A65536].End(xlUp)).Resize(, 7)
     .AutoFilter 6, Evaluate("Dk")
     Intersect(.Cells, .Offset(1)).Copy
     Range("A7").PasteSpecial 3
     .AutoFilter
   End With
Các phần khác trong code chỉ là màu mè thêm vào
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cách vận hành

Code chính chỉ có nhiêu đây:
PHP:
   With Sheet1.Range(Sheet1.[A6], Sheet1.[A65536].End(xlUp)).Resize(, 7)
     .AutoFilter 6, Evaluate("Dk")
     Intersect(.Cells, .Offset(1)).Copy
     Range("A7").PasteSpecial 3
     .AutoFilter
   End With
Các phần khác trong code chỉ là màu mè thêm vào

cách vận hành thế nào hả bạn?
Tôi lấy về nhưng không vận hành được!!!!
 
Upvote 0
cách vận hành thế nào hả bạn?
Tôi lấy về nhưng không vận hành được!!!!
Cứ chọn tại cell B4 sh DSTD, nó sẽ cho ta điều kiện lọc. Và B4 này tên là DK.
Còn muốn biết tại sao hiện chữ "Danh sách..." thì bạn nên xem format.
Code này là nếu B4 change thì sẽ Auto Filter cột 6 bên sh Lop và copy sang sh DSTD.
 
Upvote 0
Cứ chọn tại cell B4 sh DSTD, nó sẽ cho ta điều kiện lọc. Và B4 này tên là DK.
Còn muốn biết tại sao hiện chữ "Danh sách..." thì bạn nên xem format.
Code này là nếu B4 change thì sẽ Auto Filter cột 6 bên sh Lop và copy sang sh DSTD.
Tôi cũng đã chọn sang các mục khác trong b4 nhưng danh sách thì vẫn cứ là mấy hs trung bình thôi.
Các bạn kiểm tra giúp xem thế nào?
 
Upvote 0
Tôi cũng đã chọn sang các mục khác trong b4 nhưng danh sách thì vẫn cứ là mấy hs trung bình thôi.
Các bạn kiểm tra giúp xem thế nào?
File đã được Test rất kỹ trước khi đưa lên nên không thể có chuyện giống như bạn nói được!
Trừ phi bạn mở file mà chưa bấm nút Enable macro
 
Upvote 0
Lọc khi có Protect?

File đã được Test rất kỹ trước khi đưa lên nên không thể có chuyện giống như bạn nói được!
Trừ phi bạn mở file mà chưa bấm nút Enable macro
Đúng vậy rồi. Máy của tôi mới để chế độ đóng băng ổ cứng nên ....

Tôi đã thử và làm lại sang một file khác. Tuy nhiên khi đặt Pass trong Tools/Protect thì lại không lọc nữa. Làm thế nào bây giờ?
 

File đính kèm

Upvote 0
Đúng vậy rồi. Máy của tôi mới để chế độ đóng băng ổ cứng nên ....

Tôi đã thử và làm lại sang một file khác. Tuy nhiên khi đặt Pass trong Tools/Protect thì lại không lọc nữa. Làm thế nào bây giờ?
Dể mà... Unprotect trước rồi hẳn lọc, lọc xong lại Protect
Code của bạn có đoạn:
PHP:
   With Sheet1.Range(Sheet1.[A6], Sheet1.[A65536].End(xlUp)).Resize(, 7)
     .AutoFilter 6, Evaluate("Dk")
     Intersect(.Cells, .Offset(1)).Copy
     Range("A7").PasteSpecial 3
     .AutoFilter
   End With
Và tôi giả sử rằng Password sheet của bạn là 123, vậy hãy code trên thành:
PHP:
    With Sheet1.Range(Sheet1.[A6], Sheet1.[A65536].End(xlUp)).Resize(, 7)
     .Parent.Unprotect 123
     .AutoFilter 6, Evaluate("Dk")
     Intersect(.Cells, .Offset(1)).Copy
     Range("A7").PasteSpecial 3
     .AutoFilter
     .Parent.Protect 123
   End With
Thế thôi
-----------------
Nói thêm: Lần sau đưa file lên nhớ kèm Pass nhé.. Mất công phải Cr@ck.. lười lắm (tính của tôi, nếu ai đặt Pass thì tôi chả thèm xem làm gì)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dể mà... Unprotect trước rồi hẳn lọc, lọc xong lại Protect


Thế nó không tự khóa lại được sao?
Có cách nào không chứ, lọc xong lại đi đặt lại Pass thì ....
Ôi trời... Tôi chỉ nói nguyên tắc hoạt động chứ có bắt bạn phải làm gì đâu nào ---> Thế bạn đã test file tôi chưa? Code nó tự mở khóa rồi khóa lại luôn --> Có cấn bạn phải làm gì đâu chứ
 
Upvote 0
Đặt code tự động được không?

Ôi trời... Tôi chỉ nói nguyên tắc hoạt động chứ có bắt bạn phải làm gì đâu nào ---> Thế bạn đã test file tôi chưa? Code nó tự mở khóa rồi khóa lại luôn --> Có cấn bạn phải làm gì đâu chứ

Đó là với Pass cố định còn nếu là Pass ngẫu nhiên thì sao bạn? (Khi thay Pass mà không cần sửa code đó?)
 
Upvote 0
Đó là với Pass cố định còn nếu là Pass ngẫu nhiên thì sao bạn? (Khi thay Pass mà không cần sửa code đó?)
Dù là Pass nào thì cũng do bạn tự đặt, nên khi thay pass, đương nhiên bạn phải sửa lại code chứ
Nếu code nó có khả năng nhận ra được pass của bạn thì chẳng hóa ra khỏi bảo mật à?
 
Upvote 0
Kiểm tra giúp lỗi code

Vì file có dung lượng lớn không đưa lên diễn đàn được tôi gửi mail cho bạn giúp tôi nhé.
Thánhk!
 
Upvote 0
Web KT

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

Back
Top Bottom