Tách 1 chuỗi thành 2 chuỗi dài tương đương nhau (độ dài chênh lệch nhau ít nhất) ? (1 người xem)

  • Thread starter Thread starter jialink
  • Ngày gửi Ngày gửi
Liên hệ QC

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

jialink

Thành viên mới
Tham gia
16/11/08
Bài viết
17
Được thích
1
Mình có 1 đề bài yêu cầu thế này.
Giả sử mình có 1 chuỗi: "a bc def ghij klmno pqrstu"
Mình muốn tách chuỗi trên thành 2 chuỗi có độ dài tương đương nhau (độ dài chênh lệch nhau ít nhất)
Ví dụ sau khi tách được 2 chuỗi:
Chuỗi 1: a bc def ghij
Chuỗi 2: klmno pqrstu
Mong các cao thủ giaiphapexcel.com trả lời giúp!
many thanks!
 
1. Điểm cắt là một khoản trống hay ký tự nào cũng được.
2. Nếu độ dài 2 chuỗi sau khi tách không bằng nhau thì cái nào ưu tiên dài hơn (phần đầu hay phần sau)
 
Mình có 1 đề bài yêu cầu thế này.
Giả sử mình có 1 chuỗi: "a bc def ghij klmno pqrstu"
Mình muốn tách chuỗi trên thành 2 chuỗi có độ dài tương đương nhau (độ dài chênh lệch nhau ít nhất)
Ví dụ sau khi tách được 2 chuỗi:
Chuỗi 1: a bc def ghij
Chuỗi 2: klmno pqrstu
Mong các cao thủ giaiphapexcel.com trả lời giúp!
many thanks!
Nếu chỉ tách đôi đơn thuần, vị trí nào cũng được thì ví dụ ô A1 là dữ liệu thì
chuỗi đầu:
Mã:
=LEFT(A1,INT(LEN(A1)/2))
Chuỗi đuôi
Mã:
=RIGHT(A1,LEN(A1)-INT(LEN(A1)/2))
(chênh lệch nhiều nhất là 1 ký tự)
 
1. Điểm cắt là một khoản trống hay ký tự nào cũng được.
2. Nếu độ dài 2 chuỗi sau khi tách không bằng nhau thì cái nào ưu tiên dài hơn (phần đầu hay phần sau)

Mình xin trả lời:
1. Điểm cắt là khoảng trống
2. Độ dài 2 chuỗi sau khi tách thường không bằng nhau, mình chỉ muốn chênh lệch số ký tự giữa 2 chuỗi sau khi tách là MIN, không quan trọng phần đâu hay phần sau dài hơn
Cảm ơn đã quan tâm nhé!
 
Nếu chỉ tách đôi đơn thuần, vị trí nào cũng được thì ví dụ ô A1 là dữ liệu thì
chuỗi đầu:
Mã:
=LEFT(A1,INT(LEN(A1)/2))
Chuỗi đuôi
Mã:
=RIGHT(A1,LEN(A1)-INT(LEN(A1)/2))
(chênh lệch nhiều nhất là 1 ký tự)
Cảm ơn đã quan tâm!
Mình nghĩ nếu tách kiểu này sợ sẽ có trường hợp bị chia đôi ở giữa 1 từ. Mình muốn tách ở vị trí 1 khoảng trống thành 2 chuỗi có chênh lệch số ký tự trong chuỗi là MIN.
 
Làm bằng công thức thì tôi không biết.

Nếu muốn code VBA thì giải thuật như vầy:

Giải thuật 1:
- Dùng hàm Application.Trim để chuẩn hoá các khoảng trống.
- Dùng hàm split để đổi chuỗi thành array các từ.
- Dùng vòng lặp, nối các từ thành 2 chuỗi. Chuỗi 1 nối từ bên trái, chuỗi 2 nối từ bên phải. Cứ chuõi nào dài nhơn hì tạm ngưng đợi chuỗi kia. Bao giờ 2 chuỗi chạm nhau thì ngưng vòng lặp.

Gíải thuật 2:
- Dùng hàm Application.Trim để chuẩn hoá các khoảng trống.
- Chọn ngay điểm giữa chuỗi. Đếm từng ký tự về phía trái và phải, gặp khoảng trắng thì dừng. Cắt chuỗi ở đó.
 
Làm bằng công thức thì tôi không biết.

