Bài này có thể dùng phương thức FIND để xác định (giống như bạn bấm Ctrl + F để tìm ấy)Mình có câu hỏi thế này nhờ các bạn giải đáp giúp mình
Cầu hỏi nằm trong file luôn, các bạn download về rồi giúp mình nhé
Sub KiemTra()
Dim FRng As Range
With Range("A1:A100")
Set FRng = .Find(Range("E1").Value, , xlValues, xlWhole)
If Not FRng Is Nothing Then
MsgBox "Tim thay"
Else
MsgBox "Khong tim thay"
End If
End With
End Sub
Một cách dùng countifMình có câu hỏi thế này nhờ các bạn giải đáp giúp mình
Cầu hỏi nằm trong file luôn, các bạn download về rồi giúp mình nhé
Public Function tim(vung, dk As Range) As String
If Application.WorksheetFunction.CountIf(vung, dk) > 0 Then
tim = "Co"
Else
tim = "khong"
End If
End Function
Function Str_Ex(Rg As Range, ch As String) As Boolean
With WorksheetFunction
str_Ex = InStr(1, Join(.Transpose(Rg), ";"), ch) > 0
End With
End Function
Em lo rằng cách dùng InStr sẽ dể có nguy cơ... nhầmNdu à, Ndu lại quên tuyệt chiêu của mình à
Cú pháp = Str_Ex(A1:A5,E1)Mã:Function Str_Ex(Rg As Range, ch As String) As Boolean With WorksheetFunction str_Ex = InStr(1, Join(.Transpose(Rg), ";"), ch) > 0 End With End Function
Em lo rằng cách dùng InStr sẽ dể có nguy cơ... nhầm
Ví dụ:
- Cell A1 chứa chuổi: Nguyễn Huỳnh Bảo Tâm
- Ta gõ vào E1 từ khóa: Huỳnh Bảo Tâm
- Hàm của anh nó ra kết quả = TRUE
-----------------------------------
Trong trường hợp yêu cầu tìm không chính xác (như tra từ điển) thì cách này chấp nhận được, ngược lại, để tìm chính xác thì em nghĩ nên dùng Find method hoặc hàm MATCH hay COUNTIF sẽ tốt hơn
Function Str_In(Rg As Range, ch As String)
Dim Clls As Range
Dim colUniqueNumbers As New Collection
Dim i, sl As Integer
On Error Resume Next
For Each Clls In Rg
colUniqueNumbers.Add Clls.Value, CStr(Clls.Value)
Next Clls
sl = colUniqueNumbers.Count
colUniqueNumbers.Add ch, ch
Str_In = sl = colUniqueNumbers.Count
End Function
Collection và Dictionary nhìn chung là khá giống nhau! Trước đây em đã từng xài, tuy nhiên, kể từ khi biết đến Dictionary thì em không còn xài đến Collection nữa, đơn giản vì em thấy Dictionary cho ta nhiều phương thức và thuộc tính để ta thoải mái lựa chọn hơnMình thích nó khác 1 chút để tham khảo, vậy thì ta chơi chiêu anh Duyệt mới giới thiệu xem sao (Cái này mình chưa xác định cách so sánh nên chưa phân biệt chữ thường và chữ hoa)
Cú pháp: =Str_In(A1:A10,E1)Mã:Function Str_In(Rg As Range, ch As String) Dim Clls As Range Dim colUniqueNumbers As New Collection Dim i, sl As Integer On Error Resume Next For Each Clls In Rg colUniqueNumbers.Add Clls.Value, CStr(Clls.Value) Next Clls sl = colUniqueNumbers.Count colUniqueNumbers.Add ch, ch Str_In = sl = colUniqueNumbers.Count End Function
Nói thật, cái này với dictionary là mình khá tin đấy nha.
Mình có câu hỏi thế này nhờ các bạn giải đáp giúp mình
Cầu hỏi nằm trong file luôn, các bạn download về rồi giúp mình nhé
Sub Tim()
On Error Resume Next
[f1:f100].ClearContents
For Each cls In [e1:e100].SpecialCells(2)
tmp = [a1:a100].Find(cls, LookAt:=1).Address
If tmp > 0 Then
cls(1, 2) = " co tai " & tmp
End If
tmp = Nothing
Next
End Sub
Em nhớ anh cũng có 1 tuyệt chiêu về hàm FILTER, sao anh không xuất chiêu nhỉ?Mình thích nó khác 1 chút để tham khảo
Hàm Filter có cũng dính trường hợp tìm kiếm lỏng lẻo như hàm Instr thôi. Mình Thấy hợp lý hơn cả là Collection và Dictionary. Thậm chí, Dictionary còn hỗ trợ phương thức kiểm tra quá hoàn hảo là Exist.Em nhớ anh cũng có 1 tuyệt chiêu về hàm FILTER, sao anh không xuất chiêu nhỉ?
Em nghĩ là áp dụng vào bài này cũng hay đây!
Em lo rằng cách dùng InStr sẽ dể có nguy cơ... nhầm
Ví dụ:
- Cell A1 chứa chuổi: Nguyễn Huỳnh Bảo Tâm
- Ta gõ vào E1 từ khóa: Huỳnh Bảo Tâm
- Hàm của anh nó ra kết quả = TRUE
-----------------------------------
Trong trường hợp yêu cầu tìm không chính xác (như tra từ điển) thì cách này chấp nhận được, ngược lại, để tìm chính xác thì em nghĩ nên dùng Find method hoặc hàm MATCH hay COUNTIF sẽ tốt hơn
Function Str_Ex(rg As Range, ch As String) As Boolean
Str_Ex = InStr(1, ";" & _
Join(WorksheetFunction.Transpose(rg), _
";") & ";", ";" & ch & ";") > 0
End Function
Không biết cái này có đúng ý bạn không ? (Tôi viết cho cả trường hợp cột E có thể là một danh sách)
PHP:Sub Tim() On Error Resume Next [f1:f100].ClearContents For Each cls In [e1:e100].SpecialCells(2) tmp = [a1:a100].Find(cls, LookAt:=1).Address If tmp > 0 Then cls(1, 2) = " co tai " & tmp End If tmp = Nothing Next End Sub
Thử ghi thế này xem sao nhé:Cho mình hỏi thêm chút
Mình thử đặt vùng kiểm tra ở sheet khác, nhưng không được
ví dụ: mình không đặt vùng kiểm tra ở [a1:a100] trong sheet đó mà mình đặt trong sheet2 chẵng hạn
nhưng mình dùng câu lệnh này mà ko chạy
không bít sai chổ nào
bạn coi lai mình với.
Mình dùng code này:
tmp = [sheet2.cells(1,1):sheet2.cells(100,1)].Find(cls, LookAt:=1).Address
Cho mình hỏi thêm chút
Mình thử đặt vùng kiểm tra ở sheet khác, nhưng không được
ví dụ: mình không đặt vùng kiểm tra ở [a1:a100] trong sheet đó mà mình đặt trong sheet2 chẵng hạn
nhưng mình dùng câu lệnh này mà ko chạy
không bít sai chổ nào
bạn coi lai mình với.
Mình dùng code này:
tmp = [sheet2.cells(1,1):sheet2.cells(100,1)].Find(cls, LookAt:=1).Address