Cần giúp tự động rút gọn danh sách khi gõ chữ "Lê Thị"

Liên hệ QC

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có một File Excel có dữ liệu như sau:

ISDp5Cw.png


Tại ô B3 gõ vào chữ (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn chỉ còn những ô chứa chữ và tô màu xanh như vầy (Những dòng không chứa chữ thì tự động ẩn đi):

k2LggEg.png


Vẫn tại ô B3 gõ tiếp chữ Thị (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn tiếp chỉ còn những ô chứa chữ Lê Thị và tô màu xanh như vầy (Những dòng không chứa chữ Lê Thị thì tự động ẩn đi):

3auXowo.png


=> Có cách nào làm được những công đoạn như trên hay không?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
 

File đính kèm

Lần chỉnh sửa cuối:
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có một File Excel có dữ liệu như sau:

=> Có cách nào làm được những công đoạn như trên hay không?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
Bài dạng này tôi cũng làm nhiều lần rồi. Nhưng vấn đề là sử dụng code nha bạn.
 
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:

Tại ô B3 gõ vào chữ (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn chỉ còn những ô chứa chữ và tô màu xanh như vầy (Những dòng không chứa chữ thì tự động ẩn đi):

Vẫn tại ô B3 gõ tiếp chữ Thị (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn tiếp chỉ còn những ô chứa chữ Lê Thị và tô màu xanh như vầy (Những dòng không chứa chữ Lê Thị thì tự động ẩn đi):

=> Có cách nào làm được những công đoạn như trên hay không?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Target.Address = "$B$3" Then
        For i = 4 To 35
            Rows(i).EntireRow.Hidden = Not UCase(Cells(i, 2)) Like UCase([B3]) & "*"
        Next
    End If
End Sub
thay For ... Next thành Do ... Loop nếu số dòng không xác đinh.
 
ủa bài này sử dụng code làm sao vậy anh ? anh chỉ em làm với . cảm ơn anh }}}}}}}}}}}}}}}
Lại chơi chiêu nhau nữa rồi. Viết xong rồi nhưng cũng giống #4 nên không post. Chàng gọi thì "thiếp" trả lời vậy:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$3" Then
Dim Dk, Arr(), i
  Arr = Range([B4], [B65536].End(3)).Value
  Dk = [B3].Value
    If Dk = "" Then Exit Sub
     For i = UBound(Arr) To LBound(Arr) Step -1
        If Not UCase(Arr(i, 1)) Like "*" & UCase(Dk) & "*" Then
            Rows(i + 3 & ":" & i + 3).EntireRow.Hidden = True
        End If
     Next i
End If
Application.ScreenUpdating = True
End Sub
P/s: Có thể thay bằng hàm Instr.
 
Vẫn For Next mà xác định dòng cuối thì vẫn ok mà. Cần gì Do Loop nhỉ? Vả lại tác giả muốn gõ tiếp tục thì nó dò luôn
Chứ Worksheet_Change ở trên vẫn phải enter....:-=

-------------------------
P/s: cơ mà bài này dùng Advanced Filter được hok ta? ai thử xem phát...
Chàng có ý tưởng thì chàng phải phát huy đi chứ.:drinks::drinks::drinks::drinks:
 
Cho em hỏi làm như vậy với datavalidition. Hoặc cho em xin link bài hướng dẫn cũng được ạ
 
Vẫn For Next mà xác định dòng cuối thì vẫn ok mà. Cần gì Do Loop nhỉ? Vả lại tác giả muốn gõ tiếp tục thì nó dò luôn
Chứ Worksheet_Change ở trên vẫn phải enter....:-=
muốn không phải Enter thì gắn một cái TextBox vào ô B3 rồi dùng sự kiện Text_Change.
 
Insert 1 cái TextBox (thuộc ActiveX control) ấy.

Sau đó xài code này cho nó
Mã:
Option Explicit
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
If TextBox1.Text <> Empty Then
        Range("A3:B1000").AdvancedFilter 1, [D1:D2]
        [D1].Value = [B3].Value
        [D2].Value = "=""*""&B3&""*"""
        Range("A3:B1000").AdvancedFilter 1, [D1:D2]
        [D1:D2].Value = Empty
    Else
        Range("A3:B1000").AdvancedFilter 1, [D1:D2]
    End If
Application.ScreenUpdating = True
End Sub
Code này hay đấy. Nhưng chưa được tô màu như vầy:

3auXowo.png


=> Thì phải làm sao nhỉ?
 
Góp vui bằng file này xem sao (Mở bằng excel 2010 thì chạy tốt)
 

File đính kèm

xin lỗi spam để xem được bài viết cuối , hiện tại hổng thấy nó đâu hết
 