Nếu muốn code VBA thì giải thuật như vầy:

Giải thuật 1:
- Dùng hàm Application.Trim để chuẩn hoá các khoảng trống.
- Dùng hàm split để đổi chuỗi thành array các từ.
- Dùng vòng lặp, nối các từ thành 2 chuỗi. Chuỗi 1 nối từ bên trái, chuỗi 2 nối từ bên phải. Cứ chuõi nào dài nhơn hì tạm ngưng đợi chuỗi kia. Bao giờ 2 chuỗi chạm nhau thì ngưng vòng lặp.

Gíải thuật 2:
- Dùng hàm Application.Trim để chuẩn hoá các khoảng trống.
- Chọn ngay điểm giữa chuỗi. Đếm từng ký tự về phía trái và phải, gặp khoảng trắng thì dừng. Cắt chuỗi ở đó.

Cảm ơn đã quan tâm!
Mình cũng nghĩ dùng công thức excel thì khó.
Chắc phải dùng đến VBA để giải quyết. VBA thì mình chỉ biết chút ít nên khó quá :D
Mong được các cao thủ VBA giúp đỡ.
 
Bạn thử kiểm tra hàm tự tạo sau trên trang tính excel nha

Mình xin trả lời:
1. Điểm cắt là khoảng trống
2. Độ dài 2 chuỗi sau khi tách thường không bằng nhau, mình chỉ muốn chênh lệch số ký tự giữa 2 chuỗi sau khi tách là MIN, không quan trọng phần đâu hay phần sau dài hơn
Cảm ơn đã quan tâm nhé!

PHP:
Option Explicit
Function ChiaDoi(StrC As String, Optional Dau As Boolean = True) As String
 Dim J As Integer, VT0 As Byte, Tmp As Byte
  
 VT0 = Len(StrC) \ 2
 If Mid(StrC, VT0, 1) = " " Then
    ChiaDoi = GPE(StrC, VT0, Dau)
 ElseIf Mid(StrC, VT0 + 1, 1) = " " Then
    ChiaDoi = GPE(StrC, 1 + VT0, Dau)
 Else
    For J = 1 To Len(StrC)
        If Mid(StrC, VT0 - J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 - J, Dau)
            Exit Function
        ElseIf Mid(StrC, VT0 + J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 + J, Dau)
            Exit Function
        End If
    Next J
 End If
End Function
Mã:
[B]Function GPE(StrC As String, VTr As Byte, Optional Dau As Boolean = True)[/B]
 If Dau Then
    GPE = Left(StrC, VTr - 1)
 Else
    GPE = Mid(StrC, VTr + 1, Len(StrC))
 End If
[B]End Function[/B]
 
