VBA tự động thay đổi tham chiếu vùng (range và cell) khi insert dòng cột trong sheet tính toán (2 người xem)

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

Tôi tuân thủ nội quy khi đăng bài

eagle12

Thành viên mới
Tham gia
18/12/13
Bài viết
26
Được thích
5
Chào các bác

Em có 1 code VBA lọc dữ liệu theo điều kiện như sau, hiện đang được gắn vào vùng data từ "A5:Jxxx" tại sheet "Pv"

Xin nhờ mọi người có cách nào VBA nhận được tùy biến khi vùng giá trị bảng lọc ban đầu "A5:Jxxx" nó thay đổi khi em chèn thêm cột hoặc xóa bớt dòng không ạ
Em ví dụ việc thay đổi vùng range như dưới:
1-Trong TH nếu phải chèn thêm 1 số cột đằng trước cột A ---> vd sheet Pv2: chèn thêm 3 cột thì vùng dữ liệu lọc sẽ thành "D5:Mxxx"
2-Hoặc em chèn 3 cột trong vùng data ban đầu ---> vd sheet Pv3: chèn 3 cột C,D,F thì vùng dữ liệu lọc sẽ thành "A5:Mxxx"
3-Hoặc sheet Pv4 ; vừa chèn thêm 3 cột trước cột A + chèn 4 cột sau cột A + xóa 2 dòng trên ---> bảng mới "D3:Qxxx"

Cám ơn mọi người nhiều

Mã:
Sub Filter()
'Declare a variable
Dim ws As Worksheet
Set ws = Worksheets("Pv")

Vol = ">=" & ws.Range("E4").value
ws.Range("A5:J" & [I100000].End(xlUp).Row).AutoFilter
ws.Range("A5:J" & [I100000].End(xlUp).Row).AutoFilter Field:=5, Criteria1:=Vol

End Sub
1762152362185.png1762152469356.png
 

File đính kèm

Thứ nhất: Lý ra bạn cần đăng bài vô mục 'Lập trình . . .'; Còn giờ thì phải nhắn tin đến SMOD/MOD nhờ dời bài ;

Phần bạn hỏi:
→ Bạn đã có các tiêu đề từ [A5...J5]
Bạn có thể xài phương thức FIND() để tìm ra nội dung ô {A5] cũ hiện đang ở xứ nào trên trang tính;
Kế tiếp kiểm tra các ô bên phải liền kề với ô vừa tìm ra xem chúng liên tục hay không,. . .
Hay có thể tìm ngay ô chứa nội dung [J5] cũ trong cùng dòng với ô vừa tìm thấy
Kết hợp với số dòng mà trang tính bạn đã sử dụng làm vùng mới
Để thực hiện toàn bộ công cuộc tìm kiếm này; đầu tiên bạn phải xác định vùng đang sử dụng của trang
Như vậy bạn cần khai báo thêm các tham biến, giả dụ
Dim Rng As Range, sRng as Range
Dim Rws As Long
Ở đây Rng sẽ được gán cho vùng mà trang tính đang chứa dữ liệu; sRng là ô đang chứa nội dung [A5] cũ mà phương thức FIND() cần đi tìm
Rws là số dòng trang tính đang sử dụng

CHÚC BẠN THÀNH CÔNG MĨ MÃN!
 
Upvote 0
Có thêm 1 cách là dùng 1 name đặt cho bảng dữ liệu (phải là name dộng tự co giãn).
Tuy vậy, không nên vô cớ chèn cột như vậy, đặc biệt là chèn cột vào giữa bảng. Kể cả chèn dòng. Thiết kế dữ liệu và cấu trúc sheet cho đầy đủ rồi hãy viết code lập trình. Sau đó là nghiêm cấm, ai vi phạm thì tự sửa.
 
Upvote 0
Thứ nhất: Lý ra bạn cần đăng bài vô mục 'Lập trình . . .'; Còn giờ thì phải nhắn tin đến SMOD/MOD nhờ dời bài ;

