Xin giải thích dùm em code này (1 người xem)

Liên hệ QC

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

diemdiem

Thành viên hoạt động
Tham gia
23/11/10
Bài viết
148
Được thích
7
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Worksheet, cRit As Range

Set Sh = ThisWorkbook.Worksheets("HoSo")
Rws = Sh.[b7].CurrentRegion.Rows.Count
If Not Intersect(Target, [L1]) Is Nothing Then
Set cRit = Range("AA1:AB2")
[N3].Value = [M3].Value
LocDS cRit
ElseIf Not Intersect(Target, [o1]) Is Nothing Then
Set cRit = Range("Ad1:Ae2")
[N3].Value = [O3].Value
LocDS cRit
End If
End Sub

Trong sheet "ho so", em muốn thêm một số tên gv vào phía dưới ds, nhưng code ko hiểu, nhờ các anh chỉnh giúp code giúp em, để khi em thêm vào một số người thì code vẫn có thể lọc được.
 

File đính kèm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Worksheet, cRit As Range

Set Sh = ThisWorkbook.Worksheets("HoSo")
Rws = Sh.[b7].CurrentRegion.Rows.Count
If Not Intersect(Target, [L1]) Is Nothing Then
Set cRit = Range("AA1:AB2")
[N3].Value = [M3].Value
LocDS cRit
ElseIf Not Intersect(Target, [o1]) Is Nothing Then
Set cRit = Range("Ad1:Ae2")
[N3].Value = [O3].Value
LocDS cRit
End If
End Sub

Trong sheet "ho so", em muốn thêm một số tên gv vào phía dưới ds, nhưng code ko hiểu, nhờ các anh chỉnh giúp code giúp em, để khi em thêm vào một số người thì code vẫn có thể lọc được.
Code này là dùng advance filter để lấy đữ liệu, điều kiên cho advandce filter ở các cột AA, AB, AD, AE
Crit là điều kiện lọc
LocDS cRit là filter theo đk cRit (Crit là các đk ở cột AA,AB..) - LocDS là 1 sub, bạn coi trong code

fix lại code ở dòng này

thay "Rws = Sh.[b7].CurrentRegion.Rows.Count" bằng "Rws = Sh.[b65000].End(3).Row"
 
Upvote 0
Code này là dùng advance filter để lấy đữ liệu, điều kiên cho advandce filter ở các cột AA, AB, AD, AE
Crit là điều kiện lọc
LocDS cRit là filter theo đk cRit (Crit là các đk ở cột AA,AB..) - LocDS là 1 sub, bạn coi trong code

fix lại code ở dòng này

thay "Rws = Sh.[b7].CurrentRegion.Rows.Count" bằng "Rws = Sh.[b65000].End(3).Row"

Đúng là cái mà em đang cần, thank anh nhé
 
Upvote 0
Code này là anh em họ nhà mình viết cho bạn để bạn có thể lọc theo quí hay theo năm tùy nghi.
Lí ra bạn nên hỏi tiếp trong Topic đó; Mọi người dễ nắm bắt công việc của bạn hơn.
Nhưng cũng may cho bạn là có người đã gãi đúng chổ ngứa của bạn!; Hì, hì, , , ,

Trong Code đã xài fương thức CurrentRegion để đếm số dòng của CSDL hiện có của bạn;
Xài fương thức này chỉ & luôn đúng 1 khi CSDL tuân thủ điều kiện là không có dòng trống trong CSDL
Bạn tuân thủ nguyên tắc này thì chuyện đếm số dòng để xác định vùng dữ liệu cần lọc là không bao giờ sai.

Còn không tuân thủ thì CSDL của bạn sẽ nhanh chống trở thành đống rác (không mùi) mà thôi!
Thân ái & chúc vui!

 
Upvote 0
Code này là anh em họ nhà mình viết cho bạn để bạn có thể lọc theo quí hay theo năm tùy nghi.
Lí ra bạn nên hỏi tiếp trong Topic đó; Mọi người dễ nắm bắt công việc của bạn hơn.
Nhưng cũng may cho bạn là có người đã gãi đúng chổ ngứa của bạn!; Hì, hì, , , ,

Trong Code đã xài fương thức CurrentRegion để đếm số dòng của CSDL hiện có của bạn;
Xài fương thức này chỉ & luôn đúng 1 khi CSDL tuân thủ điều kiện là không có dòng trống trong CSDL
Bạn tuân thủ nguyên tắc này thì chuyện đếm số dòng để xác định vùng dữ liệu cần lọc là không bao giờ sai.

Còn không tuân thủ thì CSDL của bạn sẽ nhanh chống trở thành đống rác (không mùi) mà thôi!
Thân ái & chúc vui!

code anh cho, em đã chỉnh lại, nhưng từ năm 2017 về sau thì lọc đúng, còn 2016 thì khi lọc quý nào cũng chỉ ra có ds ở quý III thôi anh ạ. Anh xem giúp em với
 
Upvote 0
code anh cho, em đã chỉnh lại, nhưng từ năm 2017 về sau thì lọc đúng, còn 2016 thì khi lọc quý nào cũng chỉ ra có ds ở quý III thôi anh ạ. Anh xem giúp em với

Bạn kiểm lại xem cột [X] của trang 'HoSo' có trị nào thuộc quí I & II đâu cơ chứ?
Muốn có thì nhập trực tiếp vô dòng của người nào đó trong cột này & chạy lại macro;

Còn macro đúng là có báo lỗi; Hay bạn thử làm vầy xem sao:
PHP:
Option Explicit
Dim Rws As Long
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet, cRit As Range
 
 If Not Intersect(Target, [L4]) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("HoSo")    '*'
    Rws = Sh.[b7].CurrentRegion.Rows.Count      '*'
    
    Set cRit = Range("AA1:AB2")
    [AC5].Value = [AB5].Value
    LocDS cRit
 ElseIf Not Intersect(Target, [N4]) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("HoSo")    '*'
    Rws = Sh.[b7].CurrentRegion.Rows.Count      '*'
    Set cRit = Range("Ad1:Ae2")
    [N3].Value = [AD5].Value
    LocDS cRit
 End If
End Sub
(Macro còn lại vẫn như cũ)-+*/
 
Upvote 0
Bạn kiểm lại xem cột [X] của trang 'HoSo' có trị nào thuộc quí I & II đâu cơ chứ?
Muốn có thì nhập trực tiếp vô dòng của người nào đó trong cột này & chạy lại macro;

Còn macro đúng là có báo lỗi; Hay bạn thử làm vầy xem sao:
PHP:
Option Explicit
Dim Rws As Long
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet, cRit As Range
 
 If Not Intersect(Target, [L4]) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("HoSo")    '*'
    Rws = Sh.[b7].CurrentRegion.Rows.Count      '*'
    
    Set cRit = Range("AA1:AB2")
    [AC5].Value = [AB5].Value
    LocDS cRit
 ElseIf Not Intersect(Target, [N4]) Is Nothing Then
    Set Sh = ThisWorkbook.Worksheets("HoSo")    '*'
    Rws = Sh.[b7].CurrentRegion.Rows.Count      '*'
    Set cRit = Range("Ad1:Ae2")
    [N3].Value = [AD5].Value
    LocDS cRit
 End If
End Sub
(Macro còn lại vẫn như cũ)-+*/

Option Explicit
Dim Rws As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Worksheet, cRit As Range

Set Sh = ThisWorkbook.Worksheets("HoSo")
Rws = Sh.[b65000].End(3).Row
If Not Intersect(Target, [L4]) Is Nothing Then
Set cRit = Range("AA1:AB2")
[AC5].Value = [AB5].Value
LocDS cRit
ElseIf Not Intersect(Target, [N4]) Is Nothing Then
Set cRit = Range("Ad1:Ae2")
[N3].Value = [AD5].Value
LocDS cRit
End If
End Sub

Sub LocDS(cRit As Range)

Sheets("HoSo").Range("B7:X7" & Rws).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=cRit, CopyToRange:=Range("B8:j8"), Unique:=False
End Sub

Sub LocDS ở trên, vùng lấy dữ liệu qua sheet DSLuong chỉ tới cột M, N, Q, em muốn vùng lấy dữ liệu không phải là 3 cột M, N, Q nữa vì đó là số liệu cũ, mà phải lấy 3 cột T, U, X (Dữ liệu mới). Giúp em thay đổi dữ liệu lại với ạ!
Em gửi kèm file nhé. Hihi, vui lòng đừng thay đổi dữ liệu gốc tội nghiệp em nhé.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom