Tìm vị trí khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất

Liên hệ QC

tieutuvodanh192

Thành viên thường trực
Tham gia
25/3/19
Bài viết
289
Được thích
322
Xin chào các Anh/Chị thành viên GPE,
Nhờ các Anh/Chị xem giúp em công thức có thể tìm chính xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất. Xin cảm ơn.
 

File đính kèm

Xin chào các Anh/Chị thành viên GPE,
Nhờ các Anh/Chị xem giúp em công thức có thể tìm chính xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất. Xin cảm ơn.
Thử:
Mã:
C2=LEFT(A2,-LOOKUP(,-TEXT(SEARCH(" ",A2,30+{1;2;3;4;5}),"[<37];\0;")))
Enter. Fill xuống.

Thân
 

File đính kèm

Dạ vâng cảm ơn anh, em sẽ cố gắng đọc hiểu công thức của anh.
Xem từng phần công thức như file kèm

Thân
Bài đã được tự động gộp:

Dạ vâng cảm ơn anh, em sẽ cố gắng đọc hiểu công thức của anh.
Cũng có thể giản lược bớt trong hàm Text() như sau:

C2=LEFT(A2,-LOOKUP(,-TEXT(SEARCH(" ",A2,30+{1;2;3;4;5}),"[<37]")))

Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Xem từng phần công thức như file kèm

Thân
Bài đã được tự động gộp:


Cũng có thể giản lược bớt trong hàm Text() như sau:

C2=LEFT(A2,-LOOKUP(,-TEXT(SEARCH(" ",A2,30+{1;2;3;4;5}),"[<37]")))

Thân
Dạ vâng cảm ơn anh rất nhiều, em có thấy rằng nếu chuỗi ký tự < 35 ký tự thì công thức sẽ báo lỗi, như vậy chèn thêm 1 điều kiện IFERROR nữa là chính xác.
Anh cho em hỏi thêm tại sao anh xét điều kiện <37, có phải vì từ dài nhất trong tiếng việt có 7 ký tự là "nghiêng" phải không ạ.
 
Công thức ngon lành. @Phan Thế Hiệp giải thích thêm giúp.
+ Chữ dài nhất trong tiếng Việt là chữ "Nghiêng" 7 ký tự thì có nên từ 1 đến 6 ?
+ Và [<37] là sao nhỉ ?
Anh cho em hỏi thêm tại sao anh xét điều kiện <37, có phải vì từ dài nhất trong tiếng việt có 7 ký tự là "nghiêng" phải không ạ.
Tôi đâu nghĩ sâu xa như các bạn vậy! Các bạn nghĩ đến chữ "nghiêng" 7 ký tự là giỏi hơn tôi rồi! :)

Nói thật lòng đó.

Đơn giản là theo yêu cầu của bài thôi:
"Công thức của em hiện tại em chỉ xét tới ký tự 31 -35 có khoảng trắng sẽ tự ngắt, như vậy thì chưa thực sự tối ưu như trường hợp tô đỏ" và
".. công thức có thể tìm chính xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất."


Cho nên cụm từ muốn lấy "CÔNG TY TNHH MTV ĐẠI TÂY DƯƠNG - CN" có 35 ký tự, cho nên khoảng trắng gần 35 nhất phải là 36 "CÔNG TY TNHH MTV ĐẠI TÂY DƯƠNG - CN ", do vậy điều kiện phải <37

Thân
 
Xin chào các Anh/Chị thành viên GPE,
Nhờ các Anh/Chị xem giúp em công thức có thể tìm chính xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất. Xin cảm ơn.
Theo tôi hiểu thì bạn muốn cắt 35 ký tự đầu, nếu vị trí cắt ở giữa một chữ thì bỏ chữ đó.
Mã:
=VLOOKUP("* ",LEFT(A2&" .",{37,36}-ROW($1:$35)),2,)
 

File đính kèm

Theo tôi hiểu thì bạn muốn cắt 35 ký tự đầu, nếu vị trí cắt ở giữa một chữ thì bỏ chữ đó.
Mã:
=VLOOKUP("* ",LEFT(A2&" .",{37,36}-ROW($1:$35)),2,)
Hình như công thức này dùng mảng 1 chiều cũng được:

=VLOOKUP("* ",LEFT(A2&" .",37-ROW($1:$6)),1,)

Còn thiếu sót gì so với yêu cầu của thớt không nhỉ!?

/-*+//-*+//-*+/
 
Hình như công thức này dùng mảng 1 chiều cũng được:

=VLOOKUP("* ",LEFT(A2&" .",37-ROW($1:$6)),1,)

Còn thiếu sót gì so với yêu cầu của thớt không nhỉ!?

/-*+//-*+//-*+/
Dư khoản trắng ở cuối (và bị lỗi nếu chuỗi ngắn hơn 30 ký tự - chỗ này tùy yêu cầu của chủ topic)
 
Thú thật là em đang cố để hiểu công thức của 2 anh chứ chưa kiểm tra kỹ hết các khả năng được ạ. :)
 
Xin chào các Anh/Chị thành viên GPE,
Nhờ các Anh/Chị xem giúp em công thức có thể tìm chính xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất. Xin cảm ơn.
Thêm một công thức cho bạn tham khảo:
Mã:
=LEFT(A2,-1-LOOKUP(,-ROW($1:$36)/(MID(A2,ROW($1:$36),1)=" ")))
C2=LEFT(A2,-LOOKUP(,-TEXT(SEARCH(" ",A2,30+{1;2;3;4;5}),"[<37];\0;")))
Công thức của anh rất hay, nhưng còn bất tiện nếu chuỗi ngắn hơn 31 hoặc chứa từ tiếng anh dài (không có dấu space) trong khoảng vị trí từ 31-36
 
xác được vị trí của khoảng trắng nhỏ hơn và gần với ký tự thứ 35 nhất
Nếu đúng theo yêu cầu này thì có thể dùng công thức này.
Mã:
=LOOKUP(34,FIND(" ",A2,ROW($1:$34)))
Hình như đang phức tạp hóa vấn đề. :)

=TRIM(LEFT(SUBSTITUTE(TRIM(A1)," ",REPT(" ", 2000),35),1000))
Nếu sau đó dùng kết quả này để dò tìm dữ liệu thì dùng hàm TRIM có vẻ không ổn.
 
Nếu sau đó dùng kết quả này để dò tìm dữ liệu thì dùng hàm TRIM có vẻ không ổn.

Thớt cần ngắt dòng để đỡ tràn khỏi trang in thôi anh.

Các ý tưởng lóe lên được úp lên diễn đàn đều tuyệt vời, và họ không bao giờ chịu cất giấu cái ý tưởng đó đi để nêu bài toán của mình.
Vậy nên trước khi trả lời thường phải đi ngược về quá khứ xem thớt đã và đang làm cái gì.
 
Thớt cần ngắt dòng để đỡ tràn khỏi trang in thôi anh.

Các ý tưởng lóe lên được úp lên diễn đàn đều tuyệt vời, và họ không bao giờ chịu cất giấu cái ý tưởng đó đi để nêu bài toán của mình.
Vậy nên trước khi trả lời thường phải đi ngược về quá khứ xem thớt đã và đang làm cái gì.
Em cần ngắt đúng chuỗi ký tự, cụ thể chính xác như anh Hữu Thắng đã mô tả: cắt 35 ký tự đầu, nếu vị trí cắt ở giữa một chữ thì bỏ chữ đó.
Việc làm này giúp em xử lý các chuỗi ký tự chính xác trước khi đẩy dữ liệu vào SAP và hệ thống thanh toán ngân hàng, thừa 1 ký tự thôi cũng sẽ bị họ Reject. Thực ra em phải xử lý 4 chuỗi liên tiếp, tức là sau khi cắt 35 ký từ đầu tiên, nếu chuỗi còn dài sẽ cắt tiếp tối đa thêm 3 lần như vậy nữa, tổng cộng tối đa 140 ký tự. Các chuỗi sau em bám theo các công thức các anh đã chỉ thì đã có thể thực hiện được rồi.
Cảm ơn các anh rất nhiều.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom