Tìm Một Giá Trị Trong Nhiều Sheet

Liên hệ QC

VietPublic

Thành viên mới
Tham gia
22/5/08
Bài viết
7
Được thích
0
Mã:
Function SearchTopID(intID)
  On Error Resume Next
  Dim i As Integer
  Dim strResult
  
  SearchTopID = False
  i = 1
    For i = 1 To ThisWorkbook.Worksheets.Count
        i = i + 1
        strResult = Worksheets(i).Cells.Find(what:=intID)
        If strResult <> "" Then
         SearchTopID = True
         Exit Function
        End If
    Next i
   
End Function
Mình có đoạn code trên, mục đích là tìm một ID dạng number trong tất cả các sheets

Nhưng trong 1 sheet có giá trị là 52341 thì mình nhập intID là 2 hoặc 1 hoặc 3 hoặc 5 thì có kết quả là SearchTopID = true
Khi nhập intID là 8 thì kết quả là False
ACE nào có thể giúp mình sửa code trên để khi nhập intID là 52341 là True, còn các giá trị khác là False, kể cả nhập đúng intID là 341 thì cũng false

Xin cảm ơn các bạn
 
Bạn sửa lại câu lệnh:

strResult = Worksheets(i).Cells.Find(what:=intID)

cho tường minh hơn; Ví dụ

strResult = Worksheets(i).Cells.Find(what:=intID,, XlFomulas, xlWhole)

Mà đoạn Code của bạn nó sẽ không tìm trong tất cả các trang tính đâu, bạn bắt nó chừa lại trang tính đầu hay sao ấy chứ lị.

Mình khuyên bạn hai điều:

(*) Đến đây tìm hiểu thêm về phương thức FIND(): http://giaiphapexcel.com/forum/showthread.php?t=15116

(*) Nên tường minh hơn tác phẩm của mình cho đến khi hết lỗi; Chỉ sau khi ấy thì vẽ vời thêm nếu muốn.
Ăn chắc mặc bền trước, rồi mới đến ăn ngon, mặc đẹp!
 
Upvote 0
Cảm ơn bạn HYen17 rất nhiều, VP đã hoàn thành và paste lên đây cho ACE đến sau còn tìm kiếm

Mã:
Function SearchTopID(intID)
  On Error Resume Next
  Dim i As Integer
  
  Dim Rng As Range, sRng As Range
   
  SearchTopID = False
 
  For i = 1 To ThisWorkbook.Worksheets.Count
    
    Worksheets(i).Activate
    Set Rng = Range([A1], [A1].End(xlDown))
    Set sRng = Rng.Find(intID, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        SearchTopID = True
        Exit For
    Else
        SearchTopID = False
    End If
   
   Next i
   
End Function
 
Upvote 0
Cảm ơn bạn HYen17 rất nhiều, VP đã hoàn thành và paste lên đây cho ACE đến sau còn tìm kiếm

Mã:
Function SearchTopID(intID)
  On Error Resume Next
  Dim i As Integer
  
  Dim Rng As Range, sRng As Range
   
  SearchTopID = False
 
  For i = 1 To ThisWorkbook.Worksheets.Count
    
    Worksheets(i).Activate
    Set Rng = Range([A1], [A1].End(xlDown))
    Set sRng = Rng.Find(intID, , xlValues, xlWhole)
    If Not sRng Is Nothing Then
        SearchTopID = True
        Exit For
    Else
        SearchTopID = False
    End If
   
   Next i
   
End Function
Đoạn Worksheets(i).Activate chẳng có tác dụng gì cả ---> Là 1 UDF thì nó chỉ trả về giá trị chứ nó không thể "nhảy đến" sheet nào, cho dù bạn có cho đoạn ấy vào
Thêm nữa, code này hãy rút gọn lại:
PHP:
Function SearchTopID(intID) As Boolean
  Dim Sh As Worksheet
  Application.Volatile
  For Each Sh In ThisWorkbook.Worksheets
    With Range(Sh.[A1], Sh.[A1].End(xlDown))
      SearchTopID = Not .Find(intID, , xlValues, xlWhole) Is Nothing
      If SearchTopID = True Then Exit Function
    End With
  Next
End Function
- Chỉ cần khai báo 1 biến Sh là đủ rồi --> Khai 1 đóng chỉ thêm rối mắt
- Thêm câu Application.Volatile để hàm tự cập nhật khi dử liệu thay đổi
- Bạn khai báo Function SearchTopID(intID) As Boolean thì khỏi cần phải thêm câu SearchTopID = FALSE vào đầu code, vì mặc định ban đầu giá trị của nó đã = FALSE
Bạn thử xem!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom