VBA – Viết Code lọc dữ liệu ?
Cám ơn mọi người
Kính gửi các anh chị.
Mình có một danh sách về tên người. Mình muốn gõ một số chữ thì được một danh sách của các dòng có chứa tên của chữ đó (Xem file đính kèm). như vậy phải làm sao?
Rất mong được các anh chị hỗ trợ.
Cám ơn mọi người
Thử đoạn code này xem có được không bạn!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer
Dim Kq(1 To 1000) As String
Application.ScreenUpdating = False
If Target.Address = "$E$12" Then
For i = 1 To Range("A65536").End(xlUp).Row
If InStr(1, Cells(i, 1).Value, Target.Value) Then
j = j + 1
Kq(j) = Cells(i, 1).Value
End If
Next i
Range("H9:H65536").ClearContents
For i = 1 To j
Cells(9 + i, 8).Value = Kq(i)
Next i
End If
Application.ScreenUpdating = True
End Sub
www.giaiphapexcel.com/diendan/threads/vba-vi%E1%BA%BFt-code-l%E1%BB%8Dc-d%E1%BB%AF-li%E1%BB%87u.80342/
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học
Bạn dùng code sau:
Trường hợp lọc tên Ngọc nhưng trong vùng lọc có tên Trần Ngọc Thiên Kim thì code của bạn sẽ liệt kê cả tên này ra trong khi ta chỉ muốn lọc những người tên là Ngọc, gõ ngọc thì code cũng không nhận dạng được để lọc??? Mình đề xuất code thế này :
Sub LocDK_Ten()
Dim Rng As Range, j As Long
Dim FrsAdd As String, Ten As String
Dim LastCell As Range, rngS As Range
With Sheet1
.Range("H10:H100").ClearContents
Ten = "* " & ..Value
Set LastCell = .Cells(.Rows.Count, 1).End(xlUp)
Set rngS = .Range(., LastCell)
Set Rng = rngS.Find(What:=Ten, after:=LastCell, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext)
If Rng Is Nothing Then
MsgBox "Khong có gia tri tim kiem trong vung"
Else
FrsAdd = Rng.Address
j = 9
Do
j = j + 1
.Cells(j, 8) = Rng
Set Rng = rngS.FindNext(after:=Rng)
Loop Until FrsAdd = Rng.Address
End If
End With
End Sub
Góp vui code này. Mặc dù thấy ngắn thế nhưng hiệu quả lắm nha.
Code này cũng được xếp vô dạng tuyệt chiêu nghen
Sub LOC()
= : = "*" &
.AdvancedFilter 2, ,
End Sub
Thử dùng hàm hỗ trợ thử xem. Đây là lần đầu tiền dùng hàm ghép với Sub, mong được anh chị góp ý
Sub LOC()
Dim data(), kq(1 To 1000, 1 To 1)
Dim i As Long, k As Long, dk As String
dk = UCase()
data = Range(, .End(3)).Value
For i = 1 To UBound(data)
If data(i, 1) <> "" Then
If UCase(tachten(data(i, 1))) = dk Then
k = k + 1
kq(k, 1) = (data(i, 1))
End If
End If
Next
.ClearContents
If k Then .Resize(k) = kq
End Sub
Function tachten(ten As Variant)
With CreateObject("vbscript.regexp")
.Pattern = ".*s"
tachten = .Replace(ten, "")
End With
End Function
Đó là vùng phụ để làm điều kiện lọc ý mà.
Code của anh Quang Hải như sau :
Bạn sửa lại dòng 4 :
dk = UCase()
thành dk = UCase(sheet2.)
Mình thấy sử dung Like có vẻ đơn giản hơn. Dhn46 mượn Code anh Hải để dùng Like
Thì ta dùng hàm Trim là được.
Vậy bạn test thử khi bỏ trim nhé. Hàm trên vẫn còn trim.
Từ bài này ra cái đố vui ấy mà. Xem dữ liệu là biết liền.
Vâng đúng là phải sửa anh ah. Voọc để biết thêm anh nhỉ?(Mấy cái này học có vẻ dễ hơn ADO anh Hai Lúa ah, nhìn anh viết ADO muốn nhưng chưa dám bước vào.)