Hàm lấy text theo yêu cầu

Liên hệ QC

beray3088

Thành viên mới
Tham gia
13/10/09
Bài viết
24
Được thích
2
Thân chào tất cả các bạn!

Mình có một khó khăn và rất mong được giúp đỡ.
Hiện tại mình có một mảng dữ liệu tô đậm và mình muốn tạo một hàm mà sau khi hoàn tất chúng ta kéo xuống thì được kết quả như cột màu đỏ và cột màu xanh.
và hàm mình muốn tạo cho ô màu đỏ và ô màu xanh lần lượt như sau:
=name(A2) => HIGH WIRE
=des(A2) => LEATHER/SHARK/S
Những dòng kế tiếp đều hoàn tất với kết quả như mảng dữ liệu dưới.
Chân thành cảm ơn!

View attachment 48475
Full description
HIGH WIRE LEATHER/SHARK/S HIGH WIRE LEATHER/SHARK/S CL EVRA WIDE D CL EVRA WIDE D no description
HIGH WIRE LEATHER/SHARK/S HIGH WIRE LEATHER/SHARK/S HIGH WIRE XWIDE 4E LEATHE HIGH WIRE XWIDE 4E LEATHE no description CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH REE FLY WHITE/STEEL/ROSE REE FLY WHITE/STEEL/ROSE CLASSIC LEATHER BLK MENS CLASSIC LEATHER BLK MENS no description
 
Lần chỉnh sửa cuối:
Thân chào tất cả các bạn!

Mình có một khó khăn và rất mong được giúp đỡ.
Hiện tại mình có một mảng dữ liệu tô đậm và mình muốn tạo một hàm mà sau khi hoàn tất chúng ta kéo xuống thì được kết quả như cột màu đỏ và cột màu xanh.
và hàm mình muốn tạo cho ô màu đỏ và ô màu xanh lần lượt như sau:
=name(A2) => HIGH WIRE
=des(A2) => LEATHER/SHARK/S
Những dòng kế tiếp đều hoàn tất với kết quả như mảng dữ liệu dưới.
Chân thành cảm ơn!

View attachment 48475
Full description
HIGH WIRE LEATHER/SHARK/S HIGH WIRE LEATHER/SHARK/S CL EVRA WIDE D CL EVRA WIDE D no description
HIGH WIRE LEATHER/SHARK/S HIGH WIRE LEATHER/SHARK/S HIGH WIRE XWIDE 4E LEATHE HIGH WIRE XWIDE 4E LEATHE no description CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH CL NYLON OU/LIGHT GREY/WH REE FLY WHITE/STEEL/ROSE REE FLY WHITE/STEEL/ROSE CLASSIC LEATHER BLK MENS CLASSIC LEATHER BLK MENS no description

Thường để xử lý việc tách chuỗi text, cần phải có một qui luật nhất định thì mới giải quyết được, ở mẫu dữ liệu của bạn mình không tìm thấy 1 qui luật chung cho các dòng dữ liệu đó. Bạn hãy nêu qui luật tách chuỗi mà bạn đang làm, mình sẽ viết hàm xử lý giúp bạn. Thanks
 
Upvote 0
Xin cám ơn anhkietvn trước.

Tôi tin rằng bạn đã theo dõi những loạt bài trước và biết được quy luật của nó.
Quy luật lần này tôi nêu ra là thường xuyên xuất hiện cuối những dòng text là text mà tôi ko dùng đến(được tô màu đỏ trong hình đính kèm).
Mong rằng các bạn có thể giúp.

View attachment 48754
 
Upvote 0
Xin cám ơn anhkietvn trước.

Tôi tin rằng bạn đã theo dõi những loạt bài trước và biết được quy luật của nó.
Quy luật lần này tôi nêu ra là thường xuyên xuất hiện cuối những dòng text là text mà tôi ko dùng đến(được tô màu đỏ trong hình đính kèm).
Mong rằng các bạn có thể giúp.

View attachment 48754

Link của bạn gửi không tồn tại, bạn xem lại dùm nhé
 
Upvote 0
View attachment 48763

mình dùng funtion add image của diễn đàn.
Bạn xem thử xem có open được ko nhé.

FILE EXCEL:

Đây là file excel, các bạn mở xem giúp thế nào nhé!
Chân thành cảm ơn.

View attachment 48767

Đây là file excel, các bạn mở xem giúp thế nào nhé!
Chân thành cảm ơn.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
View attachment 48763

mình dùng funtion add image của diễn đàn.
Bạn xem thử xem có open được ko nhé.

FILE EXCEL:

Đây là file excel, các bạn mở xem giúp thế nào nhé!
Chân thành cảm ơn.

View attachment 48767

Đây là file excel, các bạn mở xem giúp thế nào nhé!
Chân thành cảm ơn.

Cho mình hỏi bạn, dữ liệu nguồn là cột A đúng không? còn cột B và cột C là cái ta phải làm để tách chuỗi từ cột A???
Nếu đúng như suy nghĩ của mình thì bảng dữ liệu bạn đưa cho minh xem, mình thấy không có theo một qui luật nào cả, nên không thể viết hàm xử lý được
 
Upvote 0
Theo như cách làm của master concogia, huuthang thì mình thấy căn cứ vào dấu "/" để xử lý những chuỗi text ở cột A.
Lần này mình thấy "BLK MENS""MENS WHT""BLACK""WHITE"
thường xuất hiện trong chuỗi text. Theo bạn căn cứ vào đăc điểm này liệu chúng ta có thể giải quyết triệt để như mong muốn được ko?
Các bạn cho mình xin ý kiến nhé!

 
Upvote 0
Theo như cách làm của master concogia, huuthang thì mình thấy căn cứ vào dấu "/" để xử lý những chuỗi text ở cột A.
Lần này mình thấy "BLK MENS""MENS WHT""BLACK""WHITE"
thường xuất hiện trong chuỗi text. Theo bạn căn cứ vào đăc điểm này liệu chúng ta có thể giải quyết triệt để như mong muốn được ko?
Các bạn cho mình xin ý kiến nhé!


Theo giải thích của bạn thì đó không gọi là qui luật, vì nó có sự biến đổi theo ngữ cảnh. Qui luật là những gì mà bất biến, không vì trạng thái, ngữ cảnh mà thay đổi. Bởi vậy ngay từ dữ liệu nhập ban đầu bạn phải tạo lập các qui luật về nguồn dữ liệu nhập, và theo đó mới có cơ sở để xử lý nguồn dữ liệu xuất được

Gợi ý: sao ta không dùng 1 chỉ dấu đặc biệt để phân cách các thành phần dữ liệu bên trong
VD: thay vì nhập CLASSIC LEATHER BLK MENS => sao ta không thử nhập CLASSIC LEATHER|BLK MENS như vậy
Ở đậy bạn sẽ thấy có dấu "|" là dấu phân cách giữa 2 thành phần trong 1 chuỗi, sau này bạn muốn tách chuỗi ra thì thực hiện nó cực kì dễ dàng
 
Upvote 0
Theo như cách làm của master concogia, huuthang thì mình thấy căn cứ vào dấu "/" để xử lý những chuỗi text ở cột A.
Lần này mình thấy "BLK MENS""MENS WHT""BLACK""WHITE"
thường xuất hiện trong chuỗi text. Theo bạn căn cứ vào đăc điểm này liệu chúng ta có thể giải quyết triệt để như mong muốn được ko?
Các bạn cho mình xin ý kiến nhé!
Hihi, lại vật lộn với bạn Berray lần nữa
Dữ liệu lần này khác lần đầu hả bạn?
Với dữ liệu như trong bài thì làm như thế này có thể "triệt...cái gì đó", nhưng không chắc lắm đâu. Nếu may mắn cấu trúc toàn bộ dữ liệu là như thế thì Ok còn không thì Tờ -eo- teo- huyền " tèo"
Bạn thử gán code này cho chạy toàn bộ dữ liệu, những em nào ra không đúng bạn đưa dữ liệu đó lên xem nhé
Thân
Mã:
Public Function thuxem(Cll As Range)
 Dim Bla, i As Long
    For i = 1 To Len(Cll)
        If Mid(Cll, i, 1) = " " Then Bla = Bla + 1
        If Bla = 2 And Mid(Cll, i, 3) = " 4E" Then thuxem = Left(Cll, i + 3): Exit Function
        If Bla = 2 Then thuxem = Left(Cll, i): Exit Function
        If i = Len(Cll) And Bla = 1 Then thuxem = Cll
    Next
End Function
 

File đính kèm

Upvote 0
Chúng ta đang xét trường hợp đây là chuỗi text được quy định ko thay đổi.
Theo cách riêng của bản thân mình thì như thế này but cảm thấy chưa được thuyết phục:
1. Sử dụng cách này để lọc những trường hợp này ra: =IF(RIGHT(A2,8)="BLK MENS",SUBSTITUTE(A2,"BLK MENS",""),IF(RIGHT(A2,8)="MENS WHT",SUBSTITUTE(A2,"MENS WHT",""),IF(RIGHT(A2,5)="BLACK",SUBSTITUTE(A2,"BLACK",""),IF(RIGHT(A2,5)="WHITE",SUBSTITUTE(A2,"WHITE",""),A2))))
2.Sử dụng lại cách của master concogiahuuthang tách trường hợp còn lại của text chứa "/".

Các bạn góp ý những phương pháp khác hay hơn nhé!
 
Upvote 0
Xin hỏi Master concogia, Master huuthang và những Master Bro GPE nhà mìnhcó cách nào xử bằng VBA. Theo mình VBA sẽ xử lý triệt để hơn.
Mình nhận định lệch thì các bạn "thông" giúp mình nhé!
 
Upvote 0
Chúng ta đang xét trường hợp đây là chuỗi text được quy định ko thay đổi.
Theo cách riêng của bản thân mình thì như thế này but cảm thấy chưa được thuyết phục:
1. Sử dụng cách này để lọc những trường hợp này ra: =IF(RIGHT(A2,8)="BLK MENS",SUBSTITUTE(A2,"BLK MENS",""),IF(RIGHT(A2,8)="MENS WHT",SUBSTITUTE(A2,"MENS WHT",""),IF(RIGHT(A2,5)="BLACK",SUBSTITUTE(A2,"BLACK",""),IF(RIGHT(A2,5)="WHITE",SUBSTITUTE(A2,"WHITE",""),A2))))
2.Sử dụng lại cách của master concogiahuuthang tách trường hợp còn lại của text chứa "/".

Các bạn góp ý những phương pháp khác hay hơn nhé!

Với list các text phải tách như Black, White,... không nhiều, cố định và gói gọn trong trường hợp của bạn
Trước tiên tạo một danh sách duy nhất cho list trên, rồi dùng công thức theo cách SUBSTITUTE của bạn:
PHP:
=TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,$F$7,""),$F$6,""),$F$3,""),$F$2,""),$F$5,""),$F$4,""))
Xem thêm file
 

File đính kèm

Upvote 0
Xin hỏi Master concogia, Master huuthang và những Master Bro GPE nhà mìnhcó cách nào xử bằng VBA. Theo mình VBA sẽ xử lý triệt để hơn.
Mình nhận định lệch thì các bạn "thông" giúp mình nhé!
Thế bạn đọc bài #28 chưa, thật ra phải nắm đúng quy luật nó đã rồi giải quyết bằng gì thì "tình tình tứ"
Dữ liệu có nhiều và bí mật không , nếu đưa lên hết may ra tìm được quy luật
 
Upvote 0
Master concogia ơi,


Em vừa test xong, kết quả trong file đính kèm.
Nhờ bác "triệt hẳn" cho em nó phát /-*+/
Em nó vẫn còn cái lòng thòng cái đuôi bác ạ. Với lại file đính kèm la hầu hết dữ liệu hiện tại.
Để phòng hờ, bác xem giúp em nếu phát sinh các màu khác thì thế nào nhé(blue,yellow,red,grey,...etc)
 
Lần chỉnh sửa cuối:
Upvote 0
Với nhưng cách làm trên đây chỉ xử lý cho những dữ liệu cố định, nếu dữ liệu có sự thay đổi cho dù là hàm hay công thức sẽ đều vô nghĩa cả, lúc đó lại phải hì hục sửa lại mấy cái công thức, mấy hàm nữa thì rất mệt
 
Upvote 0
Đồng ý với quan điểm anhkietvn, do đó trước tiên tôi đưa ra chuỗi ký tự có quy luật chung nhất sau đó những tình huống mà chúng ta thấy sẽ phát sinh thì chúng ta nêu ra đẻ bổ sung thêm hoặc phát triển và tìm thuật toán mới để giải quyết.
Toàn bộ chuỗi text trong file lần này tập hợp tương đối đầy đủ những trường hợp thường và sẽ gặp. Tôi cũng mong những phương pháp hay của bạn sẽ được chia sẻ để mọi người có cơ hội học hỏi.
Cám ơn bạn đã góp ý.
 
Upvote 0
Master concogia ơi,


Em vừa test xong, kết quả trong file đính kèm.
Nhờ bác "triệt hẳn" cho em nó phát /-*+/
Em nó vẫn còn cái lòng thòng cái đuôi bác ạ. Với lại file đính kèm la hầu hết dữ liệu hiện tại.
Để phòng hờ, bác xem giúp em nếu phát sinh các màu khác thì thế nào nhé(blue,yellow,red,grey,...etc)
Híc, tới "bi" giờ bạn mới lòi gần hết cái dữ liệu của bạn, mình nắm được sơ sơ "zồi", mình đề nghị với bạn thế này nhé:
- "Em" nào có "/" xử theo kiểu cũ.
- Các "em" còn lại: tạo một cột để bạn nhập cho mình những ký tự nào nằm ở cuối vùng dữ liệu phải "thịt" nó, trong bài mình để ở cột I( bạn muốn để chỗ "quái" nào cũng được), mình nhập những cái trong bài thôi, bạn cứ nhập tiếp những cái bạn chưa "lòi" ra nhé (là cái ý phòng hờ phát sinh đó)
Còn vài chỗ chưa ổn, để ăn cơm đã rồi làm tiếp. Híc
Mã:
Public Function Cat(cll)
 On Error Resume Next
    Dim Vung As Range, tam, kq As String, Bla, j, i As Long
      i = InStr(1, cll, "/")
        If i > 0 Then j = InStrRev(cll, " ", i): Cat = Left(cll, j - 1): Exit Function
         Set Vung = Range([i1], [i100].End(xlUp))
            Bla = InStrRev(cll, " ")
            tam = Right(cll, Len(cll) - Bla)
                j = Application.WorksheetFunction.Match(tam, Vung, 0)
                If j > 0 Then
                 kq = Replace(cll, tam, "")
                Else
                    kq = cll
                End If
    Cat = kq
End Function
Bạn gán code này vào bài giúp mình nhé
Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom