Dùng hàm countif làm sao loại bỏ những phiếu trùng?

  • Thread starter heroic
  • Ngày gửi
H

heroic

Guest
11/11/04
56
0
0
vn
Nhờ các cao thủ giải cho em bài này:
Cột B của em là các số phiếu nhập và xuất
PN1/03 mặt hàng A
PN1/03 mặt hàng B
PN2/03 mặt hàng A
PN2/03 mặt hàng B
PN2/03 mặt hàng C
PX1/03 mặt hàng A
PX1/03 mặt hàng B
PX1/03 mặt hàng C

Em muốn biết hiện thời là phiếu nhập, hoặc phiếu xuất là số mấy rồi nếu không có sự trùng phiếu nhập thì em dùng hàm
COUNTIF(RANGE,"PN"&"*") là OK biết hiện là phiếu nhập mấy. Vậy bây giờ em phải làm sao để nó chỉ tính những phiếu nhập cùng tên là 1 giá trị thôi. Như bảng trên thì phiếu nhập tiếp theo sẽ là phiếu thứ 3 ??????
Mong các cao thủ giải đáp dùm em.
 
Khóa học Quản trị dòng tiền
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Bạn có thể dùng Validation để hạn chế nhập mã-phiếu trùng. Cách này đã có rất nhiều người dùng và cũng đã post đâu đó trên box này.
Bạn chọn cả cột A, vào Data - Validation, mục Allow chọn là Custom, sau đó nhập vào: =COUNTIF(A:A,A2)<=1
 
H

heroic

Guest
11/11/04
56
0
0
vn
Vấn đề là lấy STT

Cảm ơn Adam_tran nhưng vẫn đề của mình là mình muốn Ô trên cùng hiển thị số phiếu hiện thời là mấy? để mình nhập phiếu tiếp theo. Còn trùng phiếu thì mình vẫn phải nhập trùng, vì cùng một phiếu có nhiều mặt hàng khác nhau mà.
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
heroic nói:
Cảm ơn Adam_tran nhưng vẫn đề của mình là mình muốn Ô trên cùng hiển thị số phiếu hiện thời là mấy? để mình nhập phiếu tiếp theo. Còn trùng phiếu thì mình vẫn phải nhập trùng, vì cùng một phiếu có nhiều mặt hàng khác nhau mà.
Nếu đánh số chỉ là 1, 2, 3 thì bạn dùng hàm Max là xong chứ gì ????
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
:angel:
Nếu đánh số chỉ là 1, 2, 3 thì bạn dùng hàm Max là xong chứ gì ????
Theo cách thô thiển nhất là tạo cột phụ:
=VALUE(IF(LEFT($A6; 2) = "pN"; MID($A6; 3; FIND("/"; $A6; 3)- 3); 0))
Xong mới dùng hàm = 1 + MAX() trên cột phụ đó được:friend:
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear HongViet,
--------------
Bác HongViet ơi, theo em hiểu thì heroic không muốn dùng cột phụ(?). Đơn giản là vì chỉ cần biết số phiếu nhập/xuất hiện hành đang là số mấy thôi.
Như vậy, tại một Header cell, công thức tính toán phải là một Array Formula. Công thức của em như thế này có được không: (giả sử cột Số chứng từ là vùng SoCT)
{="PN"&MAX(IF(LEFT(SoCT;2)="PN";VALUE(MID(SoCT;3;FIND("/";SoCT)-3));0))+1&"/03"}
Mọi người góp ý thêm nhé!
 
Sửa lần cuối:
H

heroic

Guest
11/11/04
56
0
0
vn
Đúng là chỉ lấy số thứ tự thôi!

Vấn đề của em chỉ là lấy Max của phiếu nhập hiện tại thôi. Nhưng em chưa biết làm sao??????????? Ý hiểu của Anh Cường là đúng vấn đề em cần giải đáp nhưng em làm thử không được. Em chưa biết sử dụng công thức mảng.
hu hu!!!!!!!!???????????????????? Có cách nào viết công thức Max đó đơn giản hơn không chỉ giúp em với....
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear heroic,
------------
Bạn tham khảo file đính kèm xem có đúng ý bạn không nhé!
Chúc bạn thành công!
 
Sửa lần cuối:
Q

quocnghia

Guest
24/3/04
64
0
6
Đào Việt Cường nói:
Dear heroic,
------------
Bạn tham khảo file đính kèm xem có đúng ý bạn không nhé!
Chúc bạn thành công!

Mình xin nâng cấp một chút ! mong bạn bỏ wa !
 

Đính kèm

  • NX1.rar
    2.6 KB · Lượt xem: 406
H

heroic

Guest
11/11/04
56
0
0
vn
Thanks for all

Mình đã làm được rồi, Cám ơn A.Cường và tất cả mọi người đã góp ý:
Mình đang viết một form nhập liệu, vì muốn nó hiện lên trên form STT của các phiếu muốn nhập nên dùng cách tính của A.Cường rồi lấy giá trị đó gán lên Label để biết đang làm việc ở phiếu STT là mấy để nhập liệu phiếu tiếp theo.
hiện công việc thế là OK. Còn vấn đề nào thì sẽ hỏi thêm mọi người!
Nhưng nếu A.Cường giải thích thêm một chút về công thức nữa, em làm được nhưng chưa hiểu lắm.
{="PN"&MAX(IF(LEFT(SoCT;2)="PN";VALUE(MID(SoCT;3;FIND("/";SoCT)-3));0))+1&"/03"}

đoạn FIND("/";SoCT) này có thêm để làm gì? nói chung là còn LƠTƠMƠ!

Ghi chú: Với VD mẫu của A.Cường và quocnghia sẽ giúp cho các member rất nhiều, vì thường gặp khi làm việc trong kế toán.
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear heroic,
-----------
Để hiểu về công thức có nhiều hàm nồng nhau như công thức ở ví dụ trên, bạn nên "bổ" công thức đó ra thành các thành phần nhỏ hơn. Ví dụ ở đây bạn chưa hiểu FIND("/";SoCT) bạn phải hiểu được ý nghĩa của nó đối với hàm MID:
FIND("/";SoCT) chỉ ra vị trí của ký tự "/" trong chuỗi SoCT (tính từ trái qua phải). Bạn phải FIND("/";SoCT) - 3 để xác định chính xác số ký tự (độ lớn LEN) của số phiếu cần lấy! Thành phần này đóng vai trò là num_chars của hàm MID.
Để kiểm chứng điều này, hãy khảo sát một vài ví dụ:
=FIND("/";"PN1/03");
=FIND("/";"PN301/03")
kết hợp với hàm MID:
=MID("PN301/03";3;FIND("/";"PN301/03")-3))
Để MAX được các MID thì các MID phải convert thành giá trị (hàm VALUE).
Cuối củng để có được tập hợp các VALUE(MID) chúng ta sử dụng công thức mảng (ấn tổ hợp Ctrl + Shift + Enter). MAX của {VALUE(MID)} chúng ta sẽ tìm được số lớn nhất!
Một cách có kinh nghiệm hơn là bạn có thể "kiểm toán" công thức thông qua công cụ Formula Auditing. Công cụ này cho phép chúng ta khảo sát cụ thể một công thức bằng phương thức "Evaluate" từng thành phần! Bạn chọn công cụ này từ View/Toolbars/Formula Auditing.
Chúc bạn có thể ứng dụng tốt hơn ở các yêu cầu khác!
 
Sửa lần cuối:
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Công thức của phoenixking không có phần giải thích cho rõ:
Giả sử:
- Cột B là cột chứa các dử liệu về số phiếu và dử liệu này bắt đầu từ ô B2,
- Cách tính số phiếu trùng tính đến Ô Bn (n là số): =Countif($B$2:Bn,Bn)
Nếu sử dụng validation (kiểm soát nhập liệu) có thể dùng công thức thế này (trong tùy chọn custom của validation) để ngăn không cho nhập trùng: = countif($B$2:Bn,Bn)>

Thân.
 

Xem nhiều

Webketoan Zalo OA