GIúp code chọn 1 ký tự theo yêu cầu trong vùng chọn (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà GPE !. Cho em hỏi dùng code gì để mình select ô theo ký tự yêu cầu trong bảng tính. Ví dụ em muốn select tất cả các ô ký tự là "a" trong vùng B3:B23 . Xin chân thành cảm ơn

upload_2017-4-29_10-10-11.png
 
Em gửi File mọi người xem giúp em
 

File đính kèm

Upvote 0
Dùng code này thử xem
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find("a", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub
 
Upvote 0
Dùng code này thử xem
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find("a", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub

Code anh sai rồi. Chỉ bôi đen những ô nào chỉ có 1 ký tự "a" duy nhất thôi còn "ab" cũng không được bôi
 
Upvote 0
Code anh sai rồi. Chỉ bôi đen những ô nào chỉ có 1 ký tự "a" duy nhất thôi còn "ab" cũng không được bôi
Tôi thấy nó chọn đúng mà bạn, tức là ô nào chứa giá trị ab cũng chọn luôn mà. Còn nếu muốn chọn chính xác giá trị a không (không chọn giá trị ab) thì sửa code lại một chút.
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find("a", , xlValues, xlWhole, , , True)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub
 
Upvote 0
Sao không Filter "a"?
 
Upvote 0
Code anh sai rồi. Chỉ bôi đen những ô nào chỉ có 1 ký tự "a" duy nhất thôi còn "ab" cũng không được bôi
Sửa lại vầy.
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find(What:="a", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub
 
Upvote 0
Sửa lại vầy.
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find(What:="a", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub

@giaiphap:
Loại yêu cầu này, bạn không nên dùng 1 sub để giải quyết.
Cách tốt hơn là viết 1 function; nhận range (hoặc address) của vùng, string cần tìm, và options như tìm chính xác, case,...; function trả về một range là union các cells tìm được. Hàm chính chỉ gọi function này thôi. Và nó muốn select hay làm gì thì là chuyện dễ dàng.
 
Upvote 0
@giaiphap : viết code xong mà người nhận code có test không mà phán
là thấy chạy được rồi đó...

Ai chạy?
Toi thì chạy ngay từ đầu rồi. Chủ thớt chưa phân biệt được giữa "code chạy sai" và "hiểu lầm yêu cầu". Nói cho đúng hơn, đây cũng không phải trường hợp hiểu lầm yêu cầu. Mà chính xác là yêu cầu được trình bày kém minh bạch, nhìn cái ví dụ ở bài #1 là hết muốn thử.
Chủ thớt hỏi gần trăm đề tài rồi mà chưa nắm vững được cách trình bày yêu cầu.
 
Upvote 0
Không phải vậy đâu; Mà đó là giả tâm/mánh lới của người học hỏi đó mà!

Bài đầu đưa ra số liệu chỉ là A với B; nhưng bài sau thì phán câu xanh rờn:
"Code anh sai rồi. Chỉ bôi đen những ô nào chỉ có 1 ký tự "a" duy nhất thôi còn "ab" cũng không được bôi"
 
Upvote 0
Sửa lại vầy.
Mã:
Sub GPE()
Dim Rng As Range, c As Range, firstAddress As String
With Sheet1.Range("B3:B23")
    Set c = .Find(What:="a", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Set Rng = c
        Do
            Set c = .FindNext(c)
            If Not c Is Nothing Then Set Rng = Union(Rng, c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
        Rng.Select
    End If
End With
End Sub

Code nó báo lỗi anh ơi. Xem lại giúp em
upload_2017-4-30_8-59-38.png
 
Upvote 0
Chủ thớt này khó tính lắm, không bao giờ chấp nhận phương án 'b'.

Dạ thank anh không phải là em khó tính. mà tại Em em dùng từ chưa đủ để người ta hiểu. Lần sau em hỏi rõ ràng, và sẽ có hình ảnh rõ ràng. cảm ơn anh nhiều lắm. Chúc anh thật nhiều sức khỏe để chơi lẽ 30/4 1-5
 
Upvote 0
ANh ba tê giúp em đi. Thật ra e Muốn select những ô Nào có chử "a" để em ẩn cái dòng đó, để khi in ra dòng đó không xuất hiện. Thank a
Nếu từ đầu bạn hỏi cách ẩn dòng có chữ "a" thì xong rồi.
Select mà chẳng biết làm gì thì ai mà hiểu, mỗi người làm mỗi kiểu làm sao bạn áp dụng?
PHP:
Public Sub GPE()
Dim Cll As Range, R As Long
R = Range("B60000").End(xlUp).Row
For Each Cll In Range("B1:B" & R)
    If UCase(Cll) = "A" Then Cll.EntireRow.Hidden = True
Next Cll
End Sub
 
Upvote 0
Nếu từ đầu bạn hỏi cách ẩn dòng có chữ "a" thì xong rồi.
Select mà chẳng biết làm gì thì ai mà hiểu, mỗi người làm mỗi kiểu làm sao bạn áp dụng?
PHP:
Public Sub GPE()
Dim Cll As Range, R As Long
R = Range("B60000").End(xlUp).Row
For Each Cll In Range("B1:B" & R)
    If UCase(Cll) = "A" Then Cll.EntireRow.Hidden = True
Next Cll
End Sub
Vẫn câu hỏi cũ: Sao không dùng Filter? (mắc mớ gì phải For... Next?)
 
Upvote 0
Web KT

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

Back
Top Bottom