Code Find quét ngược ?

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Chào các bạn!
Khi tìm dữ liệu trong bảng tính, nếu dùng câu lệnh Msgbox Cells.Find("*").Address ta được địa chỉ ô đầu tiên chứa dữ liệu của bảng tính - có nghĩa là theo mặc định máy sẽ quét tìm từ ô A1 đến đến ô IV65536. Nhưng Tôi muốn máy tìm ngược từ ô IV65536 đến ô A1 thì code viết như thế nào ? Rất mong được sự giúp đỡ của các bạn. Thanks!
 
Bác xem code trong file của em nha!
Thân.
 

File đính kèm

Upvote 0
Nếu dùng ký tự cần Tìm là "*" thì nó vẫn quét xuôi bạn ạ. MsgBox thông báo C5 nhưng tôi muốn nó báo là C17.

Mã:
Sub chay()
Dim fc As Variant
fc = "*"
Set fc = [C5:C17].Find(fc)
Set fc = [C5:C17].FindPrevious(after:=fc)
MsgBox fc.Address
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu dùng ký tự cần Tìm là "*" thì nó vẫn quét xuôi bạn ạ. MsgBox thông báo C5 nhưng tôi muốn nó báo là C17.

Mã:
Sub chay()
Dim fc As Variant
fc = "*"
Set fc = [C5:C17].Find(fc)
Set fc = [C5:C17].FindPrevious(after:=fc)
MsgBox fc.Address
End Sub
Bạn sửa lại như thế này:
PHP:
Sub Text()
Dim Rng As Range, Lookup As String
Lookup = "*"
Set Rng = [C5:C17].Find(Lookup, After:=[C17])
Set Rng = [C5:C17].FindPrevious(After:=Rng)
MsgBox Rng.Address
End Sub
 
Upvote 0
Cảm ơn Po_Pikachuhuuthang_bd. Nhờ sự giúp đỡ của các bạn Tôi đã tìm được code địa chỉ ô cuối có dữ liệu. Vấn đề tôi đang cần đúng là cái này
Mã:
Sub Fid_Cuoi()
  MsgBox Cells.FindPrevious(After:=Cells.Find("*")).Address
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Po_Pikachuhuuthang_bd. Nhờ sự giúp đỡ của các bạn Tôi đã tìm được code địa chỉ ô cuối có dữ liệu. Vấn đề tôi đang cần đúng là cái này
Mã:
Sub Fid_Cuoi()
  MsgBox Cells.FindPrevious(After:=Cells.Find("*")).Address
End Sub
Bạn phải thêm After vào thì mới đúng. Với code của bạn, bạn thử chạy ở một bảng tính mà cell A1 có dữ liệu xem kết quả có đúng không. Phải sửa lại như thế này:
PHP:
Sub Fid_Cuoi()
MsgBox Cells.FindPrevious(After:=Cells.Find("*", After:=[IV65536])).Address
End Sub
Hoặc nếu mục đich của bạn là tìm ô cuối cùng của dòng cuối cùng có dữ liệu thì có thể dùng thuộc tính UsedRange.
 
Upvote 0
Cảm ơn Po_Pikachuhuuthang_bd. Nhờ sự giúp đỡ của các bạn Tôi đã tìm được code địa chỉ ô cuối có dữ liệu. Vấn đề tôi đang cần đúng là cái này
Mã:
Sub Fid_Cuoi()
  MsgBox Cells.FindPrevious(After:=Cells.Find("*")).Address
End Sub
Cho em hỏi: Trong file của anh, cell H23 là cell cuối cùng có dử liệu... Vậy nếu cell I22 cũng có dử liệu luôn thì anh sẽ xem cell nào là cell cuối cùng?
 
Upvote 0
Cho em hỏi: Trong file của anh, cell H23 là cell cuối cùng có dử liệu... Vậy nếu cell I22 cũng có dử liệu luôn thì anh sẽ xem cell nào là cell cuối cùng?

@ ndu: vì dùng Find và mặc định là quét theo dòng nên cell cuối luôn được xác định theo thứ tự ưu tiên dòng (vì vậy H23 mới là cell cuối).

___Ý đồ của tôi là thử dùng Find tìm cell cuối là để tuỳ biến khi xác định dòng cuối cùng có dữ liệu của bảng tính thay cho việc phải xác định trước cột chứa ô dữ liệu sau cùng ví dụ: nếu dùng lệnh Range("A1:A" & [C65536].End(xlUp).Row thì phải cố định cột C mới xác định được dòng cuối).

bạn thử chạy ở một bảng tính mà cell A1 có dữ liệu xem kết quả có đúng không
@ huuthang_bd: Tôi đã test và thấy nó chỉ luôn ô A1 trong khi A2 hoặc B1 có dữ liệu (A1 rỗng) thì code vẫn cho kết quả là ô cuối. Xin bạn vui lòng giải thích cho mình biết tại sao khi A1 có dữ liệu thì code của tôi lại sai?

___
nếu mục đich của bạn là tìm ô cuối cùng của dòng cuối cùng có dữ liệu thì có thể dùng thuộc tính UsedRange.
Trước đây tôi vẫn thường sử dụng UsedRannge để xác định dòng cuối của bảng nhưng tôi gặp phải trường hợp khi xoá bớt dòng hoặc cột dữ liệu (kể cả xoá dữ liệu hoặc rút dòng, cột) thì địa chỉ UsedRannge cũng thay đổi theo nhưng khi đóng File, mở lại thì địa chỉ UsedRannge lại là địa chỉ vùng trước khi xoá (gồm cả phần ngoài bảng không còn dữ liệu) do vậy tôi mới thử dùng find xem có được không.

Rất mong được các bạn tiếp tục giúp đỡ.
 
Upvote 0
___Ý đồ của tôi là thử dùng Find tìm cell cuối là để tuỳ biến khi xác định dòng cuối cùng có dữ liệu của bảng tính thay cho việc phải xác định trước cột chứa ô dữ liệu sau cùng ví dụ: nếu dùng lệnh Range("A1:A" & [C65536].End(xlUp).Row thì phải cố định cột C mới xác định được dòng cuối).
___Trước đây tôi vẫn thường sử dụng UsedRannge để xác định dòng cuối của bảng nhưng tôi gặp phải trường hợp khi xoá bớt dòng hoặc cột dữ liệu (kể cả xoá dữ liệu hoặc rút dòng, cột) thì địa chỉ UsedRannge cũng thay đổi theo nhưng khi đóng File, mở lại thì địa chỉ UsedRannge lại là địa chỉ vùng trước khi xoá (gồm cả phần ngoài bảng không còn dữ liệu) do vậy tôi mới thử dùng find xem có được không.

Rất mong được các bạn tiếp tục giúp đỡ.
Hình như bạn cần đọc lại cái này: http://www.giaiphapexcel.com/forum/showthread.php?t=1641#10

Chúc ngày nghỉ vui vẽ.
 
Upvote 0
Cảm ơn bác HYen! thú thực bài nay em chưa đọc, theo chỉ dẫn của bác em mới xem qua mà hoa cả mắt em sẽ xem lại các bài này kỹ hơn. Tạm thời em thấy có lẽ mấu chốt là ở đây: SearchDirection:=xlPrevious
Do đó em sửa lại code như sau và test thấy OK:
Mã:
Sub Cell_Cuoi()
MsgBox Cells.Find("*", SearchDirection:=xlPrevious).Address
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom