Một câu hỏi về chuỗi

Liên hệ QC

kysycodon

Thành viên mới
Tham gia
12/7/07
Bài viết
12
Được thích
1
Các bác nhà ta cho hỏi : Làm sao để trích ra một đoạn của chuỗi biết rằng đoạn này nằm cuối cùng cách với phần còn lại (trước nó) bởi dấu " " ( cách) và trong chuỗi có nhiều dấu cách như thế .
Cái này gặp nhiều trong thực tế : Lấy "tên" ra từ trong chuỗi "Họ và tên", lấy "tên tỉnh" ra trong chuỗi " Địa chỉ", biết rằng chuỗi mẫu ( Họ và tên, Địa chỉ ... có độ dài khác nhau )
Mở rộng bài toán :
từ một chuỗi mẫu , trích một đoạn nằm giữa khoảng trống ( dấu cách) thứ n và n+1.
Nhờ các bạn chỉ giáo vì mình là dân ngoại đạo.

Cám ơn nhiều
Kysycodon85@yahoo.ca


 
tedaynui đã viết:
Cám ơn bạn đã cho tôi đường dẫn , tôi đã tách được tên ra khỏi họ và tên.
Một vấn đề là : Đối với Địa chỉ (Số nhà, Thôn Xóm, Xã , Huyện, Tỉnh ) làm sao để tách Tỉnh ra : khác với tên trong họ và tên , Tỉnh ở đây bắt đầu từ sau khoảng trổng " " thứ hai kể từ dưới lên (chứ không phải là thứ nhất như tên) ??
Tôi còn dốt Excel nên phải hỏi hướng dẫn cụ thể - mong chỉ giáo

Cám ơn
kysycodon85@yahoo.ca
 
Upvote 0
Nếu bạn dùng dấu "-" ngăn cách giữa Huyện và tỉnh (ví dụ Gia Lâm - Hà Nội) thì có thể dùng chương trình tôi đã post trong http://www.giaiphapexcel.com/forum/s...ead.php?t=2725
tách rất rễ ràng (nhưng cẩn thận vì có người bảo nó có virus, tôi ko cố ý nhưng ko diệt được con virus này). Nếu cần gì cứ nhắn tin trược tiếp cho tôi, nếu có thể giúp được gì tôi sẽ giúp.
 
Upvote 0
kysycodon đã viết:
Một vấn đề là : Đối với Địa chỉ (Số nhà, Thôn Xóm, Xã , Huyện, Tỉnh ) làm sao để tách Tỉnh ra : khác với tên trong họ và tên , Tỉnh ở đây bắt đầu từ sau khoảng trổng " " thứ hai kể từ dưới lên (chứ không phải là thứ nhất như tên) ??
Công thức thì mình chưa nghĩ ra, Nhưng trước mắt giải quyết vấn đề, bạn có thể dùng tạm "khúc củi" này (còn gọn, đẹp thì tính sau nhé)
Mã:
Function TenTinh(Chuoi As String)
Dim k As Integer
Chuoi = Trim(Chuoi)
For i = Len(Chuoi) To 1 Step -1
    If Mid(Chuoi, i, 1) = " " Then
        k = k + 1
        If k = 2 Then Exit For
    End If
Next
TenTinh = Right(Chuoi, Len(Chuoi) - i)
End Function
Nếu ô A1 có chứa địa chỉ thì bạn nhập hàm =TenTinh(A1) sẽ cho ra kết quả

TDN
 
Lần chỉnh sửa cuối:
Upvote 0
kysucodon đã viết:
Tỉnh ở đây bắt đầu từ sau khoảng trổng " " thứ hai kể từ dưới lên (chứ không phải là thứ nhất như tên) ??
Nếu là "Thừa Thiên Huế" thì làm sao đây?
 
Upvote 0
chibi đã viết:
Nếu là "Thừa Thiên Huế" thì làm sao đây?
Thì "cắn lưỡi" luôn chứ sao. Hi hi --=0
Tên tỉnh lúc 1 chữ, lúc 2 chữ, 3 chữ ... thì cách nhập địa chỉ phải có dấu "," hoặc dấu "-"... (VD : Gia Lâm, Hà Nội hoặc Gia Lâm - Hà Nội) thì mới có thể giải quyết được. Chứ tất cả chỗ cách dùng khoảng trắng " " thì chịu thôi

TDN
 
Upvote 0
chibi đã viết:
Nếu là "Thừa Thiên Huế" thì làm sao đây?
Không sao cả , nếu là bài toán tổng quát thì khó chứ là bài toán thực tế thì không khó , vì đa phần tên tỉnh ở việt nam đều là 2 chữ (61/64 tên tỉnh thành ) chỉ có 3 trường hợp đặc biệt là Thừa Thiên-Huế, Bà Rịa-Vũng TàuTP.HCM hoặc TP Hồ Chí Minh,
Có lẽ khi gặp những trường hợp này thì phải làm thủ công vậy
Không biết các bạn nghĩ thế nào?
 
Upvote 0
Nếu tên tỉnh là Thừa Thiên-Huế, Bà Rịa-Vũng TàuTP.HCM hoặc TP Hồ Chí Minh, tadùng thử hàm if(or(Find("Thừa Thiên-Huế",....,1),.....)) thì lấy 3 hay 4 tuỳ. Còn lại là 2 chữ.
 
Upvote 0
tedaynui đã viết:
Công thức thì mình chưa nghĩ ra, Nhưng trước mắt giải quyết vấn đề, bạn có thể dùng tạm "khúc củi" này (còn gọn, đẹp thì tính sau nhé)
Mã:
Function TenTinh(Chuoi As String)
Dim k As Integer
Chuoi = Trim(Chuoi)
For i = Len(Chuoi) To 1 Step -1
    If Mid(Chuoi, i, 1) = " " Then
        k = k + 1
        If k = 2 Then Exit For
    End If
Next
TenTinh = Right(Chuoi, Len(Chuoi) - i)
End Function
Nếu ô A1 có chứa địa chỉ thì bạn nhập hàm =TenTinh(A1) sẽ cho ra kết quả

TDN


Tại sao đoạn mã này khi chạy nó cứ báo lỗi là không cho vào .VB project được nhỉ ?
 
Upvote 0
Gởi Kysycodon
Minh vẫn thấy bình thường mà
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Gởi kysycodon
Thôi thì đã lỡ nên mần luôn
Mã:
'** lay tu phai qua 2 khoang trang (2 chu)
'** Rieng TP.Ho Chi Minh, Thua Thien Hue, Ba Ria-Vung Tau
'** thi lay 3 khoang trang tu phai qua (3 chu)
Function TP(Chuoi As String)
Dim k As Integer
Dim a As String, b As String
Chuoi = Trim(Chuoi)
For i = Len(Chuoi) To 1 Step -1
    a = Right(Chuoi, Len(Chuoi) - i + 1)
    If Mid(Chuoi, i, 1) = " " Then k = k + 1
    
    If k > 1 Then
        If a = " R" & ChrW(7883) & "a-V" & ChrW(361) & "ng Tàu" Or _
            a = " Chí Minh" Or a = " Thiên Hu" & ChrW(7871) Then b = a
        If b = " R" & ChrW(7883) & "a-V" & ChrW(361) & "ng Tàu" Or _
            b = " Chí Minh" Or b = " Thiên Hu" & ChrW(7871) Then GoTo Tiep2
    End If
Tiep1:
        If k = 2 Then Exit For
Tiep2:
        If k = 3 Then Exit For
Next
TP = Trim(a) 'Right(Chuoi, Len(Chuoi) - i)
End Function
TDN
 
Upvote 0
Tuyệt vời , bạn đúng là chuyên gia giỏi
Có một lưu ý : Hàm này chỉ có tác dụng với chuỗi Unicode , muốn sử dụng với TCVN thì phải chuyển code .
Cám ơn nhiều !

tedaynui đã viết:
Gởi kysycodon
Thôi thì đã lỡ nên mần luôn
Mã:
'** lay tu phai qua 2 khoang trang (2 chu)
'** Rieng TP.Ho Chi Minh, Thua Thien Hue, Ba Ria-Vung Tau
'** thi lay 3 khoang trang tu phai qua (3 chu)
Function TP(Chuoi As String)
Dim k As Integer
Dim a As String, b As String
Chuoi = Trim(Chuoi)
For i = Len(Chuoi) To 1 Step -1
    a = Right(Chuoi, Len(Chuoi) - i + 1)
    If Mid(Chuoi, i, 1) = " " Then k = k + 1
    
    If k > 1 Then
        If a = " R" & ChrW(7883) & "a-V" & ChrW(361) & "ng Tàu" Or _
            a = " Chí Minh" Or a = " Thiên Hu" & ChrW(7871) Then b = a
        If b = " R" & ChrW(7883) & "a-V" & ChrW(361) & "ng Tàu" Or _
            b = " Chí Minh" Or b = " Thiên Hu" & ChrW(7871) Then GoTo Tiep2
    End If
Tiep1:
        If k = 2 Then Exit For
Tiep2:
        If k = 3 Then Exit For
Next
TP = Trim(a) 'Right(Chuoi, Len(Chuoi) - i)
End Function
TDN
 
Upvote 0
kysycodon đã viết:
Có một lưu ý : Hàm này chỉ có tác dụng với chuỗi Unicode , muốn sử dụng với TCVN thì phải chuyển code .
Cám ơn nhiều !
Muốn không chuyển code cũng được, bạn nhập tên 3 thành phố này vào 3 ô trên 1 sheet nào đó. Trong VBA, bạn lấy giá trị của các ô này mà so sánh. Hi hi, nghĩ vậy thôi chứ chưa thử nhưng mình nghĩ là được ;;;;;;;;;;;

TDN
 
Upvote 0
Web KT

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

Back
Top Bottom