Phần bạn hỏi:
→ Bạn đã có các tiêu đề từ [A5...J5]
Bạn có thể xài phương thức FIND() để tìm ra nội dung ô {A5] cũ hiện đang ở xứ nào trên trang tính;
Kế tiếp kiểm tra các ô bên phải liền kề với ô vừa tìm ra xem chúng liên tục hay không,. . .
Hay có thể tìm ngay ô chứa nội dung [J5] cũ trong cùng dòng với ô vừa tìm thấy
Kết hợp với số dòng mà trang tính bạn đã sử dụng làm vùng mới
Để thực hiện toàn bộ công cuộc tìm kiếm này; đầu tiên bạn phải xác định vùng đang sử dụng của trang
Như vậy bạn cần khai báo thêm các tham biến, giả dụ
Dim Rng As Range, sRng as Range
Dim Rws As Long
Ở đây Rng sẽ được gán cho vùng mà trang tính đang chứa dữ liệu; sRng là ô đang chứa nội dung [A5] cũ mà phương thức FIND() cần đi tìm
Rws là số dòng trang tính đang sử dụng

CHÚC BẠN THÀNH CÔNG MĨ MÃN!
Cám ơn bác,
Trình độ VBA của em mới ở đoạn a b c thôi bác, logic bác chỉ em hiểu nhưng tìm code tương ứng thì em chịu rồi
 
Upvote 0
Chào các bác

Em có 1 code VBA lọc dữ liệu theo điều kiện như sau, hiện đang được gắn vào vùng data từ "A5:Jxxx" tại sheet "Pv"

Xin nhờ mọi người có cách nào VBA nhận được tùy biến khi vùng giá trị bảng lọc ban đầu "A5:Jxxx" nó thay đổi khi em chèn thêm cột hoặc xóa bớt dòng không ạ
Em ví dụ việc thay đổi vùng range như dưới:
1-Trong TH nếu phải chèn thêm 1 số cột đằng trước cột A ---> vd sheet Pv2: chèn thêm 3 cột thì vùng dữ liệu lọc sẽ thành "D5:Mxxx"
2-Hoặc em chèn 3 cột trong vùng data ban đầu ---> vd sheet Pv3: chèn 3 cột C,D,F thì vùng dữ liệu lọc sẽ thành "A5:Mxxx"
3-Hoặc sheet Pv4 ; vừa chèn thêm 3 cột trước cột A + chèn 4 cột sau cột A + xóa 2 dòng trên ---> bảng mới "D3:Qxxx"

Cám ơn mọi người nhiều

Mã:
Sub Filter()
'Declare a variable
Dim ws As Worksheet
Set ws = Worksheets("Pv")

Vol = ">=" & ws.Range("E4").value
ws.Range("A5:J" & [I100000].End(xlUp).Row).AutoFilter
ws.Range("A5:J" & [I100000].End(xlUp).Row).AutoFilter Field:=5, Criteria1:=Vol

End Sub
Hãy thử tham khảo code sau (Theo gợi ý của Anh @SA_DQ )
Code chỉ chạy cho ra kết quả mong muốn khi điều kiện lọc nằm ở dòng trên dòng có chứa ô "STT", và dòng đó chỉ chứa duy nhất điều kiện lọc (trong bài là 5000000)
Code chạy được tất cả các sheet đang hiển thị như trong bài.

Mã:
Sub Filter()

Dim ws As Worksheet
Dim Rng As Range
Dim i&,j&,Lr&
Dim Col&, Cot&, Vol

Set ws = ActiveSheet

i = ws.Cells.Find("STT").Row
j = ws.Cells.Find("STT").Column
Lr = ws.Cells(ws.Rows.Count, j).End(xlUp).Row
d = ws.Rows(i - 1).Find("*").Column

Col = ws.Cells(i + 1, ws.Columns.Count).End(xlToLeft).Column

Set Rng = ws.Range(ws.Cells(i, j), ws.Cells(Lr, Col))
Cot = Rng.Find(ws.Cells(i, d).Value).Column
If j > 1 Then Cot = Cot - j + 1
Vol = ">=" & ws.Cells(i - 1, d).Value
Rng.AutoFilter
Rng.AutoFilter Field:=Cot, Criteria1:=Vol

End Sub
 
Upvote 0
Hãy thử tham khảo code sau (Theo gợi ý của Anh @SA_DQ )
Code chỉ chạy cho ra kết quả mong muốn khi điều kiện lọc nằm ở dòng trên dòng có chứa ô "STT", và dòng đó chỉ chứa duy nhất điều kiện lọc (trong bài là 5000000)
Code chạy được tất cả các sheet đang hiển thị như trong bài.
Dear anh HuongHCKT

Cám ơn anh rất nhiều, em thử vào file và kết quả đúng như mong đợi anh ạ

Have nice day anh !
 
Upvote 0

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

Back
Top Bottom