- Tham gia
- 19/5/19
- Bài viết
- 116
- Được thích
- 9
Sử dụng hàm InStr để tìm vị trí dấu "*" hoặc dấu ";"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
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
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
Chạy từng ô chứ, tôi có ghi là ô được duyệt mà. Thử code sau xem:
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
Chạy từng ô chứ, tôi có ghi là ô được duyệt mà. Thử code sau xem:
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 á.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
if Rg0 is nothing then
Set Rg0 = sRng
Else
Set Tg0 = Union(Rg0, sRng)
End If
If Not Rg0 Is Nothing Then Rg0.Select
Tìm thấy rồi liệt kê vào 1 cột khác.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
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
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ắmMuố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
Bạn tìm thấy giá trị cần tìm, Select rồi làm gì tiếp theo?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
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
Bạn tìm thấy giá trị cần tìm, Select rồi làm gì tiếp theo?
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
Dim Cls As Range
For Each Cls In Rg0
Cls.Select: MsgBox "Thích Không?",,Cls.Address
next Cls
Giải pháp: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.
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
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
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
Code trên đã Select rồi.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ỉ
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
ý 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.
Bạn ở đây gần 10 năm rồi mà còn hỏi câu này à?Bạn tìm thấy giá trị cần tìm, Select rồi làm gì tiếp theo?
Hồi nào giờ tôi chỉ dùng Conditional Formatting.....
Tô mầu cho họ nhìn thấy để họ sửa thôi
Nhưng đây là họ hỏi trong "Lập trình với Excel" mà bác.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ẹ.
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, ...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.