Cắt ký tự có điều kiện (1 người xem)

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

Mùi Phí

Thành viên mới
Tham gia
15/6/17
Bài viết
24
Được thích
4
Giới tính
Nữ
Hằng ngày em cần phải nhập thủ công số lượng sản phẩm theo từng mã hàng (File đính kèm). Vì nhập thủ công nên sai sót rất nhiều.
Mọi người có thể giúp em sử dụng công thức để nhập số lượng theo từng sản phẩm của từng đơn hàng không ak?
Em cảm ơn mọi người
 

File đính kèm

Có phải vùng cần tìm nằm trong ngoặc đơn không?
Làm sao phân biệt U và TU và UỐNG bây giờ?
Còn lại thì không vấn đề.
 
Hằng ngày em cần phải nhập thủ công số lượng sản phẩm theo từng mã hàng (File đính kèm). Vì nhập thủ công nên sai sót rất nhiều.
Mọi người có thể giúp em sử dụng công thức để nhập số lượng theo từng sản phẩm của từng đơn hàng không ak?
Em cảm ơn mọi người
 

File đính kèm

Hằng ngày em cần phải nhập thủ công số lượng sản phẩm theo từng mã hàng (File đính kèm). Vì nhập thủ công nên sai sót rất nhiều.
Mọi người có thể giúp em sử dụng công thức để nhập số lượng theo từng sản phẩm của từng đơn hàng không ak?
Em cảm ơn mọi người
Dòng này:
TRẦN THỊ HUYỀN(2DN)
và dòng này:
NGUYỄN VĂN GIANG 35T (2KV)
thì thuộc "thể loại" nào?
 
Dài quá
Mã:
C3=IFERROR(RIGHT(SUBSTITUTE(TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(MID(LEFT($B3,FIND(")",$B3)-1),FIND("(",$B3)+1,LEN($B3)),"+"," "),","," "))&" ",C$2&" ",REPT(" ",100)),100))," ",REPT(" ",10)),10)*1,)
 
Hằng ngày em cần phải nhập thủ công số lượng sản phẩm theo từng mã hàng (File đính kèm). Vì nhập thủ công nên sai sót rất nhiều.
Mọi người có thể giúp em sử dụng công thức để nhập số lượng theo từng sản phẩm của từng đơn hàng không ak?
Em cảm ơn mọi người
Cách khác dùng CT mảng ở C3:
Mã:
C3=MAX(IFERROR(--SUBSTITUTE(TRIM(MID(SUBSTITUTE(MID($B3,FIND("(",$B3)+1,FIND(")",$B3)-FIND("(",$B3)-1),{"+","-",","},REPT(" ",100)),(ROW($1:$10)-1)*100+1,100)),D$2,""),))
Ctrl+Shift+Enter fill xuống, fill sang phải!!!
 
Em không hiểu lắm nhưng em cảm ơn mọi người đã giúp em. Excell thật là kỳ diệu <3
 
Tức là thế nào ak. Công thức chưa đầy đủ ak?
Bị sót trường hợp dấu trừ. Sửa lại vầy mới đủ.
Mã:
=IFERROR(RIGHT(SUBSTITUTE(TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(LEFT($B3,FIND(")",$B3)-1),FIND("(",$B3)+1,LEN($B3)),"+"," "),"-"," "),","," "))&" ",C$2&" ",REPT(" ",100)),100))," ",REPT(" ",10)),10)*1,)
 
Tôi làm bài này gần giống cách của bài 3 nhưng bằng công thức. Cách làm như sau:
1> Đạt con trỏ chuột tại dòng 3 (bắt buộc), bấm Ctrl + F3 đặt name tên là arr có công thức tham chiếu:
Mã:
=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(MID(SUBSTITUTE(SUBSTITUTE(Sheet1!$B3,"(", REPT(" ",255)),")",REPT(" ",255)),255,255)),"-","+"),",","+"),"+",""",""")&"""}")
2> Tại C3, gõ công thức:
Mã:
=IFERROR(LOOKUP(10^10,--SUBSTITUTE(arr,C$2,"")),"")
Kéo fill sang phải và xuống dưới
----------------------------------
Làm chơi thôi chứ tôi không ủng hộ kiểu nhập liệu tào lao rồi cố ép Excel phải "giải mã" cho bằng được ý mình. Excel có tốt đến đâu chúng ta cũng chỉ nên xem nó là 1 "đối tác làm ăn" với có những quy định riêng buộc cả 2 bên phải tuân thủ. Nếu chúng ta cứ thích sao làm vậy có nghĩa là ta không xem trọng "đối tác", hậu quả tự ta gánh chịu!
 
Bị sót trường hợp dấu trừ. Sửa lại vầy mới đủ.
Mã:
=IFERROR(RIGHT(SUBSTITUTE(TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(LEFT($B3,FIND(")",$B3)-1),FIND("(",$B3)+1,LEN($B3)),"+"," "),"-"," "),","," "))&" ",C$2&" ",REPT(" ",100)),100))," ",REPT(" ",10)),10)*1,)
Em nghiên cứu các hàm a sử dụng thì mới hiểu được hàm trim và substitute...
Hàm rept sử dụng trong công thức này với mục đích gì ak.
Anh có thể giải thích giúp em cả công thức này không ak? Em cảm ơn!
 
Tôi làm bài này gần giống cách của bài 3 nhưng bằng công thức. Cách làm như sau:
1> Đạt con trỏ chuột tại dòng 3 (bắt buộc), bấm Ctrl + F3 đặt name tên là arr có công thức tham chiếu:
Mã:
=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(MID(SUBSTITUTE(SUBSTITUTE(Sheet1!$B3,"(", REPT(" ",255)),")",REPT(" ",255)),255,255)),"-","+"),",","+"),"+",""",""")&"""}")
2> Tại C3, gõ công thức:
Mã:
=IFERROR(LOOKUP(10^10,--SUBSTITUTE(arr,C$2,"")),"")
Kéo fill sang phải và xuống dưới
----------------------------------
Làm chơi thôi chứ tôi không ủng hộ kiểu nhập liệu tào lao rồi cố ép Excel phải "giải mã" cho bằng được ý mình. Excel có tốt đến đâu chúng ta cũng chỉ nên xem nó là 1 "đối tác làm ăn" với có những quy định riêng buộc cả 2 bên phải tuân thủ. Nếu chúng ta cứ thích sao làm vậy có nghĩa là ta không xem trọng "đối tác", hậu quả tự ta gánh chịu!
Em làm thử mà nó không ra kết quả a ak :(
 
Em chào tất cả mọi người. Trong quá trình làm, em phát sinh ra một số lỗi nhưng không biết giải quyết thế nào. Em mong mọi người giúp đỡ em ạ
Em sử dụng công thức của mọi người để làm thì gần như có thể điền chính xác. Các trường hợp công thức không khắc phục được do lỗi người nhập thì em sửa bằng tay.
- Em đã làm thêm 1 cột để cắt thuốc riêng để check lại cho dễ. Nếu tách thành 2 bước: 1 cắt thuốc theo mã, 2 nhập số lượng sang cột mã thuốc thì em có thể sử dụng công thức nào ngắn gọn hơn không ạ.
- Lúc làm, những mã thuốc có ký tự trùng nhau ví dụ: X, YX, U, YU thì công thức không nhảy kết quả. Mọi người giúp em khắc phục tình trạng này được không ạ
Em cảm ơn mọi người
 

File đính kèm

Em chào tất cả mọi người. Trong quá trình làm, em phát sinh ra một số lỗi nhưng không biết giải quyết thế nào. Em mong mọi người giúp đỡ em ạ
Em sử dụng công thức của mọi người để làm thì gần như có thể điền chính xác. Các trường hợp công thức không khắc phục được do lỗi người nhập thì em sửa bằng tay.
- Em đã làm thêm 1 cột để cắt thuốc riêng để check lại cho dễ. Nếu tách thành 2 bước: 1 cắt thuốc theo mã, 2 nhập số lượng sang cột mã thuốc thì em có thể sử dụng công thức nào ngắn gọn hơn không ạ.
- Lúc làm, những mã thuốc có ký tự trùng nhau ví dụ: X, YX, U, YU thì công thức không nhảy kết quả. Mọi người giúp em khắc phục tình trạng này được không ạ
Em cảm ơn mọi người
Thay công thức sau:
PHP:
F4=IFERROR(AGGREGATE(15,6,--MID(LOOKUP(10^10,FIND((ROW($1:$10)-1)&F$2,$E4),(ROW($1:$10)-1)&F$2),ROW($1:$10),1),1),0)
Chỉ Enter, rồi fill xuống.

*Xem lại thì thấy vầy gọn hơn:
PHP:
F4=IFERROR(LOOKUP(10^10,FIND((ROW($1:$10)-1)&F$2,$E4),ROW($1:$10)-1),0)
Chỉ Enter, rồi fill xuống.
:):):)

