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!

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

Bó tay mi tà
Ẹc.. Ẹc...
 
Upvote 0
Cảm ơn sự nhiệt tình của anh. Anh trả lời nhanh thật!
Mong mọi người còn lại có thể giúp.
 
Upvote 0
Cảm ơn sự nhiệt tình của anh. Anh trả lời nhanh thật!
Mong mọi người còn lại có thể giúp.

Bạn gửi file excel lên đi, may ra còn có khí thế để làm đúng &đầy đủ
Nếu chỉ có hình như vậy thì xem cái này có được không?
Ô C2 dùng thử: =IF(LEN(B2)>=LEN(A2),"No description",SUBSTITUTE(A2,B2,"")) rồi fill xuống !
 
Upvote 0
trước tiên phải tính B2 đã chứ?

B2 =IF(ISERROR(FIND("/";A1;1));A1;LEFT(A1;FIND(" ";A1;FIND("/";A1;1)-8)-1))

Con số 8 đó, gia giảm theo thực tế dữ liệu, thì dụ trong dữ liệu mẫu:
1.
- chữ ngắn nhất trước dấu / đầu tiên OU 2 ký tự
- chữ ngắn nhất trước khoảng trắng cuối cùng là WIDE 4 ký tự.
- thêm 1 khoảng trắng 1 ký tự, cộng bản thân ký tự / nữa
- cộng là 8
2.
- chữ dài nhất trước dấu / đầu tiên LEATHER = 6 ký tự
- thêm 1 khoảng trắng 1 ký tự và bản thân ký tự /
- cộng cũng là 8

2 cái bằng nhau, dễ xử


Rồi cột C làm theo datbutmuc
 
Lần chỉnh sửa cuối:
Upvote 0
trước tiên phải tính B2 đã chứ?

B2 =IF(ISERROR(FIND("/";A1;1));A1;LEFT(A1;FIND(" ";A1;FIND("/";A1;1)-7)-1))

Con số 7 đó, gia giảm theo thực tế dữ liệu, thì dụ trong dữ liệu mẫu:
1.
- chữ ngắn nhất trước dấu / đầu tiên OU 2 ký tự
- chữ ngắn nhất trước khoảng trắng cuối cùng là WIDE 4 ký tự.
- thêm 1 khoảng trắng 1 ký tự
- cộng là 7
2.
- chữ dài nhất trước dấu / đầu tiên LEATHER = 6 ký tự
- thêm 1 khoảng trắng 1 ký tự
- cộng cũng là 7

2 cái bằng nhau, dễ xử


Rồi cột C làm theo datbutmuc
Thầy thử test cái này xem sao Thầy, vì chưa nắm chắc quy luật lấy text của chủ topic, nhìn dữ liệu tạm thời hiểu thế này:
- Nếu có "/" thì tách dữ liệu làm 2 cell
- Quy tắc tách: từ "/" đầu tiên, lui lại đụng khoảng trắng thì ngừng, lấy bên trái dữ liệu tới trước khoảng trắng 1 ký tự
Còn màu mè (làm sau) và cell kế bạn Datbutmuc làm rồi
Cứ phải chờ ý kiến của chủ topic may ra mới biết đường mà làm
Híc
Mã:
Public Function ten(cll As String)
  Dim i, j As Integer
    i = InStr(1, cll, "/")
      If i = 0 Then ten = cll: Exit Function
        j = InStrRev(cll, " ", i)
        ten = Left(cll, j - 1)
End Function
 
Upvote 0
đúng gòy Cò ơi. Quy luật tách có lẽ vậy đó. Dùng VBA có vụ Inverse chứ hàm Excel hông có, phải làm tà đạo.
 
Upvote 0
trước tiên phải tính B2 đã chứ?

B2 =IF(ISERROR(FIND("/";A1;1));A1;LEFT(A1;FIND(" ";A1;FIND("/";A1;1)-8)-1))

Con số 8 đó, gia giảm theo thực tế dữ liệu, thì dụ trong dữ liệu mẫu:
1.
- chữ ngắn nhất trước dấu / đầu tiên OU 2 ký tự
- chữ ngắn nhất trước khoảng trắng cuối cùng là WIDE 4 ký tự.
- thêm 1 khoảng trắng 1 ký tự, cộng bản thân ký tự / nữa
- cộng là 8
2.
- chữ dài nhất trước dấu / đầu tiên LEATHER = 6 ký tự
- thêm 1 khoảng trắng 1 ký tự và bản thân ký tự /
- cộng cũng là 8

2 cái bằng nhau, dễ xử


Rồi cột C làm theo datbutmuc
Trường hợp này có thể sử dụng thuật toán tách tên, khỏi phải tính toán số ký tư. Việc nhẩm tính số ký tự đôi khi không cho kết quả chính xác.
Sử dụng thuật toán tách tên, lấy phần đuôi trước. Sau khi có phần đuôi sẽ lấy phần còn lại là phần đầu
Mã:
C1=IF(ISERROR(FIND("/",A1)),"no description",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100)))
Mã:
B1=SUBSTITUTE(A1,C1,"")
 
Upvote 0
Tìm dấu "/" đầu tiên thì la ra rồi! Và dữ liệu của bạn phải theo một quy tắc nhất định thì hàm mới hoạt động nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Trường hợp này có thể sử dụng thuật toán tách tên, khỏi phải tính toán số ký tư. Việc nhẩm tính số ký tự đôi khi không cho kết quả chính xác.
Sử dụng thuật toán tách tên, lấy phần đuôi trước. Sau khi có phần đuôi sẽ lấy phần còn lại là phần đầu
Mã:
C1=IF(ISERROR(FIND("/",A1)),"no description",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100)))

Công thức trên không cho kết quả đúng với "cl nylon ou/light grey/wh" - ô A6 & A7 (trường hợp chuỗi có >= 2 dấu "/" và cách nhau bởi khoảng trắng)
Nên đúng ra C1 phải như thế này:
=IF(ISERROR(FIND("/",A1)),"no description",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),FIND("/",SUBSTITUTE(A1," ",REPT(" ",100))))))
Hoặc tổng quát hơn:
=IF(ISERROR(FIND("/",A1)),"no description",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),LEN(SUBSTITUTE(A1," ",REPT(" ",100)))+100-FIND("/",SUBSTITUTE(A1," ",REPT(" ",100))))))
 
Upvote 0
Rất cảm ơn mọi ngươi đã tích cực hưởng ứng.
Qua quá trỉnh kt thì code VB của Mr. concogia hoạt động rất tốt. Tuy vẫn còn thiếu hàm để lọc description; có thể kết hợp với hàm của Mr. huuthang. Đồng thời cũng cảm ơn mọi người còn lại đều có những ý kiến rất hay tuy chưa xử lý được triệt để vấn đề.
 
Upvote 0
Thật là tuyệt nếu mr. concogia có thể phát minh thêm một đoạn code cho description luôn.
 
Upvote 0
Thật là tuyệt nếu mr. concogia có thể phát minh thêm một đoạn code cho description luôn.
Híc, bạn beray3088 vui tính thật, mình mà PHÁT MINH ra được cái code í chắc Việt Nam vô địch "Quơ cấp" quá
Thôi thì nếu cái lấy tên mà đúng ý bạn thì tiếp cái này theo yêu cầu nhé:
Nếu chắc chắn là cái "thằng" descrip... nằm kế bên phải của "tên" thì dùng "em" này
Mã:
Public Function beray1(cll As Range)
  If cll = cll.Offset(0, 1) Then
    beray1 = "No description"
  Else
    beray1 = Right(cll, Len(cll) - Len(cll.Offset(0, 1)) - 1)
  End If
