Hàm đếm số phiếu tiếp theo theo ngày

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

KhaNhu1999

Thành viên chính thức
Tham gia
15/7/21
Bài viết
59
Được thích
22
Em chào anh chị ạ, em đang làm sổ thu chi, em đang muốn làm 2 công thức để lấy số phiếu Thu-Chi tiếp theo dựa vào số liệu đã nhập, cụ thể là:
Em đặt số phiếu thu trong Excel là T230307_0001 trong đó T là mã phiếu thu/chi, 23 là 2 số cuối của năm, 03 là tháng, 07 là ngày, 0001 là số thứ tự. Mỗi ngày khác nhau thì số thứ tự sẽ về lại số 0001, số tiếp theo trong ngày sẽ là 0002, 0003... sẽ thành là T230307_0002, T230307_0003...
Em ví dụ như hình bên dưới ạ:

1678154821860.png

Anh chị có thể giúp cho em 2 công thức tại ô D2 và E2 để lấy ra số phiếu thu và chi mới nhất theo quy luật trên dựa trên dữ liệu ở cột A được không ạ?
Em cám ơn rất nhiều ạ!
 

File đính kèm

Làm đại. Xem file nhé. . . .
 

File đính kèm

Em chuyển máy tính thành ngày hôm sau là ngày 8/3 thì nó báo lỗi NUM ạ, kết quả đúng sẽ là T230308_0001 ạ, vì nó là sang ngày mới nó trở lại phiếu đầu tiên!
1678178135440.png
 
Em chuyển máy tính thành ngày hôm sau là ngày 8/3 thì nó báo lỗi NUM ạ, kết quả đúng sẽ là T230308_0001 ạ, vì nó là sang ngày mới nó trở lại phiếu đầu tiên!
View attachment 287347
Bạn có thế thử công thức này:
Mã:
="C"&REPLACE(MAX(AGGREGATE(14,6,--SUBSTITUTE(SUBSTITUTE(A2:A100,"C",""),"_",""),1),TEXT(TODAY(),"yymmdd")*10000)+1,7,,"_")
 
Hoa
Em chuyển máy tính thành ngày hôm sau là ngày 8/3 thì nó báo lỗi NUM ạ, kết quả đúng sẽ là T230308_0001 ạ, vì nó là sang ngày mới nó trở lại phiếu đầu tiên!
View attachment 287347
Hoặc sửa lại như sau :
D2="C"&TEXT(TODAY()+1,"yymmdd")&"_"&TEXT(MAX(IF(ISNUMBER(SEARCH("C230307",A:A)),VALUE(RIGHT(A:A,LEN(A:A)-9)),0))+1,"0000")
 
Sửa lại chút:
D2:
Mã:
="C"&TEXT(TODAY(),"yymmdd")&"_"&TEXT(IFERROR(AGGREGATE(14,6,RIGHT($A$2:$A$1000,4)/(LEFT($A$2:$A$1000,7)="C"&TEXT(TODAY(),"yymmdd")),1)+1,1),"00000")
 
Sửa lại chút:
D2:
Mã:
="C"&TEXT(TODAY(),"yymmdd")&"_"&TEXT(IFERROR(AGGREGATE(14,6,RIGHT($A$2:$A$1000,4)/(LEFT($A$2:$A$1000,7)="C"&TEXT(TODAY(),"yymmdd")),1)+1,1),"00000")
Góp vui 1 tí
Mã:
D2=TEXT(TODAY(),"Cyymmdd")&"_"&TEXT((14,6,(LEFT($A$2:$A$1000,7)=TEXT(TODAY(),"Cyymmdd"))*VALUE(RIGHT($A$2:$A$1000,4))+1,1),"0000")
Bạn bebo cho mình hỏi 1 tí. MÌnh thấy các bác ở đây rất hay dùng phép chia trong việc đối chiếu nhiều điều kiện. Cái này có ưu điểm gì không so với sử dụng phép nhân hay chỉ là thói quen sử dụng thôi.
1 ý nữa, mình thử dùng hàm AGGREGATE với lựa chọn max và ignore error. Công thức báo lỗi #value!. Bạn có thể giải thích hộ mình không?
Mã:
=TEXT(TODAY(),"Cyymmdd")&"_"&TEXT(AGGREGATE(4,6,(LEFT($A$2:$A$1000,7)=TEXT(TODAY(),"Cyymmdd"))*VALUE(RIGHT($A$2:$A$1000,4))+1),"0000")
 
Bạn bebo cho mình hỏi 1 tí. MÌnh thấy các bác ở đây rất hay dùng phép chia trong việc đối chiếu nhiều điều kiện. Cái này có ưu điểm gì không so với sử dụng phép nhân hay chỉ là thói quen sử dụng thôi.
1 ý nữa, mình thử dùng hàm AGGREGATE với lựa chọn max và ignore error. Công thức báo lỗi #value!. Bạn có thể giải thích hộ mình không?
Đơn giản thôi:
value * 0 = 0
value/0 = error (#DIV/0)
Nếu dùng MAX thì không phân biệt được
Khi lồng vào aggregate tham số 6, thì nó hiểu và bỏ qua giá trị error
Đó là lý do dùng phép chia (tạo error khi điều kiện không thỏa), còn nếu dùng phép nhân thì không tạo được error.
Điều này cũng giải thích được câu hỏi thứ hai của bạn
 
Lần chỉnh sửa cuối:
Đơn giản thôi:
value * 0 = value
value/0 = error (#DIV/0)
Nếu dùng MAX thì không phân biệt được
Khi lồng vào aggregate tham số 6, thì nó hiểu và bỏ qua giá trị error
Đó là lý do dùng phép chia (tạo error khi điều kiện không thỏa), còn nếu dùng phép nhân thì không tạo được error.
Điều này cũng giải thích được câu hỏi thứ hai của bạn
Lúc đầu khi mình làm bài này, mình chỉ sử dụng hàm Max với tham số (LEFT($A$2:$A$12,7)=TEXT(TODAY(),"Cyymmdd"))*VALUE(RIGHT($A$2:$A$12,4))
Nhưng khi chuyển mảng lớn hơn, a2:a1000, thì báo lỗi vì hàm left và right. Lúc đó mình mới chuyển sang hàm aggregate với tham số 4 và 6, nhưng nó vẫn báo lỗi. Bắt buộc mình phải dùng tham số 14 và 6 ứng với hàm large thì mới được.
Ý mình hỏi là tại sao hàm AGGREGATE với lựa chọn max và ignore error, nó không bỏ qua các giá trị lỗi?

Trong khi mình thử bằng cách tạo 1 range mới chứa các giá trị của hàm (LEFT($A$2:$A$1000,7)=TEXT(TODAY(),"Cyymmdd"))*VALUE(RIGHT($A$2:$A$1000,4)), xong dùng hàm AGGREGATE với lựa chọn max và ignore error thì lại được. Mình đang hiểu là ở đây, với lựa chọn Max, hàm AGGREGATE chỉ nhận vùng chứ không nhận mảng làm đối số.
 
@Chủ bài đăng: Mã phiếu của bạn quá dài & còn có thể cải biên trên những vấn đề sau:
(1) Kí tự đầu tiên của phiếu (T hay C) nên đem đến vị trí dấu gạnh dưới & vứt bén cái dấu mắc dịch này đi cho rãnh nợ
(2) Như mình thì 6 kí số để biểu thị Năm-tháng-ngày là thừa mứa;
Như là mình thì: Năm 2023 sẽ là 'C', năm sau là 'D'
Tháng 9 sẽ là '9', tháng 10 sẽ là A, . . .
Ngày 11 sẽ là B, ngày 13 sẽ là D,. . . . .

Áp dụng (1) & (2) tiện trong việc sắp xếp số phiếu khi cần, . . .
Rất cần đá ném từ các bạn!
 
@Chủ bài đăng: Mã phiếu của bạn quá dài & còn có thể cải biên trên những vấn đề sau:
(1) Kí tự đầu tiên của phiếu (T hay C) nên đem đến vị trí dấu gạnh dưới & vứt bén cái dấu mắc dịch này đi cho rãnh nợ
(2) Như mình thì 6 kí số để biểu thị Năm-tháng-ngày là thừa mứa;
Như là mình thì: Năm 2023 sẽ là 'C', năm sau là 'D'
Tháng 9 sẽ là '9', tháng 10 sẽ là A, . . .
Ngày 11 sẽ là B, ngày 13 sẽ là D,. . . . .

Áp dụng (1) & (2) tiện trong việc sắp xếp số phiếu khi cần, . . .
Rất cần đá ném từ các bạn!
Em không nói cái phiếu bạn ấy đặt là được hay chưa được, nhưng em chỉ xin phản biện một chút giữa cái số phiếu bạn ấy đặt và ý kiến của bác thôi:
(1) Nếu T hay C đem thay cái gạch, thì nếu sort trong file, hoặc lưu hồ sơ (tên file) thì nó không nhóm Thu riêng và Chi riêng (Nhưng mà em không biết nên nhóm riêng hay theo cặp Thu-Chi thì hợp lý nữa, nếu nhóm theo cặp Thu-Chi thì phần này em ý kiến đưa T,C ra sau cùng cơ ).
(2) Tuy để số Năm-Tháng-Ngày nó hơi dài nhưng bù lại có tính trực quan. Nhìn vào cái biết ngay nó của thời gian nào, để A,B,C thì còn phải suy luận ra năm. Và có khi còn phải quy định vào đâu đó A là mốc năm nào nữa (chứ sau quên thì mệt)
Em xin nhiêu đó ý kiến thôi :D
 
Bạn mường tượng ta gán chuỗi '012. . . 9AB. . . YZ' là 1 cái Name tên gì đó, như 'Alf' hay 'GPE'
Thì chuyện chuyển đổi từ ngày ra mã là chuyện trở bàn tay; còn chuyện chuyển ngược từ mã ra ngày là chưa cần thiết; Vì rằng thì là mà: 'Chẳng nhẽ dòng dữ liệu đó không có cột để ghi nhận ngày-tháng-năm phát sinh nó/chúng nó ư?
Chổ sáng không đếm xĩa đến, lại thích chổ mù mờ, mờ ám!

Cảm ơn các bạn đã đọc & chúc vui!
$$$$@
 
(1) Kí tự đầu tiên của phiếu (T hay C) nên đem đến vị trí dấu gạnh dưới & vứt bén cái dấu mắc dịch này đi cho rãnh nợ
(2) Như mình thì 6 kí số để biểu thị Năm-tháng-ngày là thừa mứa;
Như là mình thì: Năm 2023 sẽ là 'C', năm sau là 'D'
Tháng 9 sẽ là '9', tháng 10 sẽ là A, . . .
Ngày 11 sẽ là B, ngày 13 sẽ là D,. . . . .
Chọi bác cục gạch nè ... :D
Chắc bác quen cái vụ mã hóa nên bác cũng đem mã hóa thông tin của cái chứng từ luôn. Theo quan điểm của tôi là giống mục số 2 của @Nhattanktnn -> cần lấy thông tin sơ lược ngay khi đọc cái mã chứng từ nên nó cần tường minh chút (có thể sẽ dài) chứ chờ giải mã ngày tháng năm thì mệt quá. Cái chứng từ này có thể sẽ được in ra có kèm mã trên đó nên ký tự T/C đứng đầu cũng giúp người phân loại phiếu cho nhanh.
Về cách đặt mã của chủ thớt thì tôi thấy cũng tốt rồi, chỉ cần chú ý thay đổi lại số ký tự dành cho số thứ tự. Cứ sang ngày mới thì số thứ tự reset lại thành 1 => nếu 1 ngày phát sinh không quá 999 chứng từ Thu (hoặc Chi) thì dùng 3 ký tự thôi.

Screen Shot 2023-03-08 at 14.40.55.png
 
Dự đoán là với format như thế này, 100 năm nữa con cháu chúng ta sẽ khóc hết nước mắt với cái file các cụ để lại.
Các cụ tổ cứ lo tranh luận vụ có "_" hay không, mà không lo vụ "yy"
 
Dự đoán là với format như thế này, 100 năm nữa con cháu chúng ta sẽ khóc hết nước mắt với cái file các cụ để lại.
Các cụ tổ cứ lo tranh luận vụ có "_" hay không, mà không lo vụ "yy"
:D Bác lo xa quá, biết đâu vài năm nữa, thay đổi phần mềm, thay đổi cấu trúc là không còn dùng kiểu cũ nữa rồi. Người cũ ra đi, đem cái file đi theo luôn hoặc khóa code VBA. Khi đó người mới lại lên hỏi tiếp cách tạo mã, cách lấy lại mật khẩu file :D ...
 
Web KT

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

Back
Top Bottom