Người ta đã biết sử dụng code. Tất nhiên cái đơn giản này họ đã biết rồi. Chí yếu là làm cho thao tác nó nhanh hơn...
Hok lẻ bạn nghỉ code nó chậm hơn là bạn phải đi AutoFilter, rồi lê chuột đi vào cái nơi mình cần gõ và gõ gõ....rồi Ok thì excel nó mới lọc ah??? Bạn nghĩ sao mà nói chỉ là ý tưởng của chủ topic để cho mọi người phát huy???

thì khả năng phát huy của thaitdtt là bấm vào nút Filter rồi ghi Lê Thi* . Đó cũng là cách ông cha ta truyền lại
Bạn nào mạnh mẽ hơn thì có thể phát huy sở trường khác
sao bạn khó khăn thế nhờ ?
 
Code này hay đấy. Nhưng chưa được tô màu như vầy:

=> Thì phải làm sao nhỉ?
Bạn tùy biến theo cái bạn muốn, chỉ làm tiếp phần trên và tô màu cho bạn:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$3" Then
Dim Dk, Arr(), i
  Arr = Range([B4], [B65536].End(3)).Value
  Dk = [B3].Value
    If Dk = Empty Then Cells.EntireRow.Hidden = False
     For i = UBound(Arr) To LBound(Arr) Step -1
        If Not UCase(Arr(i, 1)) Like "*" & UCase(Dk) & "*" Then
            Rows(i + 3).EntireRow.Hidden = True
           Else
            Range("B" & i + 3).Characters(1, Len(Dk)).Font.Color = vbRed
        End If
     Next i
   If Dk = Empty Then [B4:B10000].Font.Color = vbBlack
End If
Application.ScreenUpdating = True
End Sub
P/s: Muốn tô chính xác khi chỉ cần gõ tên lót thì code vẫn cần chỉnh lại.
 
Lần chỉnh sửa cuối:
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có một File Excel có dữ liệu như sau:

ISDp5Cw.png


Tại ô B3 gõ vào chữ (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn chỉ còn những ô chứa chữ và tô màu xanh như vầy (Những dòng không chứa chữ thì tự động ẩn đi):

k2LggEg.png


Vẫn tại ô B3 gõ tiếp chữ Thị (nhưng chưa gõ phím Enter để kết thúc => nghĩa là con chuột vẫn nhấp nháy tại ô B3) thì danh sách tự động rút gọn tiếp chỉ còn những ô chứa chữ Lê Thị và tô màu xanh như vầy (Những dòng không chứa chữ Lê Thị thì tự động ẩn đi):

3auXowo.png


=> Có cách nào làm được những công đoạn như trên hay không?
Mong các Anh chị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
Mã:
With Cells(i + 3, 2)
        .Characters(InStr(Cells(i + 3, 2), Dk), Len(Dk)).Font.Color = vbRed
    End With
ơ cái đoạn tô màu anh Hùng có thể thêm đoạn này,
 
Code chưa bẫy lỗi nếu...chỉ dòng đầu tiên tìm được (dòng 4 ấy), muốn tìm nữa thì lỗi............kaka...
Không phải chưa bẫy mà đói quá, tranh thủ post bài đi ăn tô mì bò (mà bạn hiền cũng không tha)
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$3" Then
Cells.EntireRow.Hidden = False
Dim Dk, Arr(), i
  Arr = Range([B4], [B65536].End(3)).Value
  Dk = [B3].Value
    If Dk = Empty Then [B4:B10000].Font.Color = vbBlack
     For i = UBound(Arr) To LBound(Arr) Step -1
        If Not UCase(Arr(i, 1)) Like "*" & UCase(Dk) & "*" Then
            Rows(i + 3).EntireRow.Hidden = True
           Else
            Range("B" & i + 3).Characters(1, Len(Dk)).Font.Color = vbRed
        End If
     Next i
    If Dk = Empty Then [B4:B10000].Font.Color = vbBlack
End If
Application.ScreenUpdating = True
End Sub
 
Code vẫn chưa tô màu theo ký tự cần gõ...bạn hiền cần thêm hàm InStr nữa....kakaka
Biết thế nào cũng có người hỏi như vậy mà. Cho nên mới có chú thích ở trên là chủ topic cần mới chỉnh thêm. Mà hình như bạn "hành" vợ chưa đủ hả ta.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$3" Then
Cells.EntireRow.Hidden = False
Dim Dk, Arr(), i
  Arr = Range([B4], [B65536].End(3)).Value
  Dk = [B3].Value
    If Dk = Empty Then [B4:B10000].Font.Color = vbBlack
     For i = UBound(Arr) To LBound(Arr) Step -1
        If Not UCase(Arr(i, 1)) Like "*" & UCase(Dk) & "*" Then
            Rows(i + 3).EntireRow.Hidden = True
           Else
            Range("B" & i + 3).Characters(InStr(1, Range("B" & i + 3), Dk, 1), Len(Dk)).Font.Color = vbRed
        End If
     Next i
    If Dk = Empty Then [B4:B10000].Font.Color = vbBlack
End If
Application.ScreenUpdating = True
End Sub
 
Web KT

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

Back
Top Bottom