Phương thức Find.

Liên hệ QC

mymichau

Thành viên hoạt động
Tham gia
28/11/06
Bài viết
172
Được thích
114
Xin giúp code về phương thức Find như trong file. Có gì sai mà chưa xử lý đươc. Xin cảm ơn nhiều
 

File đính kèm

  • Book2.xlsm
    15.3 KB · Đọc: 18
Bạn xem thử
Mã:
Sub Macro2()
Dim m, n As Long
With Sheet1
For m = 2 To 7
For n = 11 To 20
If InStr(.Cells(m, n), .Range("D1").Value) <> 0 Then
.Cells(m, n) = Empty
'.Cells(m, n) = Replace(.Cells(m, n), .Range("D1").Value, "")
End If
Next n
Next m
End With
End Sub
 
Chuẩn của phương thức FIND() nè, mại zô:
PHP:
Sub gpeFind()
Dim Rng As Range, sRng As Range
Dim MyAdd As String:                       Dim J As Long

Set Rng = [K3].CurrentRegion
Set sRng = Rng.Find([D2].Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
    MsgBox "Nothing"
Else
    MyAdd = sRng.Address
    Do
        J = J + 1
        MsgBox sRng.Address, , Str(J)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End Sub
 
Chuẩn của phương thức FIND() nè, mại zô:
PHP:
Sub gpeFind()
Dim Rng As Range, sRng As Range
Dim MyAdd As String:                       Dim J As Long

Set Rng = [K3].CurrentRegion
Set sRng = Rng.Find([D2].Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
    MsgBox "Nothing"
Else
    MyAdd = sRng.Address
    Do
        J = J + 1
        MsgBox sRng.Address, , Str(J)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
End Sub
Bài đã được tự động gộp:

Xin bác SA_DQ giải thích giùm vì sao với file của mình lại sai khi tìm số 1 hoặc số 2. Xin cám ơn
 
File của bạn khi bấm vô nút lệnh nó vẫn làm đúng 1 phần theo iêu cầu của bạn, nên số cần tìm có trong vùng chọn;
Nếu số đó không có trong vùng chọn sẽ báo lỗi.
Còn trường hợp nữa: Nếu trong vùng ta có hơn 1 số cần xóa thì macro của bạn chỉ xóa được duy nhất 1 lần

Trong phương thức tìm FINDNEXT() để tìm tiếp thì bạn sẽ gặp lỗi rất to là số liệu tìm thấy lần đầu đã bị xóa đi rồi thì không có căn cứ để tìm tiếp & thoát ra khỏi quá trình tìm kiếm này.
Bạn nên đọc kỹ thêm về tổng quan phương thức FIND() có trên diễn đàn thêm.

Macro #3 chỉ mới bạn cho bạn những địa chỉ mà nó đã tìm thấy dữ liệu;
Nếu muốn xóa các dữ liệu tìn thấy thì phải:
Khai báo thêm 1 biến kiểu Range; Ngõ hầu lưu những ô cần xóa dữ liệu
Sau khi kết thúc chu trình tìm kiếm ta xóa những địa chỉ trong tham biến vừa khai báo này.

PHP:
Sub gpeTimVaXoa()
Dim Rng As Range, sRng As Range, dRg As Range
Dim MyAdd As String:                       Dim J As Long

Set Rng = [K3].CurrentRegion
Set sRng = Rng.Find([D1].Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
    MsgBox "Nothing"
Else
    MyAdd = sRng.Address
    Do
        If dRg Is Nothing Then
            Set dRg = sRng
        Else
            Set dRg = Union(dRg, sRng)
        End If
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    MsgBox dRg.Cells.Count
    If Not dRg Is Nothing Then dRg.Value = Space(0)
End If
End Sub
 
Lần chỉnh sửa cuối:
Cám ơn Bác SA_DQ. Mình chưa thông gì mấy, nhưng với code của Bác mình đã ứng dụng theo yêu cầu thì hoàn toàn chuẩn. Cám ơn Bác SA_DQ nhiều lắm, đúng là cao thủ.
 

File đính kèm

  • TimXoa.xlsm
    16.4 KB · Đọc: 5
Web KT
Back
Top Bottom