GIúp code tìm kiếm ký tự * và ; trong 1 vùng (1 người xem)

Liên hệ QC

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

hondacrv2019

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
19/5/19
Bài viết
116
Được thích
9
Chào cả nhà GPE. em cần 1 đoạn code để tìm kiếm trong 1 vùng nếu ô nào có dấu Sao "*" hoặc dấu chấm phẩy ";" thì Select các ô đó. Em xin chân thành cảm ơn
1570866006554.png
 
Chào cả nhà GPE. em cần 1 đoạn code để tìm kiếm trong 1 vùng nếu ô nào có dấu Sao "*" hoặc dấu chấm phẩy ";" thì Select các ô đó. Em xin chân thành cảm ơn
View attachment 226542
Sử dụng hàm InStr để tìm vị trí dấu "*" hoặc dấu ";"
Ví dụ:
Mã:
If InStr(ô được duyệt,"*") or InStr(ô được duyệt,";") Then
    ' ô được duyệt .Select hoặc thực thi lệnh nào đó.
End If
 
Upvote 0
Upvote 0
Xài tạm cách cùi bắp này:
PHP:
Option Explicit
Sub TimKyTuDacBiet()
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 
 Set Rng = [A3].CurrentRegion
 Set sRng = Rng.Find("*", , xlFormulas, xlPart)
 If sRng Is Nothing Then
    MsgBox "Nothing"
 Else
    MyAdd = sRng.Address
    Do
        If InStr(sRng.Value, "*") Then MsgBox sRng.Address
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
End Sub
 
Upvote 0
Chạy từng ô chứ, tôi có ghi là ô được duyệt mà. Thử code sau xem:
Mã:
Sub Find_First()
Dim i As Long, Tmp As String
For i = 1 To 10
    Tmp = Cells(i, 1).Value
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay " & Tmp
    End If
Next i
End Sub
Mà chạy thử ít thôi (chục dòng), chạy hàng ngàn dòng mà dùng MsgBox là trúng số luôn á.
 
Upvote 0
Chạy từng ô chứ, tôi có ghi là ô được duyệt mà. Thử code sau xem:
Mã:
Sub Find_First()
Dim i As Long, Tmp As String
For i = 1 To 10
    Tmp = Cells(i, 1).Value
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay " & Tmp
    End If
Next i
End Sub
Mà chạy thử ít thôi (chục dòng), chạy hàng ngàn dòng mà dùng MsgBox là trúng số luôn á.

Code chạy ok rồi đó anh. Anh có thể làm cách nào đừng hiện thông báo mà Select dòng có *; luôn đi. Do bảng tính em 10.000 dòng nó hiện em lại đi kiếm 1 lần nữa
 
Upvote 0
Muốn chương trình sau đóa chọn các ơ có chứa ký tự đó thì khi tìm ra ta ấn nó vô tham biến kiểu Range ( Rg0) như
Mã:
if Rg0 is nothing then
    Set Rg0 = sRng
Else
    Set Tg0 = Union(Rg0, sRng)
End If 
If Not Rg0 Is Nothing Then Rg0.Select
 
Upvote 0
Code chạy ok rồi đó anh. Anh có thể làm cách nào đừng hiện thông báo mà Select dòng có *; luôn đi. Do bảng tính em 10.000 dòng nó hiện em lại đi kiếm 1 lần nữa
Tìm thấy rồi liệt kê vào 1 cột khác.
Mã:
Sub Find_First()
Dim i As Long, sAr As Variant, n As Long, rAr As Variant
sAr = Sheet1.Range("A1:A10000").Value2
ReDim rAr(1 To UBound(sAr, 1), 1 To 1)
Sheet1.Range("B1:B10000").ClearContents
For i = 1 To UBound(sAr, 1)
    If InStr(sAr(i, 1), "*") Or InStr(sAr(i, 1), ";") Then
        n = n + 1: rAr(n, 1) = sAr(i, 1)
    End If
Next i
If n Then Sheet1.Range("B1").Resize(n) = rAr
End Sub
 
Upvote 0
Muốn chương trình sau đóa chọn các ơ có chứa ký tự đó thì khi tìm ra ta ấn nó vô tham biến kiểu Range ( Rg0) như
if Rg0 is nothing then
Em gà mờ còn non chưa hiểu. bác giúp em tìm kiếm xong rồi Select lần lượt từ trên xuống dưới giúp em với. em cảm ơn bác nhiều lắm
 