End Function
còn nếu nó năm "búa xua" thì dùng "chú" này:
Mã:
Public Function beray(cll, ten As Range)
  If cll = ten Then
    beray = "No description"
  Else
    beray = Right(cll, Len(cll) - Len(ten) - 1)
  End If
End Function
Thật ra khi lọc được tên rồi thì bạn đặt công thức cho cái "thằng" descripption cũng được mà chẳng cần "kốt, kiếc" gì cả
 
Upvote 0
Thật là tuyệt nếu mr. concogia có thể phát minh thêm một đoạn code cho description luôn.
Hai trong một luôn cho nó gọn.
PHP:
Public Function Tach(Str As String, Optional Op As Byte = 1)
    Tach = Left(Str, InStrRev(Str & " /", " ", InStr(Str & " /", "/")) - 1)
    If Op <> 1 Then Tach = IIf(Tach = Str, "No description", Right(Str, Abs(Len(Str) - Len(Tach) - 1)))
End Function
 

File đính kèm

Upvote 0
2 anh thân,

Một thắc mắc nho nhỏ là; trong trường hợp mình muốn lấy test triệt để ko cỏn chữ BLACK,BLUE,WHIT thì thế nào. Đa số sau khi =tach(A1,1) xong thì kết quả như bên dưới.

View attachment 48621
NPC RAD II JACQUARD BLACK NPC RAD II JACQUARD BLACK ULTRA VERSAFLEX LOW BLACK ULTRA VERSAFLEX LOW BLUE
SET ROYALE SLIM MONO WHIT SET ROYALE SLIM MONO WHIT SET ROYALE SLIM MONO WHIT
 
Lần chỉnh sửa cuối:
Upvote 0
2 anh thân,

Một thắc mắc nho nhỏ là; trong trường hợp mình muốn lấy test triệt để ko cỏn chữ BLACK,BLUE,WHIT thì thế nào. Đa số sau khi =tach(A1,1) xong thì kết quả như bên dưới.

View attachment 48621
NPC RAD II JACQUARD BLACK NPC RAD II JACQUARD BLACK ULTRA VERSAFLEX LOW BLACK ULTRA VERSAFLEX LOW BLUE
SET ROYALE SLIM MONO WHIT SET ROYALE SLIM MONO WHIT SET ROYALE SLIM MONO WHIT
Lấy text triệt để là như thế nào. Cái nào cũng phải có quy tắc thì mới làm được. Bạn phải nêu ra một quy tắc cụ thể chứ ngoài BLACK, BLUE, WHITE ra thì còn GREEN hay YELLOW... nào nữa.
 
Upvote 0
Thật sự hiện tại vẫn còn tồn tại trường hợp có thêm MEN, WO, KID ở đằng sau nữa đó anh. Và quy luật của chúng ta là đôi khi chỉ là màu thôi, đôi khi có thêm MEN, WO, KID.
Nhờ anh xem lại giúp.
 
Upvote 0
Thật sự hiện tại vẫn còn tồn tại trường hợp có thêm MEN, WO, KID ở đằng sau nữa đó anh. Và quy luật của chúng ta là đôi khi chỉ là màu thôi, đôi khi có thêm MEN, WO, KID.
Nhờ anh xem lại giúp.
Đã là quy luật thì không thể nào là đôi khi thế này đôi khi thế khác được. Phải rõ ràng, cụ thể. Nếu như bạn không thể rút ra được quy luật thì hãy tạo một file giải lập bao gồm dữ liệu và kết quả mong muốn. Trong file này bạn hãy cho ví dụ cho tất cả các trường hợp có thể xảy ra.
 
Upvote 0
Anh vui lòng xem hình dưới đây:

View attachment 48684

Ngoài quy luật mà anh em đã thảo luận quy luật mới phát sinh lả những text tô màu đỏ.
 
Upvote 0
Web KT

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

Back
Top Bottom