Chúc bạn ngày vui.
 

File đính kèm

Lần chỉnh sửa cuối:
Thay công thức sau:
PHP:
F4=IFERROR(AGGREGATE(15,6,--MID(LOOKUP(10^10,FIND((ROW($1:$10)-1)&F$2,$E4),(ROW($1:$10)-1)&F$2),ROW($1:$10),1),1),0)
Chỉ Enter, rồi fill xuống.

*Xem lại thì thấy vầy gọn hơn:
PHP:
F4=IFERROR(LOOKUP(10^10,FIND((ROW($1:$10)-1)&F$2,$E4),ROW($1:$10)-1),0)
Chỉ Enter, rồi fill xuống.
:):):)

Chúc bạn ngày vui.
Em không hiểu ở chỗ row 1:10 ak. Nếu em làm cho 1000 dòng thì em có phải sửa công thức tương ứng không ak.
Xin lỗi vì em dốt không hiểu công thức ^^
 
Em không hiểu ở chỗ row 1:10 ak. Nếu em làm cho 1000 dòng thì em có phải sửa công thức tương ứng không ak.
Xin lỗi vì em dốt không hiểu công thức ^^
Công thức ROW($1:$10)-1)&F$2 không liên can đến file có 10 dòng hay 1000 dòng nên bạn cứ yên tâm! :)

Chẳng qua nó lấy từ số 0 đến số 9 ghép với tên tiêu đề của cột, ví dụ: F2 là "HB", H2 là "AK"...... thành 1 'Mảng', như: "0HB;1HB;2HB;3HB;4HB;5HB;6HB;7HB;8HB;9HB", rồi nó tìm trong cột E có 'em' nào giống nó nhất thì nó trả về số phù hợp, Ví dụ tại F11, nó ghép: "0HB;1HB;2HB;3HB;4HB;5HB;6HB;7HB;8HB;9HB", so với E11 có (3HB+1AK), vậy Mảng ghép sẽ báo cho Lookup() biết: "#NA;#NA;#NA; 1 ;#NA;#NA;#NA;#NA;#NA;#NA", cuối cùng số 1 khớp nhất có vị trí thứ 4 trong Mảng, nên Lookup() tìm trong Mảng ROW(1:10)-1==>{0;1;2;3;4;5;6;7;8;9} vị trí thứ 4 là số 3, nó trả về kết quả = 3

Do tôi đoán số của bạn chỉ có trong khoảng 1 đến 9 nên mới dùng công thức này, nếu bạn có số khác mà nó >9, như: (30HB+15AK) thì công thức này phải chế biến lại.

Chúc bạn ngày vui.
 
Em cảm ơn anh! Thực tế trong quá trình làm em cũng gặp nhiều trường hợp như anh ví dụ là (30HB+15AK) đó ak. Nếu viết công thức đầy đủ cho cả 2 trường hợp này thì em có thể viết thế nào ak. Em sửa công thức thế này có đúng không ak =IFERROR(LOOKUP(100^100,FIND((ROW($1:$100)-2)&AQ$2,$E4),ROW($1:$100)-2),0)

Trong công thức lookup, em không hiểu cả chỗ 10^10 nữa ak
 
Lần chỉnh sửa cuối:
Em cảm ơn anh! Thực tế trong quá trình làm em cũng gặp nhiều trường hợp như anh ví dụ là (30HB+15AK) đó ak. Nếu viết công thức đầy đủ cho cả 2 trường hợp này thì em có thể viết thế nào ak.
Trong công thức lookup, em không hiểu cả chỗ 10^10 nữa ak
1. Nếu số thay đổi khác thì bạn nhắm chừng mức cao nhất có thể phát sinh, ví dụ: nhỏ hơn 500, thì bạn thay số 10 thành 500; Nhỏ hơn 1000, thì bạn thay số 10 thành 1000, nhưng nếu là 1000 Mảng bự lắm nó sẽ làm trì trệ máy.
Như bạn ví dụ thì chỉ:
=IFERROR(LOOKUP(10^10,FIND((ROW($1:$100)-1)&AQ$2,$E4),ROW($1:$100)-1),0)​

2. Đơn giản 10^10 chỉ là 1 con số 'bự thiệt bự' :), bự hơn những con số gì chứa trong 'Mảng' phía sau. Vã lại, nó giống ký tự 'Mặt cười' 0^0 nên tôi thích dùng, chỉ vậy thôi!

Khi bạn gõ vào bất kỳ số nào sao cho lớn hơn mọi vị trí có trong chuỗi tìm, ví dụ: (3HB+1AK) có chiều dài 10 ký tự, thì bạn có thể gõ: 10,11,12...100, 1000, 10^4, 10^10 tùy hĩ.
Hàm FIND((ROW($1:$10)-1)&F$2,$E4) như bài trước giải thích, nó tìm vị trí của ký tự của dãy Mảng, như: "0HB;1HB;2HB;3HB;4HB;5HB;6HB;7HB;8HB;9HB", dùng Lookup('Số bự thiệt bự',{Mảng dò}, {Mảng kết quả}) thì nó trả về 'Trị giá lớn nhất' cuối cùng của {Mảng dò}, chính là số vị trí của 3HB trong chuỗi (3HB+1AK), tức bằng 2.
Chúc bạn ngày vui.
 
Lần chỉnh sửa cuối:
1. Nếu số thay đổi khác thì bạn nhắm chừng mức cao nhất có thể phát sinh, ví dụ: nhỏ hơn 500, thì bạn thay số 10 thành 500; Nhỏ hơn 1000, thì bạn thay số 10 thành 1000, nhưng nếu là 1000 Mảng bự lắm nó sẽ làm trì trệ máy.
Như bạn ví dụ thì chỉ:
=IFERROR(LOOKUP(10^10,FIND((ROW($1:$100)-1)&AQ$2,$E4),ROW($1:$100)-1),0)​

2. Đơn giản 10^10 chỉ là 1 con số 'bự thiệt bự' :), bự hơn những con số gì chứa trong 'Mảng' phía sau. Vã lại, nó giống ký tự 'Mặt cười' 0^0 nên tôi thích dùng, chỉ vậy thôi!

Khi bạn gõ vào bất kỳ số nào sao cho lớn hơn mọi vị trí có trong chuỗi tìm, ví dụ: (3HB+1AK) có chiều dài 10 ký tự, thì bạn có thể gõ: 10,11,12...100, 1000, 10^4, 10^10 tùy hĩ.
Hàm FIND((ROW($1:$10)-1)&F$2,$E4) như bài trước giải thích, nó tìm vị trí của ký tự của dãy Mảng, như: "0HB;1HB;2HB;3HB;4HB;5HB;6HB;7HB;8HB;9HB", dùng Lookup('Số bự thiệt bự',{Mảng dò}, {Mảng kết quả}) thì nó trả về 'Trị giá lớn nhất' cuối cùng của {Mảng dò}, chính là số vị trí của 3HB trong chuỗi (3HB+1AK), tức bằng 2.
Chúc bạn ngày vui.
Từ trước tới giờ em chưa từng sử dụng những công thức này nên toàn làm thủ công. Hôm nay em được học hỏi và hiểu thêm nhiều kiến thức. Em cảm ơn anh nhiều ak
 

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

Back
Top Bottom