Tách chuỗi ký tự (1 người xem)

Liên hệ QC

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

ba.ho_eis

Thành viên chính thức
Tham gia
1/4/10
Bài viết
52
Được thích
16
Em muốn tách chuỗi ký tự trong trường hợp này. Mong Anh Chị giúp đỡ.
Ví dụ: ABC#123GH#HKKH1212
ABCD#12HG#KHHHH

Trong file excel của em có rất nhiều mã hàng như vậy. Giờ em muốn láy chuỗi ký tự từ ký tự từ "#" đến ký tự "#"
Kết quả của VD trên là: 123GH VÀ 12HG

Em cần dùng công thức gì. Em cảm ơn A/C
 
Em muốn tách chuỗi ký tự trong trường hợp này. Mong Anh Chị giúp đỡ.
Ví dụ: ABC#123GH#HKKH1212
ABCD#12HG#KHHHH

Trong file excel của em có rất nhiều mã hàng như vậy. Giờ em muốn láy chuỗi ký tự từ ký tự từ "#" đến ký tự "#"
Kết quả của VD trên là: 123GH VÀ 12HG

Em cần dùng công thức gì. Em cảm ơn A/C

thử công thức này xem:
PHP:
=TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",255)),255,255))
 
Em muốn tách chuỗi ký tự trong trường hợp này. Mong Anh Chị giúp đỡ.
Ví dụ: ABC#123GH#HKKH1212
ABCD#12HG#KHHHH

Trong file excel của em có rất nhiều mã hàng như vậy. Giờ em muốn láy chuỗi ký tự từ ký tự từ "#" đến ký tự "#"
Kết quả của VD trên là: 123GH VÀ 12HG

Em cần dùng công thức gì. Em cảm ơn A/C
Thử hàm tự tạo này xem sao:
Ở cửa sô Excel - > ALT + F11 -> cửa sổ VBA mở ra -> Tab Insert Module -> Paste đoạn code này vào:
Mã:
Function Tach(Rng As String) As String
    Tach = Split(Rng, "#")(1)
End Function
Quay lại bảng tính, dùng hàm
Mã:
=Tach(chuỗi cần tách)
 
Thử sử dụng Text to Columns.

Cách thực hiện trong Excel 2003:

Chọn vùng dữ liễu cần tách, từ menu vào Data >Text to Columns, cửa sổ Convert Text to Columns Wizard - Step 1 of 3 xuất hiện, đánh dấu vào mục Delimited và nhấn Next, cửa sổ Convert Text to Columns Wizard - Step 2 of 3 xuất hiện, click vào hình vuông lớn bên phải mục Other và gõ dấu #, bây giờ khung Data preview bên dưới bạn sẽ thấy đã tách ra, nhấn nút Finish để kết thúc, bạn sẽ được kết quả tách.
 
Chơi thêm 2 cách tà đạo nữa.

Dùng code:
Ví dụ: Bạn có tên sheet là THEO_DOI, với vùng chứa dữ liệu là A5:A100

PHP:
Sub GPE()    

Sheets("THEO_DOI").Range("A5:A100").TextToColumns , OtherChar:="#", _        
           FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1))
           
           Range("A5").Select

End Sub

Dùng hàm cho B5,
Fill ngang và Fill xuống.

=TRIM(MID(SUBSTITUTE($A5,"#",REPT(" ",99)),(COLUMN(A$5)*99)-98,99))



 
Lần chỉnh sửa cuối:
Em muốn tách chuỗi ký tự trong trường hợp này. Mong Anh Chị giúp đỡ.
Ví dụ: ABC#123GH#HKKH1212
ABCD#12HG#KHHHH

Trong file excel của em có rất nhiều mã hàng như vậy. Giờ em muốn láy chuỗi ký tự từ ký tự từ "#" đến ký tự "#"
Kết quả của VD trên là: 123GH VÀ 12HG

Em cần dùng công thức gì. Em cảm ơn A/C
Mã:
Function Tachchuoi(St As String)
    Dim t As Long, i, kq
    t = InStr(St, "#")
    i = Right(St, Len(St) - t)
    kq = Left(i, InStr(i, "#") - 1)
    Tachchuoi = kq
End Function
=Tachchuoi(Ô cần tách)
 
Thử hàm tự tạo này xem sao:
Ở cửa sô Excel - > ALT + F11 -> cửa sổ VBA mở ra -> Tab Insert Module -> Paste đoạn code này vào:
Mã:
Function Tach(Rng As String) As String
    Tach = Split(Rng, "#")(1)
End Function
Quay lại bảng tính, dùng hàm
Mã:
=Tach(chuỗi cần tách)

nếu Rng không có "#" thì sẽ bị #value!
muốn tránh lỗi này phải dùng:
Tach = Split(Rng & "#", "#")(1)
 
Em muốn lấy ký tự đầu đến ký tự #. Em phải dùng công thức nào A/C.
Ví dụ:
[TABLE="width: 259"]
[TR]
[TD]3030SF/W#S5AY30#44IJUN05 =>3030SF/W
[/TD]
[/TR]
[TR]
[TD]30523MF/W#QWOVE32#44INOV27=>30523MF/W
[/TD]
[/TR]
[/TABLE]

Em cảm ơn.
 
Trường hợp em muốn lấy những ký tự từ phải đến # thì em phải dùng công thức nào ạ. Em thử rùng RIGHT nhưng ko được.
Anh Chị xem giúp em ạ.
Ví dụ: 3030SF/W#S5AY30#44IJUN05 ==> 44IJUN05
Em c
ảm ơn
 
Trường hợp em muốn lấy những ký tự từ phải đến # thì em phải dùng công thức nào ạ. Em thử rùng RIGHT nhưng ko được.
Anh Chị xem giúp em ạ.
Ví dụ: 3030SF/W#S5AY30#44IJUN05 ==> 44IJUN05
Em c
ảm ơn

Giả sử ô A 1 của bạn chứa chuỗi kia nếu muốn làm theo CT thì bạn dùng như thế này :

=RIGHT(A1,LEN(A1)-MAX(IFERROR(FIND("#",A1,ROW(INDIRECT("1:"&LEN(A1)))),0)))

CT kết thúc bằng CTRL+SHIFT+ENTER
 
Góp 1 công thức (Với trường hợp của bạn có 2 ký tự #).
A2 = 3030SF/W#S5AY30#44IJUN05
Kết quả tại B2:
B2 = RIGHT(A2,LEN(A2)-FIND("#",A2,FIND("#",A2)+1))

Lúc đầu em cũng đã nghĩ tới cách này , nhưng mà trường hợp nếu có nhiều dấu # thì cũng hơi mết đấy !
 
Trường hợp em muốn lấy những ký tự từ phải đến # thì em phải dùng công thức nào ạ. Em thử rùng RIGHT nhưng ko được.
Anh Chị xem giúp em ạ.
Ví dụ: 3030SF/W#S5AY30#44IJUN05 ==> 44IJUN05
Em c
ảm ơn
Chọn ô cần lấy. Bấm Ctrl + H.
Find What gõ: *#
Replace With: để trống
P/s: Lấy bên trái hoặc bên phải thì đều dùng Ctrl + H được hết.
 
Lúc đầu em cũng đã nghĩ tới cách này , nhưng mà trường hợp nếu có nhiều dấu # thì cũng hơi mết đấy !

Nhiều ký tự "#" thì lại dùng công thức tách họ tên cơ bản nhất:
Mã:
=TRIM(RIGHT(SUBSTITUTE(A1,"#",REPT(" ",1000)),1000))
Vậy thôi
 
Nhiều ký tự "#" thì lại dùng công thức tách họ tên cơ bản nhất:
Mã:
=TRIM(RIGHT(SUBSTITUTE(A1,"#",REPT(" ",1000)),1000))
Vậy thôi

Vâng ạ . Nhưng mà CT này của chú chỉ đúng trong trường hợp nếu sau dấu # cuối cùng <=1000 ký tự thôi, còn nếu nhiều hơn thì nó lấy sẽ bị thiếu, tức là nếu muốn dùng hàm này

ta phải biết trước độ dài của chuỗi cần lấy phải <=1000. Về mặt thực tế thì hiếm khi xảy ra trường hợp như thế nhưng trên phương diện lý thuyết

thì đúng là làm như vậy chưa triệt để lắm ạ
 
Lần chỉnh sửa cuối:
Vâng ạ . Nhưng mà CT này của chú chỉ đúng trong trường hợp nếu sau dấu # cuối cùng <=1000 ký tự thôi, còn nếu nhiều hơn thì nó lấy sẽ bị thiếu, tức là nếu muốn dùng hàm này

ta phải biết trước độ dài của chuỗi cần lấy phải <=1000. Về mặt thực tế thì hiếm khi xảy ra trường hợp như thế nhưng trên phương diện lý thuyết

thì đúng là làm như vậy chưa triệt để lắm ạ
Thay số 1000 thành LEN(A1) là được, đúng không?
Tuy nhiên, trong những trường hợp cụ thể cũng không cần quá máy móc, bởi trước giờ chắc chẳng ai nhìn thấy chuỗi trong 1 cell mà lại có độ dài lớn đến vài ngàn ký tự
Nói chung cứ thực tế cho nó gọn!
---------------
Ngoài lề: Ngày xưa tôi cũng rất "nghiêm khắc" trong mấy vấn đề "chính xác" này. Tôi ép mình phải viết công thức đúng cho mọi trường hợp.... Bây giờ thay đổi rồi (thay đổi tư duy)... Cái gì đáng "ép" thì "ép", không đáng hãy cho qua. Mềm dẻo chút cho cuộc sống đở vất vả
Ẹc... Ẹc...
 
Thay số 1000 thành LEN(A1) là được, đúng không?
Tuy nhiên, trong những trường hợp cụ thể cũng không cần quá máy móc, bởi trước giờ chắc chẳng ai nhìn thấy chuỗi trong 1 cell mà lại có độ dài lớn đến vài ngàn ký tự
Nói chung cứ thực tế cho nó gọn!
---------------
Ngoài lề: Ngày xưa tôi cũng rất "nghiêm khắc" trong mấy vấn đề "chính xác" này. Tôi ép mình phải viết công thức đúng cho mọi trường hợp.... Bây giờ thay đổi rồi (thay đổi tư duy)... Cái gì đáng "ép" thì "ép", không đáng hãy cho qua. Mềm dẻo chút cho cuộc sống đở vất vả
Ẹc... Ẹc...

Đúng rồi ! Thay 1000 bằng Len(A1) là triệt để luôn chú ạ (vậy mà không nghĩ ra :-=:-=)

Hi hi. Máy móc thì cũng có mặt lợi của nó nhưng nếu máy mọc quá thì sẽ bị hạn chế nhiều cái trong đó có sự sáng tạo ạ !
 
Đúng rồi ! Thay 1000 bằng Len(A1) là triệt để luôn chú ạ (vậy mà không nghĩ ra :-=:-=)

Hi hi. Máy móc thì cũng có mặt lợi của nó nhưng nếu máy mọc quá thì sẽ bị hạn chế nhiều cái trong đó có sự sáng tạo ạ !

Cái đó tùy thôi
Ví dụ hồi xưa tôi không bao giờ chấp nhận con số 10^15 là lớn nhất mà nhất định phải là 9.99999999999999E+307
http://www.giaiphapexcel.com/forum/showthread.php?7669-Những-công-thức-độc-đáo
Nếu là bạn thì bạn sẽ chọn số nào trong 2 số trên khi viết công thức? Chọn cái dễ nhớ nhưng không chính xác (10^15) hay chọn cái tuyệt đối chính xác (9.99999999999999E+307) nhưng khó nhớ?
Ẹc... Ẹc...
 
Cái đó tùy thôi
Ví dụ hồi xưa tôi không bao giờ chấp nhận con số 10^15 là lớn nhất mà nhất định phải là 9.99999999999999E+307
http://www.giaiphapexcel.com/forum/showthread.php?7669-Những-công-thức-độc-đáo
Nếu là bạn thì bạn sẽ chọn số nào trong 2 số trên khi viết công thức? Chọn cái dễ nhớ nhưng không chính xác (10^15) hay chọn cái tuyệt đối chính xác (9.99999999999999E+307) nhưng khó nhớ?
Ẹc... Ẹc...

Dạ thưa chú ! Khi con đi thi, dả dụ đi thi môn Excel mà gặp phải trường hợp này thì con sẽ chọn con số 9.99999999999999E+307

còn khi con làm những bài tập thông thường ở nhà cũng gặp phải trường hợp như trên thì con chọn con số 10^15 để tiết kiệm thời gian ạ. //**///**///**///**/
 
Lần chỉnh sửa cuối:
Dạ thưa chú ! Khi con đi thi, dả dụ đi thi môn Excel mà gặp phải trường hợp này thì con sẽ chọn con số 9.99999999999999E+307

còn khi con làm những bài tập thông thường ở nhà cũng gặp phải trường hợp như trên thì con chọn con số 10^15 để tiết kiệm thời gian ạ. //**///**///**///**/

Hi... Hi... thì vậy đó: Tùy trường hợp cụ thể, đúng không?
 
Nếu lấy từ phải qua thì thay bằng công thức nào A/C. Em Dùng thử RIGHT nhưng ko được
080#WH#ABGDHHH#160L#19SEP15 ==|> Kết quả: 160L
Cảm ơn

Em muốn lấy thông tin từ # cuối cùng trở về trước dùng công thức nào A/C
080#WH#ABGDHHH#160L#19SEP15 ==> Kết quả: 080#WH#ABGDHHH#160L
 
Em muốn lấy thông tin từ # cuối cùng trở về trước dùng công thức nào A/C
080#WH#ABGDHHH#160L#19SEP15 ==> Kết quả: 080#WH#ABGDHHH#160L

Đưa file có vài chục dòng dữ liệu xem mới biết quy luật nó ra sao?
Đưa có 1 cái thì =LEFT(A1;LEN(A1)-8)
 
Chính xác hơn là công thức củ chuối này: =LEFT(LEFT(A2,(FIND("|",SUBSTITUTE(A2,"#","|",(LEN(A2)-LEN(SUBSTITUTE(A2,"#",""))))))),LEN(LEFT(A2,(FIND("|",SUBSTITUTE(A2,"#","|",(LEN(A2)-LEN(SUBSTITUTE(A2,"#",""))))))))-1)
 

File đính kèm

Như vầy cũng được rồi:
=LEFT(A1;LEN(A1)-LEN(TRIM(RIGHT(SUBSTITUTE(A1;"#";REPT(" ";100));100)))-1)
 
Kỳ vậy ta?.........................

Sao kỳ vậy ta, vửa nãy em Test thử rõ ràng thừa 1 ký tự # ở cuối mà giờ lại không bị thế nữa nhỉ.
Chắc bị nhầm lẫn đâu đó rồi ẹc ẹc .... Thôi thì tự gõ vào đầu 3 cái để xin lỗi thầy vậy +-+-+-++-+-+-++-+-+-+
 

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

Back
Top Bottom