Tìm 1 chữ cái trong 1 cell gồm cả chữ, số & dấu "-" (1 người xem)

Liên hệ QC

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

vubichngoan

Thành viên mới
Tham gia
22/7/10
Bài viết
17
Được thích
0
Chào mọi người mình có 1 đống dữ liệu thế này ở cột A
SBV-11E-1273
YMVN-11I-511
HAN-11KNQ-I-20
Giờ mình muốn cột B căn cứ vào cột A có "E" thì điền vào cột A là "E" & Có "I" thì điền vào cột B là "I"
Mong các đại cao thủ chỉ giùm mình với chứ ngồi đánh thủ công thế này thì chết mình mất. Mình vô cùng cảm ơn nhiều
( Các chưa 'I" và "e" luôn đứng trước phần số)
 
Chào mọi người mình có 1 đống dữ liệu thế này ở cột A
SBV-11E-1273
YMVN-11I-511
HAN-11KNQ-I-20
Giờ mình muốn cột B căn cứ vào cột A có "E" thì điền vào cột A là "E" & Có "I" thì điền vào cột B là "I"
Mong các đại cao thủ chỉ giùm mình với chứ ngồi đánh thủ công thế này thì chết mình mất. Mình vô cùng cảm ơn nhiều
( Các chưa 'I" và "e" luôn đứng trước phần số)
Xài tạm hàm tự tạo này vậy:
PHP:
Function KT(S As String) As String
    Dim i As Integer
    If InStr(S, "-") = 0 Then KT = NullString: Exit Function
    i = Len(S)
    Do While Mid(S, i, 1) <> "-"
        i = i - 1
    Loop
    KT = Mid(S, i - 1, 1)
End Function
 

File đính kèm

Xài tạm hàm tự tạo này vậy:
PHP:
Function KT(S As String) As String
    Dim i As Integer
    If InStr(S, "-") = 0 Then KT = NullString: Exit Function
    i = Len(S)
    Do While Mid(S, i, 1) <> "-"
        i = i - 1
    Loop
    KT = Mid(S, i - 1, 1)
End Function

Nếu hiểu như thế này thì chỉ cần một dòng lệnh thôi cũng đủ mà

PHP:
Public Function KT(Rngs As Range) As String
KT = Mid(Rngs, InStrRev(Rngs, "-") - 1, 1)
End Function
 
Nếu hiểu như thế này thì chỉ cần một dòng lệnh thôi cũng đủ mà
PHP:
Public Function KT(Rngs As Range) As String
KT = Mid(Rngs, InStrRev(Rngs, "-") - 1, 1)
End Function
Cảm ơn anh. Lần đầu tiên em biết có cái hàm InStrRev này đó. Tưởng chỉ có hàm InStr tìm xuôi thôi chứ hóa ra còn có cả anh chàng tìm InStrRev ngược này. Nhưng mà có lẽ vẫn cần thêm một câu lệnh On Error Resume Next vào đầu để tránh trường hợp không tìm thấy ký tự "-" trong chuỗi.
 
Tại B1 gõ công thức:

=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"E",""))=0,"","E")&IF(LEN(A1)-LEN(SUBSTITUTE(A1,"I",""))=0,"","I")

Hoặc

=IF(ISERROR(FIND("E",A1)),"","E")&IF(ISERROR(FIND("I",A1)),"","I")

Rồi chép xuống hết cột là OK
 
Lần chỉnh sửa cuối:
Tại B1 gõ công thức:

=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"E",""))=0,"","E")&IF(LEN(A1)-LEN(SUBSTITUTE(A1,"I",""))=0,"","I")

Hoặc

=IF(ISERROR(FIND("E",A1)),"","E")&IF(ISERROR(FIND("I",A1)),"","I")

Rồi chép xuống hết cột là OK
Lỡ trong chuỗi này, ký tự cần tìm không phải là "E" hay "I" mà là ký tự khác thì sao anh? Em nghĩ yêu cầu của tác giả là tìm chữ cái đầu tiên tính từ bên phải của chuỗi.
 
Nếu dùng UDF thì hàm này có độ chính xác cao hơn 1 chút này ( Hi, đố các bạn biết lý do???)

Mã:
Function ConV(Ch As String) As String
ConV = IIf(Ch Like "*I-#*", "I", IIf(Ch Like "*E-#*", "E", ""))
End Function

Tại B1 gõ =ConV(A1)
 
Nếu dùng UDF thì hàm này có độ chính xác cao hơn 1 chút này ( Hi, đố các bạn biết lý do???)

Mã:
Function ConV(Ch As String) As String
ConV = IIf(Ch Like "*I-#*", "I", IIf(Ch Like "*E-#*", "E", ""))
End Function

Tại B1 gõ =ConV(A1)
Em nghĩ mấu chốt vấn đề là ở chỗ "-#*", có nghĩa là sau ký tự "I" hoặc "E" này là một dấu trừ và một chuỗi bắt đầu từ số (ký tự # đại diện cho 1 số). Bởi vì tác giả có chú thích như vầy:
( Các chưa 'I" và "e" luôn đứng trước phần số)
Sẵn đây xin hỏi anh: Có thể cải tiến hàm này như thế nào để trả về một ký tự bất kỳ chứ không phải chỉ là "I" hoặc "E"? Chẳng hạn như chuỗi có dạng "*A-#*" thì hàm trả về "A", chuỗi có dạng "*B-#*" thì hàm trả về "B".
 
Hàm này cho độ chính xác cao theo yêu cầu của tác giả này

Mã:
Function ConV2(Cell As Range) As String
Dim Tm
ConV2 = ""
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\d"
Tm = .Replace(Cell, "")
End With
Tm = Replace(Tm, "-", "")
If InStr(1, "IE", Right(Tm, 1)) > 0 _
Then ConV2 = Right(Tm, 1)
End Function

Sẵn đây xin hỏi anh: Có thể cải tiến hàm này như thế nào để trả về một ký tự bất kỳ chứ không phải chỉ là "I" hoặc "E"? Chẳng hạn như chuỗi có dạng "*A-#*" thì hàm trả về "A", chuỗi có dạng "*B-#*" thì hàm trả về "B".

Đúng như các bạn đã đoán, hàm này sẽ không coi là đúng nếu sau nó còn có 1 ký tự khác số và dấu trừ và hàm này cho phép bạn mở rộng cái chuỗi "IE" thành "IERWQ...." tuỳ theo yêu cầu.

Viết thì dài lắm, bạn google toán tử Like sẽ thấy nó khá hay đấy, ví dụ có trong khoảng từ A dến H không.Từ đó bạn có thể tìm ra hướng giải quyết nếu muốn dùng toán tử Lke. Thông cảm nha vì tìm nó cũng khá dễ tìm mà.
 
Lần chỉnh sửa cuối:
Nếu hiểu như thế này thì chỉ cần một dòng lệnh thôi cũng đủ mà

PHP:
Public Function KT(Rngs As Range) As String
KT = Mid(Rngs, InStrRev(Rngs, "-") - 1, 1)
End Function



Mình làm được rùi xin cảm ơn các cao thủ đặc biệt là bác Ba tê nhiều thật nhiều. Mong bác và mọi người luôn thật vui.
 
Web KT

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

Back
Top Bottom