Tách chuỗi ký tự nằm giữa hai ký tự đặc biệt (1 người xem)

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

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

KhoiSMC

Thành viên thường trực
Tham gia
19/6/09
Bài viết
248
Được thích
32
Thưa các bạn,

Mình đã tách được một chuỗi ký bất kỳ nằm giữa dấu "-" theo công thức sau: (chuỗi này lọc từ một đoạn text trong ô A1)
Mã:
=LEFT(TRIM(MID(A1,FIND("-",A1)+1,LEN(A1))),FIND("-",TRIM(MID(A1,FIND("-",A1)+1,LEN(A1))))-1)

Mình đang phát triển thêm công thức trên để lọc ra được nhiều chuỗi ký tự được định nghĩa bởi giữa hai ký tự đặc biệt khác, ví dụ như sau:

Tại ô A1 có đoạn text: " aa- nội dung của aa xxx - bb- nội dung của bb xxx - cc- nội dung của cc xxx -"

Giải thích:
- Cặp hai ký tự đặc biệt trong đoạn text trên là bắt đầu là "aa-" và kết thúc là "-"
tương tự hai ký tự đặc biệt khác bắt đầu là "bb-" và kết thúc là "-"
.... bắt đầu là "cc-" và kết thúc là "-"

Kết quả:
Tại ô B1 lọc ra chuỗi ký tự nằm giữa cặp "aa-" và "-": kết quả tại B1 là: "nội dung của aa xxx"
Tại ô C1 lọc ra chuỗi ký tự nằm giữa cặp "bb-" và "-": kết quả tại B1 là: "nội dung của bb xxx"
Tại ô D1 lọc ra chuỗi ký tự nằm giữa cặp "cc-" và "-": kết quả tại B1 là: "nội dung của cc xxx"

Nhờ các bạn góp ý thêm để mở rộng kết quả bài toán.

Thanks
Khoi
 
Lần chỉnh sửa cuối:
Thưa các bạn,
Mình đã tách được một chuỗi ký bất kỳ nằm giữa dấu "-" theo công thức sau: (chuỗi này lọc từ một đoạn text trong ô A1)
Mã:
=LEFT(TRIM(MID(A1,FIND("-",A1)+1,LEN(A1))),FIND("-",TRIM(MID(A1,FIND("-",A1)+1,LEN(A1))))-1)
Thanks
Khoi
Công thức tại B1, bạn kéo sang phải:
Mã:
=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",255)),255*COLUMN(A$1)-254,255))
Phát triển thêm nếu bạn muốn tách ký tự đặc biệt khác.
 
Thanks bạn, nó đã hoạt động như kết quả dưới đây.

Mình đang tìm cách kết quả không phụ thuộc vào cột phụ trợ như B, D, F nữa.

Thanks
Khoi
 

File đính kèm

  • test.xlsx
    test.xlsx
    9.1 KB · Đọc: 216
  • Untitled.jpg
    Untitled.jpg
    17.4 KB · Đọc: 71
Lần chỉnh sửa cuối:
Thanks bạn, nó đã hoạt động như kết quả dưới đây.

Mình đang tìm cách kết quả không phụ thuộc vào cột phụ trợ như B, D, F nữa.

Thanks
Khoi

Đưa file lên từ đầu là xong chuyện rồi. Dùng cái này tại B1:
Mã:
=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",255)),255*(2*COLUMNS($A:A)-1),255))
Kéo fill sang phải và xuống dưới
 
Em cám ơn thầy nhiều ạ, em đã hiểu rồi, thanks thầy

Khoi
 
Thưa thầy,

Em muốn mở rộng thêm một chút như sau nhờ thầy giúp đỡ:
- Để mở cho người sử dụng có thể chọn "ký tự bắt đầu" nhập vào tại ô B2
- Công thức căn cứ trên từ khóa tại ô B2 để lọc ra đoạn text nằm giữa từ khóa ô B2 và kết thúc bởi "-".

Ví dụ:
- Khi chọn " ký tự bắt đầu" tại ô B2 là: "aa-" thì kết quả như sau:
th1.png

- Khi chọn " ký tự bắt đầu" tại ô B2 là: "cc-" hoặc là "bb-" thì kết quả như sau:
th2.png
hoặc:
th3.png

Xin thầy hướng dẫn giúp em với ạ?

em cảm ơn thầy,
Khoii
 

File đính kèm

Lần chỉnh sửa cuối:
Công thức thầy hướng dẫn tại bài #4 em đã áp dụng rồi và đúng với yêu cầu tại bài #1 trên
Tuy nhiên khi áp dụng vào dữ liệu thật em đang xử lý thì lại tồn tại nhiều "từ khóa bắt đầu" quá nên sẽ phát sinh nhiều cột mới tìm được thông tin cần thiết.
Do vậy, em muốn để từ khóa bắt đầu là tùy biến tùy theo nhu cầu tìm kiếm của nguời sử dụng như em mô tả tại bài #6.

Nhờ thầy tiếp tục hướng dẫn em với ạ,

Em cám ơn,
Khoi
 
Lần chỉnh sửa cuối:
Cho ví dụ cụ thể đi bạn
 
- Để mở cho người sử dụng có thể chọn "ký tự bắt đầu" nhập vào tại ô B2
- Công thức căn cứ trên từ khóa tại ô B2 để lọc ra đoạn text nằm giữa từ khóa ô B2 và kết thúc bởi "-".

Khoii
Với yêu cầu này (có từ bắt đầu và có từ kết thúc) thì dùng MID và FIND,ví dụ C2 là từ kết thúc, công thức:
Mã:
=TRIM(MID(A5,FIND($B$2,A5)+LEN($B$2),FIND($C$2,$A$5,FIND($B$2,A5)+LEN($B$2)+1)-FIND($B$2,A5)-LEN($B$2)-1))
 

File đính kèm

cám ơn bạn Bum nhé

Khoi
 
cám ơn bạn Bum nhé

Khoi

Bạn sửa dùm tôi công thức trên, bỏ -1 ở cuối công thức vì đã trừ độ dài của B2 rồi.
Tham khảo thêm công thức trích chuỗi với MID và SUBSTITUTE:
Mã:
=TRIM(MID(SUBSTITUTE(SUBSTITUTE(A5,$B$2,REPT(" ",255)),$C$2,REPT(" ",255)),255,255))
 

File đính kèm

Góp vui 1 công thức cho ô B5
PHP:
=IF(COUNTIF(A5;"*"&$B$2&"*");TRIM(LEFT(SUBSTITUTE(REPLACE($A5;1;FIND($B$2;$A5)+LEN($B$2);"");"-";REPT(" ";200));200));"TeoTeo")
 

File đính kèm

Thưa các anh chị. Các anh chị có thể giúp em hoàn thiện công thức tách nhiều chuỗi tại file đính kèm được ko ạ? Em cảm ơn rất nhiều!
 

File đính kèm

File đính kèm

Lần chỉnh sửa cuối:
Mọi người có cách tách được k ạ
 
Lần chỉnh sửa cuối:
Mọi người ơi có thể giúp mình được không,
Ví dụ mình muốn tách "10x5+3" từ chuỗi ký tự "Cột B, D: 10x5+3=53" thành "10x5+3"
Ví dụ "10x5+3=53" ở A1, tại B1=left(A1,find("=",A1)-1). Mình chưa test nha, nhìn hình viết công thức thôi :)
 
Cảm ơn anh Lê Hồng Minh83 đã trả lời câu hỏi của em: VD ở ô A1 là "10x5+3=53",
 
Lần chỉnh sửa cuối:
Mọi người ơi có thể giúp mình được không,
Ví dụ mình muốn tách "10x5+3" từ chuỗi ký tự "Cột B, D: 10x5+3=53" thành "10x5+3"
Giả sử chuỗi cần tách có trong Cell B1.
Vậy bạn thử với:
PHP:
Sub abc()
   Dim St
      St = [b1]
      [c1] = Split(Split(St, ":")(1), "=")(0)
     MsgBox Split(Split(St, ":")(1), "=")(0)
End Sub
 
Giả sử chuỗi cần tách có trong Cell B1.
Vậy bạn thử với:
PHP:
Sub abc()
   Dim St
      St = [b1]
      [c1] = Split(Split(St, ":")(1), "=")(0)
     MsgBox Split(Split(St, ":")(1), "=")(0)
End Sub
A ơi a có thể nói chi tiết giúp em xem đoạn code trên ap dụng như thế nào vào exel được k ạ em cảm ơn a
 
A ơi a có thể nói chi tiết giúp em xem đoạn code trên ap dụng như thế nào vào exel được k ạ em cảm ơn a
Bạn làm như sau:
1. Gõ Alt+F11
2. Vào Insert ---> Module
3. Copy Code bài #4, dán vào Module
4. Ghi lại
5. Bấm nút Run, hoặc F5 để chạy code
Trong File tôi đã tạo nút bấm giúp bạn
 

File đính kèm

Cảm ơn anh Lê Hồng Minh83 đã trả lời câu hỏi của em: VD ở ô A1 là "Dầm dọc, ngang: 10x5+3=53", em muốn trả về kết quả là "10x5+3". ý em là:
Tách chuỗi ký tự nằm giữa hai ký tự đặc biệt khác nhau ( tách chuỗi giữa dấu ":" và dấu "=") ạ. anh xem giúp em với ạ. em cảm ơn
Vậy là hiểu nhầm rồi. :)
Bạn thử cái này nha: =RIGHT(LEFT(A2,FIND("=",A2)-1),LEN(LEFT(A2,FIND("=",A2)-1))-FIND(": ",LEFT(A2,FIND("=",A2)-1)))
 

File đính kèm

Phiền mọi người giúp em với ạ:
Vẫn từ chuỗi ký tự "10x5+3=543"
 
Lần chỉnh sửa cuối:
Phiền mọi người giúp em với ạ:
Vẫn từ chuỗi ký tự "Cột B, D: 10x5+3=53" em muốn tách phần sau dấu "=" để tách được thành "53" thì làm thế nào ạ. Ý em là: tách chuỗi sau dấu "=" ạ.
Bạn thử:
PHP:
Sub abc()
   Dim St
      St = [b1]
      '[c1] = Split(Split(St, ":")(1), "=")(0)
      [c1] = Split(St, "=")(1)
End Sub
 
hi, em hỏi cũng hơi nhiều ạ.
Mọi người xem giúp em với ạ
Em muốn tách dữ liệu "8*1,54*0,62*0,1 = 0,764" thành "8*1,54*0,62*0,1" thì phải làm thế nào ạ. em muốn tách dữ liệu trước dấu "=" ạ
 
hi, em hỏi cũng hơi nhiều ạ.
Mọi người xem giúp em với ạ
Em muốn tách dữ liệu "8*1,54*0,62*0,1 = 0,764" thành "8*1,54*0,62*0,1" thì phải làm thế nào ạ. em muốn tách dữ liệu trước dấu "=" ạ
+ Với đầu vào vẫn là B1 nhé, thì bạn dùng:
[c1] = Split(Range("B1"), "=")(0)
 
Anh Phulien1902 xem lại giúp em với ạ, em dùng thì báo là: chức năng đó không hợp lệ ạ.
 

File đính kèm

Bạn làm vậy là chưa đúng rồi. Bạn vào cửa sổ VBA và xem trong File nhé
 

File đính kèm

Mọi người giúp em với ạ: em muốn tách "15" từ chuỗi "Tnanh D2,3,4- 6 ( 15 DS)" thành "15" ạ. cảm ơn mọi người trước ạ
 
Nhanh gọn và "Phiêu lưu" hơn bạn nhiều :p
PHP:
Sub abc()
    [c1] = 15
End Sub
Khà khà, Chúc bạn 1 ngày cuối tuần vui /-*+//-*+//-*+/
Hay quá!
Code của bác quá ngắn gọn, không thể ngắn hơn.
Em cũng xin kính chúc bác & gia đình 1 ngày cuối tuần vui vẻ.
 
cảm ơn các đại ca đã nhiệt tình chỉ giáo ^_^
 
Không vấn đề gì, chỉ là học hỏi thôi mà bạn, bạn đừng ngại. Nếu tôi biết hoặc ai đó biết sẽ giúp bạn vô tư, có điều bạn không nên dùng từ đại ca trong cách nói chuyện, xem ra nó không hợp. Chúc bạn học hành tiến bộ.
 
Chào các bạn. Mình cũng đang muốn tìm hàm để tách chuỗi như sau. Nhờ các bạn chỉ giáo với. Cám ơn rất rất nhiều
111.jpg
 

File đính kèm

File đính kèm

Bạn xài thử với hàm này:
PHP:
Function GPE(Chuoi As String)
 Dim Des As String:             Dim J As Long
 Const CB As String = "Không_Tìm_Ra"
     
 Chuoi = Chuoi & " " & CB
 For J = 0 To Len(Chuoi)
    Des = Split(Chuoi, " ")(J)
    If Left(Des, 3) = "AYY" Then
        GPE = Des:          Exit Function
    ElseIf Des = CB Then
        Exit For
    End If
 Next J
 GPE = Des
End Function
 
chào các anh chị. các anh chị giúp em với ạ: e dùng hàm mà báo lỗi, ảnh chị có thể sửa hoặc viết lại giúp em được không ạ.
Nội dung của em là: tách biểu thức "1+2" giữa dấu ":" và dấu "=" từ "AAA: 1+2= 3"
tách "1+3*2" trước dấu "=" từ "1+3*2=7"
còn lại thì trả về 9999999 ( các lội dung còn lại không đúng thì trả về 9999999)
 

File đính kèm

chào các anh chị. các anh chị giúp em với ạ: e dùng hàm mà báo lỗi, ảnh chị có thể sửa hoặc viết lại giúp em được không ạ.
Nội dung của em là: tách biểu thức "1+2" giữa dấu ":" và dấu "=" từ "AAA: 1+2= 3"
tách "1+3*2" trước dấu "=" từ "1+3*2=7"
còn lại thì trả về 9999999 ( các lội dung còn lại không đúng thì trả về 9999999)
Bạn thử vầy xem
Mã:
=IFERROR(TRIM(RIGHT(SUBSTITUTE(LEFT(D7,FIND("=",D7)-1),":",REPT(" ",100)),100)),9999999)
 
Mọi người giúp em viết lại công thức này với ạ, em cảm ơn ạ:
'Trong biểu thức có dấu ":" và dấu "=" thì tách lấy nội dung trước dấu ":", còn lại không để gì ""
AAA: 1+2= 3 thành AAA
1+3*2=7 Thành tập rỗng
AAA thành tập rỗng
 

File đính kèm

Mọi người giúp em viết lại công thức này với ạ, em cảm ơn ạ:
'Trong biểu thức có dấu ":" và dấu "=" thì tách lấy nội dung trước dấu ":", còn lại không để gì ""
AAA: 1+2= 3 thành AAA
1+3*2=7 Thành tập rỗng
AAA thành tập rỗng
Đề xuất công thức cho cell E7:
Mã:
=IFERROR(IF(SEARCH("*:*=*",D7),LEFT(D7,FIND(":",D7)-1)),"")
hoặc:
Mã:
=IF(ISNUMBER(SEARCH("*:*=*",D7)),LEFT(D7,FIND(":",D7)-1),"")
 
Đề xuất công thức cho cell E7:
Mã:
=IFERROR(IF(SEARCH("*:*=*",D7),LEFT(D7,FIND(":",D7)-1)),"")
hoặc:
Mã:
=IF(ISNUMBER(SEARCH("*:*=*",D7)),LEFT(D7,FIND(":",D7)-1),"")
Sao không gộp lại luôn anh.
Mã:
=IFERROR(LEFT(D7,SEARCH(":*=",D7)-1),"")
 
Sao không gộp lại luôn anh.
Mã:
=IFERROR(LEFT(D7,SEARCH(":*=",D7)-1),"")
Ừ nhỉ! Đã SEARCH rồi còn thêm 2 dấu * ở đầu và cuối làm gì không biết. Cứ sợ là tìm không hết nên cuối cùng là có suy nghĩ mà... chưa tới bến
Ẹc... Ẹc...
 
mình muốn lấy các số trong chuỗi này, các pro hỗ trợ với!!! mình muốn lấy kết quả : 3232323335
32/32/32/33/35​
 
=SUBSTITUTE(A1,"/","")
 
Công thức tại #56+0 nếu muốn trả về số có thể tính toán được
 
Mình muốn tách lấy chuỗi 10.08369 ( sau dấu + thứ 3 và sau chữ Cam. thì viết công thức như nào? ( không dùng VBA )
6+12.08+9.00316+10.08369 Cam ($13,431 USD)
 
=MID(SUBSTITUTE(SUBSTITUTE(A1,"+",REPT(" ",100)),"Cam",REPT(" ",100)),300,100)+0
 

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

Back
Top Bottom