Hiển thị duy nhất 1 giá trị và tính tổng tương ứng với giá trị đó (1 người xem)

  • Thread starter Thread starter vuvuson
  • Ngày gửi Ngày gửi
Liên hệ QC

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

vuvuson

Thành viên chính thức
Tham gia
2/9/09
Bài viết
50
Được thích
4
Chào ace diễn đàn,

Tôi có bài toán đính kèm, tại cột E tôi muốn hiển thị duy nhất 1 tên khách hàng (cái này tôi dùng công thức: =IF(COUNTIF($A$2:A2;A2)>1;"";A2)) thì lấy được tên khách hàng duy nhất
nhưng 2 cột còn lại tôi muốn tính tổng dữ liệu số lượng và trọng lượng tương ứng với khách hàng đó thì không biết dùng công thức và phối hợp như thế nào
Nhờ mọi người hỗ trợ. Cám ơn ace diễn đàn
 

File đính kèm

Chào ace diễn đàn,

Tôi có bài toán đính kèm, tại cột E tôi muốn hiển thị duy nhất 1 tên khách hàng (cái này tôi dùng công thức: =IF(COUNTIF($A$2:A2;A2)>1;"";A2)) thì lấy được tên khách hàng duy nhất
nhưng 2 cột còn lại tôi muốn tính tổng dữ liệu số lượng và trọng lượng tương ứng với khách hàng đó thì không biết dùng công thức và phối hợp như thế nào
Nhờ mọi người hỗ trợ. Cám ơn ace diễn đàn
Nếu dữ liệu lớn và chỉ cần tính tổng cho từng khách hàng thì nên nghĩ đến cách đơn giản nhất là sử dụng PivotTable, cách làm như sau:
1/ Copy sheet1 qua sheet2.
2/ Chọn cột A và bỏ Merge and Center (bỏ gộp ô) rồi gán hàm tự động cho các Cell trống.
3/ Sử dụng PivotTable như sheet3.
4/ Cách gán hàm thì bạn đọc bài 14 của Link sau:
http://www.giaiphapexcel.com/diendan/threads/danh-mục-các-bài-viết-về-những-vấn-đề-chung-cấu-trúc-và-xử-lý-dữ-liệu.114771/
 

File đính kèm

Lần chỉnh sửa cuối:
Em dùng 1 cột phụ và hàm Sumif cũng thấy ra kết quả
 

File đính kèm

Chào ace diễn đàn,

Tôi có bài toán đính kèm, tại cột E tôi muốn hiển thị duy nhất 1 tên khách hàng (cái này tôi dùng công thức: =IF(COUNTIF($A$2:A2;A2)>1;"";A2)) thì lấy được tên khách hàng duy nhất
nhưng 2 cột còn lại tôi muốn tính tổng dữ liệu số lượng và trọng lượng tương ứng với khách hàng đó thì không biết dùng công thức và phối hợp như thế nào
Nhờ mọi người hỗ trợ. Cám ơn ace diễn đàn
Chỉ dùng hàm if và Sum thôi
 

File đính kèm

Nếu để tính mỗi kết quả đều phải tính 2 SUM rồi trừ thì có vẻ không hay lắm. Nhất là khi dữ liệu hàng nghìn dòng. Và mỗi khi thay đổi vd. C1000 thì tất cả mọi công thức đều phải tính lại.

Một cách khác, dù công thức nhiều ký tự nhưng có lẽ tốt hơn?
Công thức cho F2, không dùng cột phụ.
Mã:
=IFERROR(IF($A2="","",SUM(C2:INDEX(C2:C$38,MATCH("*",$A3:$A$38,0)))),SUM(C2:C$38))
copy sang phải tới G2 rồi xuống dưới.

Nếu dùng cột phụ thì công thức bài #4 là gọn nhẹ rồi.
 
Lần chỉnh sửa cuối:
Nếu để tính mỗi kết quả đều phải tính 2 SUM rồi trừ thì có vẻ không hay lắm. Nhất là khi dữ liệu hàng nghìn dòng. Và mỗi khi thay đổi vd. C1000 thì tất cả mọi công thức đều phải tính lại.

Một cách khác, dù công thức nhiều ký tự nhưng có lẽ tốt hơn?
Công thức cho F2, không dùng cột phụ.
Mã:
=IFERROR(IF($A2="","",SUM(C2:INDEX(C2:C$38,MATCH("*",$A3:$A$38,0)))),SUM(C2:C$38))
copy sang phải tới G2 rồi xuống dưới.

Nếu dùng cột phụ thì công thức bài #4 là gọn nhẹ rồi.
Bài nầy dùng cột phụ không cần thiết, tốn tài nguyên và làm chậm file, chỉ dùng cột phụ khi chia điều kiện xử lý phức tạp thành các giai đoạn xử lý đơn giản, và tăng tốc độ xử lý
Tùy tình huống và mức độ am hiểu của người dùng mà lựa chọn cách xử lý, với file chỉ vài chục dòng thì dùng 2 hàm Sum trừ nhau tốc độ xử lý nhanh hơn và quan trọng là người dùng dể hiểu dể áp dụng, file có 1000 dòng tốc độ chậm hơn nhưng chênh lệch thời gian tuyệt đối không đáng kể, và mức ảnh hưởng đến tốc độ xử lý cả file khó nhận biết bằng cảm tính
Công thức: =IFERROR(IF($A2="","",SUM(C2:INDEX(C2:C$38,MATCH("*",$A3:$A$38,0)))),SUM(C2:C$38)) chỉnh lại và bỏ hàm SUM(C2:C$38) cho gọn
 
Công thức: =IFERROR(IF($A2="","",SUM(C2:INDEX(C2:C$38,MATCH("*",$A3:$A$38,0)))),SUM(C2:C$38)) chỉnh lại và bỏ hàm SUM(C2:C$38) cho gọn
Tôi cũng đã nghĩ bỏ SUM(C2:C$38) nhưng phải thay bằng cái khác gì đấy. Nếu không thì kết quả cuối sẽ lỗi.
Nếu không thêm trong công thức thì thêm vd. "x" ở dòng cuối hoặc dòng 100 trong cột A.
 
Tôi cũng đã nghĩ bỏ SUM(C2:C$38) nhưng phải thay bằng cái khác gì đấy. Nếu không thì kết quả cuối sẽ lỗi.
Nếu không thêm trong công thức thì thêm vd. "x" ở dòng cuối hoặc dòng 100 trong cột A.
Đem Iferror vào trước hàm Match, nếu lổi trả về dòng cuối của dảy $A3:$A$38
Gọn hơn là đưa Iferror trước Index, nếu lổi trả về ô C$38
 
Đem Iferror vào trước hàm Match, nếu lổi trả về dòng cuối của dảy $A3:$A$38
Gọn hơn là đưa Iferror trước Index, nếu lổi trả về ô C$38
Không phải là tôi không nghĩ tới 2 trường hợp này. Nghĩ rồi. Nhưng bạn định thay bằng cái gì cho trường hợp 1 (trước MATCH)? Bằng ROWS($A29:$A$38)? Ngắn hơn hay dài hơn mấy ký tự? Hay bằng cái gì? Tôi cũng muốn học hỏi nên nếu có cách thì xin đưa ra.

Công thức tốt hay không là do dùng thuật toán chứ không phải đo ký tự. Tên hàm SUM có 3 ký tự. Tên hàm SUMPRODUCT có 10 ký tự. Nếu cứ tính kiểu đó thì riêng tên hàm đã có sự khác biệt.

Trường hợp 2 thì thay bằng cái gì? Tôi chậm hiểu nên không biết có bắt được ý không. Tức thay bằng
Mã:
iferror(INDEX(C2:C$38;MATCH("*";$A3:$A$38;0));C$38)
???

Bạn đã thử chưa hay chỉ nghĩ là thế? Hoặc ý bạn lại khác?

Cách tôi đưa ra là đơn giản. Chả phải suy nghĩ gì thêm.
 
Không phải là tôi không nghĩ tới 2 trường hợp này. Nghĩ rồi. Nhưng bạn định thay bằng cái gì cho trường hợp 1 (trước MATCH)? Bằng ROWS($A29:$A$38)? Ngắn hơn hay dài hơn mấy ký tự? Hay bằng cái gì? Tôi cũng muốn học hỏi nên nếu có cách thì xin đưa ra.

Công thức tốt hay không là do dùng thuật toán chứ không phải đo ký tự. Tên hàm SUM có 3 ký tự. Tên hàm SUMPRODUCT có 10 ký tự. Nếu cứ tính kiểu đó thì riêng tên hàm đã có sự khác biệt.

Trường hợp 2 thì thay bằng cái gì? Tôi chậm hiểu nên không biết có bắt được ý không. Tức thay bằng
Mã:
iferror(INDEX(C2:C$38;MATCH("*";$A3:$A$38;0));C$38)
???

Bạn đã thử chưa hay chỉ nghĩ là thế? Hoặc ý bạn lại khác?

Cách tôi đưa ra là đơn giản. Chả phải suy nghĩ gì thêm.
Mã:
=IF($A2="","",SUM(C2:INDEX(C2:C$38,IFERROR(MATCH("*",$A3:$A$38,0),0))))
Cách 2 nghĩ như vậy nhưng ngài Bill chưa duyệt, tiếc thật
 
Web KT

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

Back
Top Bottom