[Giúp đỡ] Viết code lấy từ chuỗi ký tự @ sang bên phải

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
711
Được thích
93
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Em có một loại chuỗi được phân tách bởi ký tự @ trong chuỗi. Mạn phép nhờ anh chị giúp đỡ viết code lấy phần chuỗi bên phải sau chữ @ sang chuỗi mới
VD:
Chuỗi ban đầu: Toilaai@chuamoibiet
Sau khi tách: chuamoibiet
Cám ơn anh chị
 
Cám ơn các anh em đã viết được rồi ạ
Mã:
Public Function Rightafter(s As String) As String
     
    Rightafter = Right(s, Len(s) - Application.WorksheetFunction.Find("@", s))
     
End Function


Public Function LeftBefore(s As String) As String
     
    LeftBefore = Left(s, Application.WorksheetFunction.Find("@", s) - 1)
     
End Function
 
Lần chỉnh sửa cuối:
Dim ViTrí As Byte

ViTrí = InSTr( ChuoiBanDau, "@")

ChuoiMoi = Mid(ChouiBanDau, ViTrí + 1, Len( ChuoiBanDau)
 
Em có một loại chuỗi được phân tách bởi ký tự @ trong chuỗi. Mạn phép nhờ anh chị giúp đỡ viết code lấy phần chuỗi bên phải sau chữ @ sang chuỗi mới
VD:
Chuỗi ban đầu: Toilaai@chuamoibiet
Sau khi tách: chuamoibiet
Cám ơn anh chị

Bạn thử dùng Function này xem:

Public Function Tach(rg As Range) As String
For i = 1 To Len(rg.Value)
If Mid(rg.Value, i, 1) = "@" Then
Tach = Right(rg.Value, Len(rg.Value) - i)
End If
Next i


End Function
 
Bạn thử dùng Function này xem:

Public Function Tach(rg As Range) As String
For i = 1 To Len(rg.Value)
If Mid(rg.Value, i, 1) = "@" Then
Tach = Right(rg.Value, Len(rg.Value) - i)
End If
Next i


End Function

Cái này mà For... Next gì chứ! Trên bảng tính bạn làm thế nào thì giải thuật trong VBA y chang vậy luôn
Ngoài ra tác giả còn chưa cho biết: Trường hợp không tìm thấy "@" thì LEFT lấy cái gì và RIGHT lấy cái gì
 
Cái này mà For... Next gì chứ! Trên bảng tính bạn làm thế nào thì giải thuật trong VBA y chang vậy luôn
Ngoài ra tác giả còn chưa cho biết: Trường hợp không tìm thấy "@" thì LEFT lấy cái gì và RIGHT lấy cái gì

Chắc tại đang học về For - Next nên con bị nghiền cái này đôi chút đâm ra hơi lạm dụng. Với lại lúc đầu con cũng không định dùng For-

Next đâu, lúc đầu con định thế này cơ : Tach = Right(rg.Value, Len(rg.Value) - find("@",rg.value)) dựa trên đúng quan điểm dùng hàm trên bảng tính

thế nào thì áp dụng vào VBA như thế, giống như chú nói đấy, nhưng cách trên không được nên mới quay ra dùng

For - Next, sau đó con mới biết phải thêm từ khóa
worksheetfunction. vào trước hàm Find mới được.
 
Lần chỉnh sửa cuối:
Chắc tại đang học về For - Next nên con bị nghiền cái này đôi chút đâm ra hơi lạm dụng. Với lại lúc đầu con cũng không định dùng For-

Next đâu, lúc đầu con định thế này cơ : Tach = Right(rg.Value, Len(rg.Value) - find("@",rg.value)) dựa trên đúng quan điểm dùng hàm trên bảng tính

thế nào thì áp dụng vào VBA như thế, giống như chú nói đấy, nhưng cách trên không được nên mới quay ra dùng

For - Next, sau đó con mới biết phải thêm từ khóa
worksheetfunction. vào trước hàm Find mới được.

Hàm FIND trên bảng tính sẽ gần tương đương với InStr trong VBA... cứ thể mà thử nghiệm nhé
(WorksheetFunction chỉ dùng trong trường hợp không tìm được cách nào khác)
 
Cám ơn các anh em đã viết được rồi ạ
Mã:
Public Function Rightafter(s As String) As String
     
    Rightafter = Right(s, Len(s) - Application.WorksheetFunction.Find("@", s))
     
End Function


Public Function LeftBefore(s As String) As String
     
    LeftBefore = Left(s, Application.WorksheetFunction.Find("@", s) - 1)
     
End Function
Dựa vào code trên nhờ anh chị sửa giúp thêm kiểm tra điều kiện xem có ký tự @ trong chuỗi không với ạ
Cám ơn cả nhà, chúc cả nhà GPE ngày làm việc vui vẻ
 
Dựa vào code trên nhờ anh chị sửa giúp thêm kiểm tra điều kiện xem có ký tự @ trong chuỗi không với ạ
Cám ơn cả nhà, chúc cả nhà GPE ngày làm việc vui vẻ

Nếu chỉ muốn kiểm tra xem trong 1 chuỗi có hay không ký tự @ thì mình đưa ra cách này, bạn dùng thử xem ổn không:

Public Function KT(rg As Range) As Boolean
If InStr(rg.Value, "@") = 0 Then
KT = False
Else: KT = True
End If
End Function
 
Dựa vào code trên nhờ anh chị sửa giúp thêm kiểm tra điều kiện xem có ký tự @ trong chuỗi không với ạ
Cám ơn cả nhà, chúc cả nhà GPE ngày làm việc vui vẻ

Kiểm tra nếu không có "@" thì bạn muốn hàm trả về cái gì? Sao bạn không nói luôn?
 
Em sửa như thế này các anh góp lý giúp ạ
Mã:
Public Function Rightafter(s As String) As String
  If Len(s)<>0 and [COLOR=#000000]InStr(s, "@")[/COLOR] <>0 then
    Rightafter = Right(s, Len(s) - Application.WorksheetFunction.Find("@", s))
  Else
  Msgbox "Khong co ky tu @ trong chuoi nen khong tach duoc",64,"Thong bao"
End if
End Function


Public Function LeftBefore(s As String) As String
    If Len(s)<>0 and [COLOR=#000000]InStr(s, "@")[/COLOR] <>0 then    
    LeftBefore = Left(s, Application.WorksheetFunction.Find("@", s) - 1)
  Else
  Msgbox "Khong co ky tu @ trong chuoi nen khong tach duoc",64,"Thong bao"
End if     
End Function
 
Em sửa như thế này các anh góp lý giúp ạ
Mã:
Public Function Rightafter(s As String) As String
  If Len(s)<>0 and [COLOR=#000000]InStr(s, "@")[/COLOR] <>0 then
    Rightafter = Right(s, Len(s) - [COLOR=#ff0000]Application.WorksheetFunction.Find("@", s)[/COLOR])
  Else
  Msgbox "Khong co ky tu @ trong chuoi nen khong tach duoc",64,"Thong bao"
End if
End Function


Public Function LeftBefore(s As String) As String
    If Len(s)<>0 and [COLOR=#000000]InStr(s, "@")[/COLOR] <>0 then    
    LeftBefore = Left(s, [COLOR=#ff0000]Application.WorksheetFunction.Find("@", s)[/COLOR] - 1)
  Else
  Msgbox "Khong co ky tu @ trong chuoi nen khong tach duoc",64,"Thong bao"
End if     
End Function
Đã biết dùng InStr rồi thì mắc mớ gì phải thêm cái Application.WorksheetFunction.Find vào nhỉ
Mã:
Public Function Rightafter(s As String) As String
  If Len(s) <> 0 And InStr(1, s, "@") <> 0 Then
    Rightafter = Mid(s, [COLOR=#ff0000]InStr(1, s, "@") + 1[/COLOR])
  Else
    MsgBox "Khong co ky tu @ trong chuoi nen khong tach duoc", 64, "Thong bao"
  End If
End Function
Public Function LeftBefore(s As String) As String
  If Len(s) <> 0 And InStr(1, s, "@") <> 0 Then
    LeftBefore = Left(s, [COLOR=#ff0000]InStr(1, s, "@")[/COLOR] - 1)
  Else
    MsgBox "Khong co ky tu @ trong chuoi nen khong tach duoc", 64, "Thong bao"
  End If
End Function
Vậy thôi
---------------
Góp ý thêm:
- Viết hàm tự tạo ta không nên chèn MsgBox, bởi nếu như hàm này mà gõ trên bảng tính thì nó sẽ hiện ra cả đống thông báo, bấm "OK" mỏi tay luôn.
- Nếu bạn dùng hàm tự tạo trong môi trường VBA luôn (không gõ trên bảng tính) thì cái MsgBox ấy cũng chỉ nên sử dụng khi ta áp dụng vào 1 Sub cụ thể nào đó
- Nói chung là hạn chế cho MsgBox vào UDF
 
Web KT
Back
Top Bottom