Cảm ơn đã quan tâm!
Mình cũng nghĩ dùng công thức excel thì khó.
Chắc phải dùng đến VBA để giải quyết. VBA thì mình chỉ biết chút ít nên khó quá :D
Mong được các cao thủ VBA giúp đỡ.
Nếu bạn muốn công thức thì có thể dùng như sau:
Ví dụ chuỗi tại ô A1 (giả sử trong chuỗi không chứa ký tự #)
Đặt các Name
Ref:
Mã:
=TRIM(A1)
Lstring
Mã:
=SUBSTITUTE(LEFT(Ref,INT(LEN(Ref)/2))," ","#")
Rstring
Mã:
=SUBSTITUTE(RIGHT(Ref,LEN(Ref)-INT(LEN(Ref)/2))," ",REPT(" ",LEN(Ref)))
Kết quả chuỗi lấy từ bên trái
Mã:
=SUBSTITUTE(TRIM(LEFT(Lstring & Rstring,INT(LEN(Ref)/2)+LEN(Ref))),"#"," ")
Chuỗi lấy còn lại
Mã:
=RIGHT(Ref,LEN(Ref)-LEN(D4))
Tham khảo thêm đính kèm
 

File đính kèm

Tham khảo thêm đính kèm
Nếu chuỗi ban đầu là ab c d thì phải tách ra thành abc d mới đúng chứ. Công thức của bạn tách ra thành ab cd
Cảm ơn đã quan tâm!
Mình cũng nghĩ dùng công thức excel thì khó.
Chắc phải dùng đến VBA để giải quyết. VBA thì mình chỉ biết chút ít nên khó quá :D
Mong được các cao thủ VBA giúp đỡ.
Nếu bạn muốn dùng công thức thì xem file đính kèm thử xem.
 
Lần chỉnh sửa cuối:
Nếu chuỗi ban đầu là ab c d thì phải tách ra thành abc d mới đúng chứ. Công thức của bạn tách ra thành ab cd

Nếu bạn muốn dùng công thức thì xem file đính kèm thử xem.
Có thể vụng chèo khéo chống như sau:
Công thức của tôi cho phép tìm chuỗi từ bên trái, giờ làm thêm công thức lấy chuỗi từ bên phải, so sánh 2 chuỗi này cái nào ngắn hơn thì chọn, ẹc ẹc.
 
Nếu bạn muốn công thức thì có thể dùng như sau:
Ví dụ chuỗi tại ô A1 (giả sử trong chuỗi không chứa ký tự #)
Đặt các Name
Ref:
Mã:
=TRIM(A1)
Lstring
Mã:
=SUBSTITUTE(LEFT(Ref,INT(LEN(Ref)/2))," ","#")
Rstring
Mã:
=SUBSTITUTE(RIGHT(Ref,LEN(Ref)-INT(LEN(Ref)/2))," ",REPT(" ",LEN(Ref)))
Kết quả chuỗi lấy từ bên trái
Mã:
=SUBSTITUTE(TRIM(LEFT(Lstring & Rstring,INT(LEN(Ref)/2)+LEN(Ref))),"#"," ")
Chuỗi lấy còn lại
Mã:
=RIGHT(Ref,LEN(Ref)-LEN(D4))
Tham khảo thêm đính kèm

Cảm ơn đã quan tâm.
Công thức của bạn đã tách được nhưng chưa thỏa mãn yêu cầu chênh lệch số ký tự trong 2 chuỗi là MIN, hì
 
Nếu chuỗi ban đầu là ab c d thì phải tách ra thành abc d mới đúng chứ. Công thức của bạn tách ra thành ab cd

Nếu bạn muốn dùng công thức thì xem file đính kèm thử xem.

Công thức mảng cậu dùng là gì vậy?
máy tính tớ cứ báo virus và hiện {=#VALUE! }
Cậu thử ghi ra để tớ thử xem nhé. Thanks
 
PHP:
Option Explicit
Function ChiaDoi(StrC As String, Optional Dau As Boolean = True) As String
 Dim J As Integer, VT0 As Byte, Tmp As Byte
  
 VT0 = Len(StrC) \ 2
 If Mid(StrC, VT0, 1) = " " Then
    ChiaDoi = GPE(StrC, VT0, Dau)
 ElseIf Mid(StrC, VT0 + 1, 1) = " " Then
    ChiaDoi = GPE(StrC, 1 + VT0, Dau)
 Else
    For J = 1 To Len(StrC)
        If Mid(StrC, VT0 - J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 - J, Dau)
            Exit Function
        ElseIf Mid(StrC, VT0 + J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 + J, Dau)
            Exit Function
        End If
    Next J
 End If
End Function
Mã:
[B]Function GPE(StrC As String, VTr As Byte, Optional Dau As Boolean = True)[/B]
 If Dau Then
    GPE = Left(StrC, VTr - 1)
 Else
    GPE = Mid(StrC, VTr + 1, Len(StrC))
 End If
[B]End Function[/B]
Cảm ơn bạn rất nhiều!
Mình vừa kiểm tra lại rồi, đúng chính xác.
Cảm ơn tất cả mọi người!
 
Cảm ơn đã quan tâm.
Công thức của bạn đã tách được nhưng chưa thỏa mãn yêu cầu chênh lệch số ký tự trong 2 chuỗi là MIN, hì
Như tôi có nói thêm, chế biến lại 1 chút là được
thêm 1 name điều kiện so sánh
Delta
Mã:
=IF(LEN(TRIM(RIGHT(SUBSTITUTE(Lstring,"#",REPT(" ",LEN(Ref))),LEN(Ref))))<FIND(" ",Rstring),-LEN(TRIM(RIGHT(SUBSTITUTE(Lstring,"#",REPT(" ",LEN(Ref))),LEN(Ref)))),LEN(Ref))
1 chuỗi bên trái lấy ra với công thức là:
Mã:
=SUBSTITUTE(TRIM(LEFT(Lstring & Rstring,INT(LEN(Ref)/2)+Delta)),"#"," ")
Xem thêm theo đính kèm.
 

File đính kèm

File đính kèm

Như tôi có nói thêm, chế biến lại 1 chút là được
thêm 1 name điều kiện so sánh
Delta
Mã:
=IF(LEN(TRIM(RIGHT(SUBSTITUTE(Lstring,"#",REPT(" ",LEN(Ref))),LEN(Ref))))<FIND(" ",Rstring),-LEN(TRIM(RIGHT(SUBSTITUTE(Lstring,"#",REPT(" ",LEN(Ref))),LEN(Ref)))),LEN(Ref))
1 chuỗi bên trái lấy ra với công thức là:
Mã:
=SUBSTITUTE(TRIM(LEFT(Lstring & Rstring,INT(LEN(Ref)/2)+Delta)),"#"," ")
Xem thêm theo đính kèm.

Cảm ơn bạn.
Giờ thì ngon lành rồi đấy ạ!
 
PHP:
Option Explicit
Function ChiaDoi(StrC As String, Optional Dau As Boolean = True) As String
 Dim J As Integer, VT0 As Byte, Tmp As Byte
  
 VT0 = Len(StrC) \ 2
 If Mid(StrC, VT0, 1) = " " Then
    ChiaDoi = GPE(StrC, VT0, Dau)
 ElseIf Mid(StrC, VT0 + 1, 1) = " " Then
    ChiaDoi = GPE(StrC, 1 + VT0, Dau)
 Else
    For J = 1 To Len(StrC)
        If Mid(StrC, VT0 - J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 - J, Dau)
            Exit Function
        ElseIf Mid(StrC, VT0 + J, 1) = " " Then
            ChiaDoi = GPE(StrC, VT0 + J, Dau)
            Exit Function
        End If
    Next J
 End If
End Function
Mã:
[B]Function GPE(StrC As String, VTr As Byte, Optional Dau As Boolean = True)[/B]
 If Dau Then
    GPE = Left(StrC, VTr - 1)
 Else
    GPE = Mid(StrC, VTr + 1, Len(StrC))
 End If
[B]End Function[/B]

Code này không chạy đúng. Nếu chuỗi là "a bb cc" thì nó cắt ra "a" và "bb cc" (1:5). Đáng lẽ phải cắt thành "a bb" và "cc" (4:2)

Mã:
Function CheChuoi(ByVal s As String) As Variant
[COLOR=#006400]' Hàm cắt chuỗi làm 2
' Trả về một mảng 2 phần tử.
' Khi dùng, chọn 2 ô liên tiếp và ghi theo công thức mảng (ctrl+shift+enter)[/COLOR]
Dim a(1 To 2) As String
Dim d1 As Integer, dd As Integer
dd = Len(s)
For d1 = dd \ 2 + 1 To dd[COLOR=#006400] ' bắt đầu từ giữa chuỗi[/COLOR]
    If Mid(s, d1, 1) = " " Then Exit For[COLOR=#006400] ' thử nới chuỗi 1[/COLOR]
    If Mid(s, dd - d1 + 1, 1) = " " Then[COLOR=#006400] ' thử nới chuỗi 2[/COLOR]
        d1 = dd - d1 + 1
        Exit For
    End If
Next d1
a(1) = Left(s, d1 - 1)
a(2) = Mid(s, d1 + 1, dd)
CheChuoi = a
End Function
 
Code này không chạy đúng. Nếu chuỗi là "a bb cc" thì nó cắt ra "a" và "bb cc" (1:5). Đáng lẽ phải cắt thành "a bb" và "cc" (4:2)

Mã:
Function CheChuoi(ByVal s As String) As Variant
[COLOR=#006400]' Hàm cắt chuỗi làm 2
' Trả về một mảng 2 phần tử.
' Khi dùng, chọn 2 ô liên tiếp và ghi theo công thức mảng (ctrl+shift+enter)[/COLOR]
Dim a(1 To 2) As String
Dim d1 As Integer, dd As Integer
dd = Len(s)
For d1 = dd \ 2 + 1 To dd[COLOR=#006400] ' bắt đầu từ giữa chuỗi[/COLOR]
    If Mid(s, d1, 1) = " " Then Exit For[COLOR=#006400] ' thử nới chuỗi 1[/COLOR]
    If Mid(s, dd - d1 + 1, 1) = " " Then[COLOR=#006400] ' thử nới chuỗi 2[/COLOR]
        d1 = dd - d1 + 1
        Exit For
    End If
Next d1
a(1) = Left(s, d1 - 1)
a(2) = Mid(s, d1 + 1, dd)
CheChuoi = a
End Function

Bài này mình nghĩ đâu cần vòng lặp làm gì. Chỉ cần 1 cái If Else là xong thôi
 
Bài này mình nghĩ đâu cần vòng lặp làm gì. Chỉ cần 1 cái If Else là xong thôi

Nếu dị ứng với FOR thì
Mã:
Function ChiaChuoi(ByVal s As String)
Dim Arr(1 To 2) As String, pos As Long, pos1 As Long, pos2 As Long
    s = WorksheetFunction.Trim(s)
    pos = Len(s) \ 2
    [COLOR=#ff0000]If Mid(s, pos, 1) <> " " Then[/COLOR]
        pos1 = InStrRev(s, " ", pos)
        pos2 = InStr(pos, s, " ")
        If Len(s) + 1 <= pos1 + pos2 Then
            pos = pos1
        Else
            pos = pos2
        End If
    [COLOR=#ff0000]End If[/COLOR]
    Arr(1) = Left(s, pos - 1)
    Arr(2) = Mid(s, pos + 1, Len(s))
    ChiaChuoi = Arr
End Function

Thực ra có thể bỏ cái IF ngoài (đỏ đỏ) và chỉ cần 1 IF theo yêu cầu khán giả
 
Lần chỉnh sửa cuối:
Đúng là bài này không cần dùng vòng lặp.
(*) tôi có lý do tại sao tôi thích dùng vòng lặp để duyệt chuỗi. Nhưng lý do đó không quan trọng lắm đới với VBA và lại càng không quan trọng trong trường hợp này.

=== bổ sung ===
@siwtom: code trên cần thêm phần bẫy lỗi chuỗi đặc không có khoảng trống nào cả. (cho ra "#VALUE!" nếu chuỗi là "aa")
 
Lần chỉnh sửa cuối:
Nếu dị ứng với FOR thì
Mã:
Function ChiaChuoi(ByVal s As String)
Dim Arr(1 To 2) As String, pos As Long, pos1 As Long, pos2 As Long
    s = WorksheetFunction.Trim(s)
    pos = Len(s) \ 2
    [COLOR=#ff0000]If Mid(s, pos, 1) <> " " Then[/COLOR]
        pos1 = InStrRev(s, " ", pos)
        pos2 = InStr(pos, s, " ")
        If Len(s) + 1 <= pos1 + pos2 Then
            pos = pos1
        Else
            pos = pos2
        End If
    [COLOR=#ff0000]End If[/COLOR]
    Arr(1) = Left(s, pos - 1)
    Arr(2) = Mid(s, pos + 1, Len(s))
    ChiaChuoi = Arr
End Function

Thực ra có thể bỏ cái IF ngoài (đỏ đỏ) và chỉ cần 1 IF theo yêu cầu khán giả

Em viết cũng ra kết quả nhưng nhìn có vẻ lu xu bu quá
PHP:
Function Tach(ByVal s As String) As String
Dim Tmp1, Tmp2
Tmp1 = Left(s, Len(s) \ 2 + 1)
Tmp2 = Right(s, Len(s) \ 2 + 1)
If Len(Tmp1) - InStrRev(Tmp1, " ") >= InStr(Tmp2, " ") Then
   Tach = Trim(Left(s, Len(Tmp1) + InStr(Tmp2, " ") - 2))
Else
   Tach = Trim(Left(Tmp1, InStrRev(Tmp1, " ")))
End If
End Function
 
Theo phép tính điểm giữa, (Len(s) + 1) \ 2 mới là điểm giữa thật.
Tôi chọn Len(s) \ 2 + 1 là vì theo cách tính đếm (vòng lặp) thì cách này sẽ ưu tiên cho chuỗi thứ nhất ("aa b cc" cho ra chuỗi thứ nhất là "aa b")

Cách tính của bạn chọn ưu tiên cho chuỗi thứ hai ("aa b cc" cho ra chuỗi thứ nhất là "aa")

Tôi không nói kiểu nào hay hơn kiểu nào. Chỉ đưa ra các điểm cho bạn nào muốn dùng thì phải biết các điều kiện.
 
=== bổ sung ===
@siwtom: code trên cần thêm phần bẫy lỗi chuỗi đặc không có khoảng trống nào cả. (cho ra "#VALUE!" nếu chuỗi là "aa")

He he, cám ơn bạn. Đêm khuya quá nên không để ý thấy là trứng thối, cà chua thối bay vèo vèo lên sân khấu.

Chỉ xin tình tiết giảm nhẹ là sâu trong đêm nên cái đầu đã lên giường từ lâu rồi.

Có lẽ bây giờ là chuẩn. Trả về 2 chuỗi rỗng nếu không thể chia được (chuỗi đặc, chuỗi rỗng)

Mã:
Function ChiaChuoi(ByVal s As String)
Dim Arr(1 To 2) As String, pos As Long, pos1 As Long, pos2 As Long
    Arr(1) = ""
    Arr(2) = ""
    If s <> "" Then
        s = WorksheetFunction.Trim(s)
        pos = Len(s) \ 2
        pos1 = InStrRev(s, " ", pos)
        pos2 = InStr(pos, s, " ")
        If pos2 = 0 Then
            pos = pos1
        ElseIf Len(s) + 1 <= pos1 + pos2 Then
            pos = pos1
        Else
            pos = pos2
        End If
        If pos <> 0 Then
            Arr(1) = Left(s, pos - 1)
            Arr(2) = Mid(s, pos + 1, Len(s))
        End If
    End If
    ChiaChuoi = Arr
End Function
-------------
tb.
Nếu chuỗi "đặc", tức không có khoảng trống, thì trả về lỗi hoặc chuỗi rỗng vì không có khoảng trống để "cắt".

Nhưng công thức của bạn huuthang_bd và code của bạn VetMini đều trả về cả chuỗi "đặc" cho 1 trong 2 chuỗi. Như vậy cũng không đúng.

Công thức của bạn VMH0307 trả về lỗi cho chuỗi đặc "xyz" (có lý) nhưng cũng trả về lỗi cho chuỗi "a abcd". Như thế là sai. Kết quả phải là "a" và "abcd" vì cách chia duy nhất cũng là cách chia thỏa đk MIN trong các cách chia.

Code của bạn quanghai1969 thì luôn chỉ trả về 1 chuỗi duy nhất. Thế còn chuỗi kia?
 
Nhưng công thức của bạn huuthang_bd và code của bạn VetMini đều trả về cả chuỗi "đặc" cho 1 trong 2 chuỗi. Như vậy cũng không đúng.
Vì chủ topic không nói rõ trong trường hợp chuỗi không có khoản trắng nên cũng không biết thế nào mới là "đúng" theo ý chủ topic. Theo em thì sau khi tách ra thì ghép 2 chuỗi kết quả phải bằng chuỗi ban đầu mới đúng nên chuỗi không có khoản trắng thì dồn hết về 1 chuỗi của kết quả.
He he, cám ơn bạn. Đêm khuya quá nên không để ý thấy là trứng thối, cà chua thối bay vèo vèo lên sân khấu.

Chỉ xin tình tiết giảm nhẹ là sâu trong đêm nên cái đầu đã lên giường từ lâu rồi.

Có lẽ bây giờ là chuẩn. Trả về 2 chuỗi rỗng nếu không thể chia được (chuỗi đặc, chuỗi rỗng)
Code của anh còn bị lỗi nếu chỗi là một ký tự không phải khoản trắng :D. Với lại em nghĩ mảng Arr đã khai báo kiểu String nên không cần phải gán chuỗi rỗng cho các phần tử.
Mạng phép sửa lại code anh một chút như thế này (vẫn theo nguyên tắc chuỗi "đặc" thì trả trề 2 chuỗi rỗng)
PHP:
Function ChiaChuoi(ByVal S As String)
Dim Arr(1 To 2) As String, Pos As Long
S = WorksheetFunction.Trim(S)
If InStr(S, " ") > 0 Then
    Pos = InStrRev(S, " ", Len(S) \ 2)
    Pos = InStr(Mid(S, Pos + 1, Len(S) - Pos * 2), " ") + Pos
    Arr(1) = Left(S, Pos - 1)
    Arr(2) = Mid(S, Pos + 1, Len(S))
End If
ChiaChuoi = Arr
End Function
 

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

Back
Top Bottom