Hỏi về hàm lấy kí tự trong xâu !!! (1 người xem)

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

nghiadh85

Thành viên mới
Tham gia
18/9/09
Bài viết
7
Được thích
0
Xin chào các Anh (Chị) !!!!
em có một ví dụ và câu hỏi cụ thể như sau:
em có chuỗi kí tự ở các ô như sau:
Ố1: FB140x10x250
Ồ2: FB20x5x685
Bây giờ em muốn lấy kí tự ở giữa 2 dấu " X" ra thì phải làm thế nào. ( Như VD ở trên ô 1 là số 10, ô 2 là số 5). do các kí tự trong xâu ko nằm theo quy luật nên em không thể sự dụng hàm Mid được. Vậy ace nào biết có thể chỉ giúp e !!!!!!
 
Chỉnh sửa lần cuối bởi điều hành viên:
=1*mid(a1,find("x",a1)+1,find("x",a1,find("x",a1)+1)-find("x",a1)-1)
 
Xin chào các Anh (Chị) !!!!
em có một ví dụ và câu hỏi cụ thể như sau:
em có chuỗi kí tự ở các ô như sau:
Ố1: FB140x10x250
Ồ2: FB20x5x685
Bây giờ em muốn lấy kí tự ở giữa 2 dấu " X" ra thì phải làm thế nào. ( Như VD ở trên ô 1 là số 10, ô 2 là số 5). do các kí tự trong xâu ko nằm theo quy luật nên em không thể sự dụng hàm Mid được. Vậy ace nào biết có thể chỉ giúp e !!!!!!

nếu như vậy tôi nghĩ bạn thử cách này
Bạn vào trong Data/text to Columns/ Mục Other bạn chọn x sau đó lấy ra giá trị cần.
 
Xin chào các Anh (Chị) !!!!
em có một ví dụ và câu hỏi cụ thể như sau:
em có chuỗi kí tự ở các ô như sau:
Ố1: FB140x10x250
Ồ2: FB20x5x685
Bây giờ em muốn lấy kí tự ở giữa 2 dấu " X" ra thì phải làm thế nào. ( Như VD ở trên ô 1 là số 10, ô 2 là số 5). do các kí tự trong xâu ko nằm theo quy luật nên em không thể sự dụng hàm Mid được. Vậy ace nào biết có thể chỉ giúp e !!!!!!

Nếu thay ký tự "x" thành khoảng trắng thì đây là bài toán TÁCH TÊN. Cụ thể là tách lấy CHỮ LÓT (đã có đầy trên diễn đàn rồi)
Mã:
=TRIM(MID(SUBSTITUTE(TRIM(A1),"x",REPT(" ", 255)),255,255))
 
Nếu thay ký tự "x" thành khoảng trắng thì đây là bài toán TÁCH TÊN. Cụ thể là tách lấy CHỮ LÓT (đã có đầy trên diễn đàn rồi)
Mã:
=TRIM(MID(SUBSTITUTE(TRIM(A1),"x",REPT(" ", 255)),255,255))
a có thể giải thích giúp em về các ký tự 255 ở trong hàm trên được không a?
 
a có thể giải thích giúp em về các ký tự 255 ở trong hàm trên được không a?

Không phải "các ký tự 255" mà là "các số 255"
------------

Thực ra không nhất thiết là 255. Nếu chuỗi của bạn toàn "ngắn" thì dư nhiều quá. Còn nếu chuỗi của bạn thường là rất dài thì có thể 255 lại thiếu.

Về cơ bản những chỗ 255 bạn có thể thay bằng Len(A1). Nhưng như thế rách việc quá vì phải gọi hàm Len vài lần. Vì vậy nếu chuỗi max của bạn là có 10 ký tự thì bạn thay 255 bằng 10. Nếu chuỗi max của bạn có 500 ký tự thì bạn thay bằng 500. Như thế vẫn dư tí tẹo

Giả sử chuỗi max của bạn có n ký tự.
Giả sử A1 có dạng "a1a2...apXb1b2...bqXc1c2...cr" - a1, a2, ..., ap, b1, b2, ... bq, c1, c2, ..., cr là những ký tự, 1 ≤ p, q, r < n (n = p + q + r + 2)

Ta xét công thức
Mã:
=TRIM(MID(SUBSTITUTE(TRIM(A1),"x",REPT(" ", n)),n,n))

1. TRIM(A1) trả về chuỗi có nhiều nhất n ký tự (không dài hơn A1) - LEN(TRIM(A1)) ≤ LEN(A1)

2. SUBSTITUTE(TRIM(A1),"x",REPT(" ", n)) trả về chuỗi s có dạng
s = "a1a2...ap(chuỗi 1 có n dấu cách)b1b2...bq(chuỗi 2 có n dấu cách)c1c2...cr"

Dễ thấy là trong chuỗi s thì b1 nằm ở vị trí (p + n + 1), bq nằm ở vị trí (p + n + q), c1 nằm ở vị trí (p + n + q + n + 1) = (2n + p + q + 1)

3. MID(SUBSTITUTE(TRIM(A1),"x",REPT(" ", n)),n,n) = MID(s,n,n) trả về chuỗi s1 từ chuỗi s bắt đầu từ ký tự n tới ký tự (2n - 1)

Do p < n < p + n + 1 nên ký tự đầu tiên của chuỗi s1 nằm trong lòng "chuỗi 1"
Do p + n + q = n + (p + q) = n + (n - 2 - r) < 2n - 1 < 2n + p + q + 1 nên ký tự cuối của s1 nằm ở "chuỗi 2". Tức MID trả về chuỗi s1 có dạng "(một loạt dấu cách)b1b2...bq(một loạt dấu cách)"

4. Trim(s1) trả về chuỗi "b1b2...bq"
 
Một xâu String chỉ có thể chứa tối đa được 255 ký tự, còn với Rept hình như được 32767 ký tự ---> không biết typeName(rept()) là gì anh nhỉ?
 
Một xâu String chỉ có thể chứa tối đa được 255 ký tự, còn với Rept hình như được 32767 ký tự ---> không biết typeName(rept()) là gì anh nhỉ?

Bạn định nói tới VBA.String?

Nếu thế thì bạn đọc không kỹ rồi. Làm gì có chuyện VBA.String trả về chuỗi dài nhất là 255 ký tự?

VBA.Rept và VBA.String$ trả về String
VBA.String trả về Variant

Tham số thứ hai của VBA.String, tức character: có thể nhập ký tự (hoặc chuỗi nhưng chỉ có ký tự đầu được dùng) hoặc mã của ký tự. Ví dụ ký tự "a" có mã là 97
Mã:
Sub he()
Dim s1 As String, s2 As String
    s1 = String(300, "a")
    s2 = String(300, 97)
    
    MsgBox s1
    MsgBox "Len(s1) = " & Len(s1)
    MsgBox s2
    MsgBox "Len(s2) = " & Len(s2)
End Sub

s1 và s2 là 2 chuỗi y hệt nhau gồm 300 ký tự "a"

Chú ý: Nếu ta nhập mã > 255, tức character > 255 thì character sẽ được tính như sau:
Mã:
character = character mod 256

Do bạn đọc không kỹ nên bạn hiểu lầm là VBA.String chỉ trả về chuỗi có nhiều nhất 255 ký tự.

Dễ kiểm tra thôi

Mã:
Sub he()
    Range("A1").Value = String(10, 306)
End Sub

Trong A1 ta có 2222222222. Tại sao?
Vì String(10, 306) = String(10, 50) = String(10, "2") - do 306 mod 256 = 50
 

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

Back
Top Bottom