dungtd0106
Thành viên mới

- Tham gia
- 22/6/11
- Bài viết
- 5
- Được thích
- 0
Em có 1 file như trên giờ em muốn tìm kiếm khi nhập vào(shaper-profile name:FiberHome1) FiberHome1 sẽ tìm được Interface là 1/1/1/1/8/1/1 còn khi nhập MyTv12M sẽ tìm được interface 1/1/1/1/8/1/4 bác nào biết chỉ em với em mới bắt đầu làm VBA
dữ liệu ít thì làm thế được bác ah!! của em dữ liệu nhiều như thế này cơ nếu đẩy ra 1 cột thì thủ công quá
gio em muon cat chuoi ( interface 1/1/1/1/13/1/1) chi lay la 1/1/1/1/13 thi dung ham nao vay pro em thu left nhung khi so cuoi khong phai la 13 ma la 9 thi toan mat mot ky tu!! hic
Bạn cần nói rõ, cắt từ sau kí tự "/" thứ 4 đến "/" thứ 5; Chứ lỡ trong mấy cái con "1" kia, có khi nhập chung thành "11" thì chết sao?sau khi lọc được ra kết quả là interface 1/1/1/1/3/1/1 giờ em chỉ muốn cắt thành kq là 1/1/1/1/3 em dùng hàm left thì được nhưng nó bắt chính xác ký tự cắt khi mà ký tự cuối cùng là số 3 thì đúng mà nó lớn hơn 9 như 1/1/1/1/10 thì lại phải sửa hàm left lại bác có hàm nào không phải chỉnh không chỉ em với!!
Option Explicit
Sub FindUp()
Dim Rng As Range, sRng As Range
Dim StrC As String
Set Rng = Range([A1], [A1].End(xlDown))
StrC = InputBox("Chuoi Càn Tìm Cua Ban là:", "GPE.COM Xin Chào Ban!", "FiberHome")
Set sRng = Rng.Find(StrC, , xlFormulas, xlPart, , xlNext)
If Not sRng Is Nothing Then
Set Rng = Range(sRng, Rng(1))
Set sRng = Rng.Find("/", , , , , xlPrevious)
If Not sRng Is Nothing Then MsgBox sRng.Row, , sRng.Value
End If
End Sub
sau khi đọc kỹ phần đỏ đỏ mới thấy phát sinh thêm nhiều thứ về xử lý chuỗisau khi lọc được ra kết quả là interface 1/1/1/1/3/1/1 giờ em chỉ muốn cắt thành kq là 1/1/1/1/3 em dùng hàm left thì được nhưng nó bắt chính xác ký tự cắt khi mà ký tự cuối cùng là số 3 thì đúng mà nó lớn hơn 9 như 1/1/1/1/10 thì lại phải sửa hàm left lại bác có hàm nào không phải chỉnh không chỉ em với!!
Sub GPE_TimTuKhoa()
Dim vung As Range, Rng As Range, TuKhoa As Range
Dim FirstAddress As String, n As Long, i As Long
Range("D4:G1000").ClearContents
Set vung = Sheets("Sheet1").Range("B1:B65000")
Set TuKhoa = Sheets("Sheet1").Range("E2")
Set Rng = vung.Find(TuKhoa.Value, After:=Range("B1"), LookIn:=xlValues, LookAt:=xlPart)
If Not Rng Is Nothing Then
FirstAddress = Rng.Address
Do
Range("D" & 4 + n) = Rng.Address 'cot vi tri
Range("E" & 4 + n) = Rng.Value 'gia tri
For i = Rng.Row To 1 Step -1
If Range("B" & i) Like "*" & "interface" & "*" Then
Range("F" & 4 + n) = [COLOR=#ff0000]XyLyChuoi[/COLOR](Range("B" & i).Value) 'final result
Range("G" & 4 + n) = Range("B" & i).Value 'Ket qua (Interface)
GoTo Next_
End If
Next
Next_:
Set Rng = vung.FindNext(Rng)
n = n + 1
Loop While FirstAddress <> Rng.Address
End If
Set vung = Nothing: Set TuKhoa = Nothing: Set Rng = Nothing
End Sub
Function [COLOR=#ff0000]XyLyChuoi[/COLOR](giatri As String) As String
Dim Chuoi As String
Dim wsFunc As WorksheetFunction
Set wsFunc = Application.WorksheetFunction
'loai. bo? InterFace + khoang? trang' 2 ben
Chuoi = wsFunc.Trim(wsFunc.Substitute(UCase(giatri), "INTERFACE", ""))
'lay gia tri. phia' truoc tinh' tu` dau' / thu' 5 (tu` trai' sang phai)
XyLyChuoi = Left(Chuoi, wsFunc.Find("/", Chuoi, _
wsFunc.Find("/", Chuoi, _
wsFunc.Find("/", Chuoi, _
wsFunc.Find("/", Chuoi, _
wsFunc.Find("/", Chuoi) + 1) + 1) + 1) + 1) - 1)
End Function
Như mình thấy nếu hàm xulychuoi mà viết bằng Reg Exp sẽ dễ dàng hơnsau khi đọc kỹ phần đỏ đỏ mới thấy phát sinh thêm nhiều thứ về xử lý chuỗi
(như bác chanhTQ đặt vấn đề là chính xác hơn khi dùng Left, Len)
Function XyLyChuoi1(giatri As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = "\d+/\d+/\d+/\d+/\d+"
XyLyChuoi1 = .Execute(giatri).Item(0)
End With
End Function