Nhờ hỗ trợ lập hàm excel cho chuỗi

Liên hệ QC

nguyenan2604

Thành viên mới
Tham gia
3/7/21
Bài viết
12
Được thích
5
Chào mọi người,
Mình đang có 1 hàm excel muốn mọi người giúp đỡ.
Quy tắc như sau: Số cuối cùng của mã chạy từ 1-9, hết 9 sẽ chạy từ A-Z, hết Z sẽ lặp lại quy tắc vào số liền kề trước đó ạ
Ví dụ:
+ Mã bắt đầu: PY29200001
+ Các mã tiếp theo sẽ như sau PY29200001, PY29200002 .... PY29200009, PY2920000A, PY2920000B, ....., PY2920000Z PY29200010, PY29200011, ...., PY29200019, PY2920001A, PY2920001B, ...., PY2920001Z PY29200020, PY29200021, ...., PY29200029, PY2920002A, PY2920002B, ...., PY2920002Z...
Thực tế đây đang là quy ước khách hàng nhà mình dùng để đánh mã nguyên vật liệu. Mọi người có cách nào dùng Hàm để không phải đánh thủ công thì hỗ trợ giúp mình ạ.
Xin chân thành cảm ơn./
 

File đính kèm

  • File mẫu.xls
    142 KB · Đọc: 14
Lần chỉnh sửa cuối:
Mình làm theo ý hiểu.
Bạn xem thử, hàm lấy giá trị của dòng trước đó.
Hoặc áp cái công thức bên dưới vào ô G3, nhưng nhức não :D
PHP:
=LEFT(G2,LEN(G2)-1)&IF(RIGHT(G2,1)="Z","1",INDEX({"1";"2";"3";"4";"5";"6";"7";"8";"9";"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"},MATCH(RIGHT(G2,1),{"1";"2";"3";"4";"5";"6";"7";"8";"9";"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z"})+1))
 

File đính kèm

  • 220905 TaoMa.xlsb
    9.4 KB · Đọc: 6
Lần chỉnh sửa cuối:
Dạ mình có gửi file đã đánh thủ công và nhà cung cấp check chéo rồi ạ. Các mã đánh thủ công hiện tại đều đã được kiểm tra chuẩn. Rất mong mọi người có thể hỗ trợ giúp mình ạ sao cho giá trị tại cột dùng HÀM sẽ tương ứng giá trị cột thủ công ạ.
 
PHP:
=BASE(DECIMAL(RIGHT(E2,5),35)+1,35)
Nhờ anh @VetMini chỉ thêm, em tự đổi thành 35 vì hình như họ kg dùng số 0;
Họ có dùng số 0 đấy chứ, sau "Z" đều có 0 đấy thôi.
Cơ mà nếu không dùng "0" thì công thức như vậy bị mất "Z" chứ có mất "0" đâu :D
 
Chào mọi người,
Mình đang có 1 hàm excel muốn mọi người giúp đỡ.
Quy tắc như sau: Số cuối cùng của mã chạy từ 1-9, hết 9 sẽ chạy từ A-Z, hết Z sẽ lặp lại quy tắc vào số liền kề trước đó ạ
Ví dụ:
+ Mã bắt đầu: PY29200001
+ Các mã tiếp theo sẽ như sau PY29200001, PY29200002 .... PY29200009, PY2920000A, PY2920000B, ....., PY2920000Z PY29200010, PY29200011, ...., PY29200019, PY2920001A, PY2920001B, ...., PY2920001Z PY29200020, PY29200021, ...., PY29200029, PY2920002A, PY2920002B, ...., PY2920002Z...
Thực tế đây đang là quy ước khách hàng nhà mình dùng để đánh mã nguyên vật liệu. Mọi người có cách nào dùng Hàm để không phải đánh thủ công thì hỗ trợ giúp mình ạ.
Xin chân thành cảm ơn./
Thử:
Mã:
B3=LEFT(OFFSET($B$2,MAX(INT((ROWS($1:1)-35)/36),),),LEN(B2)-(RIGHT(B2)<>"Z"))&CHAR(IFERROR(LOOKUP(2,1/(RIGHT(B2)={"9","Z"}),{65,48}),CODE(RIGHT(B2))+1))
Enter, fill xuống.

Thân
 

File đính kèm

  • Filemẫu.xlsx
    84.9 KB · Đọc: 11