Upvote 0
Upvote 0
Tìm thấy rồi liệt kê vào 1 cột khác.
Mã:
Sub Find_First()
Dim i As Long, sAr As Variant, n As Long, rAr As Variant
sAr = Sheet1.Range("A1:A10000").Value2
ReDim rAr(1 To UBound(sAr, 1), 1 To 1)
Sheet1.Range("B1:B10000").ClearContents
For i = 1 To UBound(sAr, 1)
    If InStr(sAr(i, 1), "*") Or InStr(sAr(i, 1), ";") Then
        n = n + 1: rAr(n, 1) = sAr(i, 1)
    End If
Next i
If n Then Sheet1.Range("B1").Resize(n) = rAr
End Sub


Không phải vậy bác. ý em không cần phải Lọc ra 1 vùng khác. ý em là Select lại lần lượt từ trên xuống dưới. Để em sữa lại những tên hàng đó luôn. Bác chỉ cần code lại thay vì hiện thông báo. thì Select những dòng nào có dấu * và ; thôi. Bác giúp em với. em xin cảm ơn
Bài đã được tự động gộp:

Bạn tìm thấy giá trị cần tìm, Select rồi làm gì tiếp theo?

Select dòng đó để em tự sửa lại tên hàng khác. Cái việc đó cá nhân của em mà. Bác chỉ cần select dòng đó thôi.
 
Upvote 0
Em gà mờ còn non chưa hiểu. bác giúp em tìm kiếm xong rồi Select lần lượt từ trên xuống dưới giúp em với. em cảm ơn bác nhiều lắm
PHP:
Dim Cls As Range
For Each Cls In Rg0
   Cls.Select:        MsgBox "Thích Không?",,Cls.Address
next Cls
 
Upvote 0
Không phải vậy bác. ý em không cần phải Lọc ra 1 vùng khác. ý em là Select lại lần lượt từ trên xuống dưới. Để em sữa lại những tên hàng đó luôn. Bác chỉ cần code lại thay vì hiện thông báo. thì Select những dòng nào có dấu * và ; thôi. Bác giúp em với. em xin cảm ơn
Bài đã được tự động gộp:



Select dòng đó để em tự sửa lại tên hàng khác. Cái việc đó cá nhân của em mà. Bác chỉ cần select dòng đó thôi.
Giải pháp:
1. Tìm thấy thì đưa qua 1 cột khác, từ cột đó bạn sửa ở 1 cột kế bên, thêm 1 code khác thay thế giá trị sửa lại.
2. Chạy code, tìm thấy giá trị đầu tiên, dừng lại cho bạn sửa, tiếp tục chạy code ...
Mã:
Sub Find_FirstA()
Dim i As Long, Tmp As String
For i = 1 To 10
    Tmp = Cells(i, 1).Value
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay " & Tmp
        Cells(i, 1).Select
        Exit Sub
    End If
Next i
End Sub
 
Upvote 0
Giải pháp:
1. Tìm thấy thì đưa qua 1 cột khác, từ cột đó bạn sửa ở 1 cột kế bên, thêm 1 code khác thay thế giá trị sửa lại.
2. Chạy code, tìm thấy giá trị đầu tiên, dừng lại cho bạn sửa, tiếp tục chạy code ...
Mã:
Sub Find_FirstA()
Dim i As Long, Tmp As String
For i = 1 To 10
    Tmp = Cells(i, 1).Value
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay " & Tmp
        Cells(i, 1).Select
        Exit Sub
    End If
Next i
End Sub


Vậy bác co thểm thêm dòng tọa độ ổ vào code được không bác
Mã:
Sub Find_First()
Dim i As Long, Tmp As String
For i = 1 To 5000  ' so dong can tim 1 den 5000 dong
    Tmp = Range("a" & i).Value  ' cot A
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay :   " & Tmp
    End If
Next i
End Sub


Thay vì Msbox hiện ( Đã tìm thấy : ABC* ) thì bây giờ bác sữa lại ( Đã tìm thấy : ABC* , A10 ) A10 là ô chưa ô đó để có gì em tìm lại trên thanh địa chỉ
 
Upvote 0
Vậy bác co thểm thêm dòng tọa độ ổ vào code được không bác
Mã:
Sub Find_First()
Dim i As Long, Tmp As String
For i = 1 To 5000  ' so dong can tim 1 den 5000 dong
    Tmp = Range("a" & i).Value  ' cot A
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay :   " & Tmp
    End If
Next i
End Sub


Thay vì Msbox hiện ( Đã tìm thấy : ABC* ) thì bây giờ bác sữa lại ( Đã tìm thấy : ABC* , A10 ) A10 là ô chưa ô đó để có gì em tìm lại trên thanh địa chỉ
Code trên đã Select rồi.
Sửa 1 chút MsgBox
Mã:
Sub Find_FirstA()
Dim i As Long, Tmp As String
For i = 1 To 10
    Tmp = Cells(i, 1).Value
    If InStr(Tmp, "*") Or InStr(Tmp, ";") Then
        MsgBox "Da tim thay " & Tmp & " " & Cells(i, 1).Address(0,0)
        Cells(i, 1).Select
        Exit Sub
    End If
Next i
End Sub
 
Upvote 0
Ý người ta rõ mà. Người ta muốn sửa những ô có * hoặc ;. Do dò bằng mắt 10 000 ô hơi mệt nên người ta muốn "nổi bật" chúng để nhìn thấy ngay. Tuy người ta viết là Select nhưng trong hình người ta tô mầu đỏ. Vậy thì tìm thấy thì tô mầu đỏ cho ô thôi.
Dùng Msgbox thì nếu nó tìm thấy 500 kết quả thì đóng Msgbox mệt nghỉ. Nếu dùng Select + Exit Sub thì chạy sub 500 lần?

Tô mầu cho họ nhìn thấy để họ sửa thôi
ý em là Select lại lần lượt từ trên xuống dưới. Để em sữa lại những tên hàng đó luôn.

Select dòng đó để em tự sửa lại tên hàng khác.
 
Upvote 0
Bạn tìm thấy giá trị cần tìm, Select rồi làm gì tiếp theo?
Bạn ở đây gần 10 năm rồi mà còn hỏi câu này à?
Nếu lấy code phải trả tiền thì người ta mới cần tính trước "làm gì tiếp theo"
Ở đây, lấy code quá dễ cho nên người ta chỉ việc đưa ra bất cứ ý tưởng nào nảy ra trong đầu, xài hổng được thì bỏ thôi.

....
Tô mầu cho họ nhìn thấy để họ sửa thôi
Hồi nào giờ tôi chỉ dùng Conditional Formatting.
Sửa xong thì xoá bỏ hoặc chuyển nó qua vùng khác cho nhẹ.
 
Upvote 0
Hồi nào giờ tôi chỉ dùng Conditional Formatting.
Sửa xong thì xoá bỏ hoặc chuyển nó qua vùng khác cho nhẹ.
Nhưng đây là họ hỏi trong "Lập trình với Excel" mà bác.

Có nhiều người nghe nói là VBA kinh lắm. Chạy nhanh, chạy nhiều mà không biết mệt, không thấy mỏi chân mỏi tay, nên nhiều cái chỉ cần làm vài thao tác nhưng cũng nhờ viết code. Bản thân có viết đâu. Toàn nhờ người khác cầy hộ thì tội gì không làm vài chầu bia, rung đùi chờ kết quả dâng tận nơi?
 
Upvote 0
Có nhiều người biết là GPE nghiện code lắm. Code nhanh, code nhiều mà không biết mệt, không thấy mỏi chân mỏi tay, ...

:p:p:p

Chắc nên đổi tên diễn đàn thành GPEBN (Excel bấm nút)
 
Upvote 0
Bạn ở đây gần 10 năm rồi mà còn hỏi câu này à?
Nếu lấy code phải trả tiền thì người ta mới cần tính trước "làm gì tiếp theo"
Ở đây, lấy code quá dễ cho nên người ta chỉ việc đưa ra bất cứ ý tưởng nào nảy ra trong đầu, xài hổng được thì bỏ thôi.
Em cũng muốn đưa giải pháp (#2) mà thấy bạn ấy chưa rành, em gợi ý thêm mà vẫn chưa xong, ...
 
Upvote 0
Web KT

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

Back
Top Bottom