Lần chỉnh sửa cuối:
Họ có dùng số 0 đấy chứ, sau "Z" đều có 0 đấy thôi.
Cơ mà nếu không dùng "0" thì công thức như vậy bị mất "Z" chứ có mất "0" đâu :D
Bị các anh chê cười rồi :(
Mới tiếp xúc với dạng này lần đầu. Ráng sửa và và học hỏi thêm.
Giả sử mã cuối nằm tại ô L2 > dùng DECIMAL đổi Base-36 sang số, sau đó +1, đổi ngược lại sang Base-36
PHP:
=LEFT(L2,LEN(L2)-5)&REPT("0",5-LEN(BASE(DECIMAL(RIGHT(L2,5),36)+1,36)))&BASE(DECIMAL(RIGHT(L2,5),36)+1,36)
P/S: Giả sử em không muốn dùng số "0" thì phải làm gì ?
 

File đính kèm

  • 220905 File mau.xlsb
    50.5 KB · Đọc: 9
Lần chỉnh sửa cuối:
Giả sử em không muốn dùng số "0" thì phải làm gì ?
Mượn file của bạn, công thức tại E3 (đang nói tới nếu không dùng 0 nhé, chứ bài này thấy có dùng 0 đấy):
Mã:
="PY292"&BASE(DECIMAL(RIGHT(E2,5),36)+1+(MOD(DECIMAL(RIGHT(E2,5),36),36)=35),36,5)
 
Thử:
Mã:
B3=LEFT(OFFSET($B$2,MAX(INT((ROWS($1:1)-35)/36),),),LEN(B2)-(RIGHT(B2)<>"Z"))&CHAR(IFERROR(LOOKUP(2,1/(RIGHT(B2)={"9","Z"}),{65,48}),CODE(RIGHT(B2))+1))
Enter, fill xuống.

Thân
Dạ, em cảm ơn anh ạ.
Bài đã được tự động gộp:

Dạ em cảm ơn tất cả anh/chị/em đã hỗ trợ ạ.
Xin chân thành cảm ơn và chúc mọi người tuần làm việc vui vẻ ạ.
 
Mượn file của bạn, công thức tại E3 (đang nói tới nếu không dùng 0 nhé, chứ bài này thấy có dùng 0 đấy):
Mã:
="PY292"&BASE(DECIMAL(RIGHT(E2,5),36)+1+(MOD(DECIMAL(RIGHT(E2,5),36),36)=35),36,5)
Coi lại mới biết công thức bài #9 chưa chính xác lắm.

Thân
 
Lần chỉnh sửa cuối:
Thêm 1 điều không phù hợp với yêu cầu của thớt: Dùng BASE(...,...,5) số càng lớn thì càng bị mất số 0 ở giữa. Như: Nếu không tính số 0, mà bắt đầu số 1, thì tiếp theo của mã: PY2920000Z thì phải là: PY292000011 (4 số 0), nhưng do độ dài là 5 trong hàm BASE() nên nó còn 3 số 0: PY29200011 mà thôi.

Thân
Cái này em đang tính nói với bác mà không nói ấy chứ, vì yêu cầu của thớt theo dữ liệu mẫu thì serial_number luôn là 10 ký tự. Nếu lớn hơn thì cắt bớt số 0. Em tính nói tới giải thuật của bác rất hay nhưng chưa đúng ý thớt ai dè hình như bác đang hiểu sai
 
Mượn file của bạn, công thức tại E3 (đang nói tới nếu không dùng 0 nhé, chứ bài này thấy có dùng 0 đấy):
...
Nếu bạn đọc hướng dẫn cách dùng hàm BASE sẽ thấy hệ nắm trong giới hạn 2-36.
Con số 36 không phải ngẫu nhiên do MS chế ra.

Chuyện hệ 36 đã thấy rõ từ đầu.
Điểm tôi không chắc là thớt nói: "quy ước khách hàng nhà mình dùng". Lúc ra quy ước ấy, họ có nghĩ đến bài toán "viết số theo hệ", hay chỉ ăn may?
Tôi đoán là ăn may, bởi vì nếu họ cố ý dùng bài toán hệ thì họ đã cho biết từ đầu.
 
Mượn file của bạn, công thức tại E3 (đang nói tới nếu không dùng 0 nhé, chứ bài này thấy có dùng 0 đấy):
Mã:
="PY292"&BASE(DECIMAL(RIGHT(E2,5),36)+1+(MOD(DECIMAL(RIGHT(E2,5),36),36)=35),36,5)
Đã hiểu ý.
Bài #10 thì cũng đang đúng rồi. Mà do không chịu nhìn đối số của BASE(...,...,[min_length])
Sửa lại chút
Mã:
=LEFT(D2,LEN(D2)-5)&BASE(DECIMAL(RIGHT(D2,5),36)+1,36,5)
 
Nếu mã số bay tá lả từ ô này sang ô khác thì mới cần đến công thức khủng chứ trường hợp xếp ngăn nắp như trong file của thớt thì khá giản dị:

B2 ="PY" & BASE(176440301568 + ROW() - 1, 36, 8)
1 là số dòng tiêu đề
176440301568 là trị decimal của 29200000.
 
Web KT

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

Back
Top Bottom