[HELP] Dùng hàm Count ra kết quả không chính xác (2 người xem)

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

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

745136

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
29/7/13
Bài viết
22
Được thích
4
Dear team.
Mình đang sử dụng 1 bảng báo cáo cho công ty, trong bảng có nhiều giá trị phân khúc sản phẩm dạng chuỗi ("<0.5M", "0.5M - 1M"....) như trong file đính kèm.
Tuy nhiên mình có sử dụng hàm đếm giá trị chuỗi theo điều kiện thì có 1 giá trị bị lẫn đó là giá trị <0.5M và giá trị >10M
Tất cả các hàm có liên quan đến đếm giá trị (sumifs, countifs...) khi đọc giá trị này đều bị nhầm lẫn.
nhờ anh chị em cho xin giải pháp hoặc chỉ ra chỗ sai giúp mình với ạ. (do đây là báo cáo hằng ngày nên mình không muốn thay đổi cấu trúc file bằng cách thêm dòng, thêm cột ạ)Zalo_ScreenShot_9_8_2018_520239.png
 

File đính kèm

Dear team.
Mình đang sử dụng 1 bảng báo cáo cho công ty, trong bảng có nhiều giá trị phân khúc sản phẩm dạng chuỗi ("<0.5M", "0.5M - 1M"....) như trong file đính kèm.
Tuy nhiên mình có sử dụng hàm đếm giá trị chuỗi theo điều kiện thì có 1 giá trị bị lẫn đó là giá trị <0.5M và giá trị >10M
Tất cả các hàm có liên quan đến đếm giá trị (sumifs, countifs...) khi đọc giá trị này đều bị nhầm lẫn.
nhờ anh chị em cho xin giải pháp hoặc chỉ ra chỗ sai giúp mình với ạ. (do đây là báo cáo hằng ngày nên mình không muốn thay đổi cấu trúc file bằng cách thêm dòng, thêm cột ạ)View attachment 201451
Thử thêm dấu "*"
=COUNTIF(D2: D9,"*<0.5M")
Thân
 
ĐƯợc rồi bác ạ...
Bác cho em hỏi về ý nghĩa của dấu * đó đc k ạ
Đó là ký tự đại diện, gồm:
"?": đại diện cho 1 ký tự bất kỳ
"*": đại diện cho bất kỳ ký tự (bao nhiêu cũng được)
Ví dụ: trong dãy D2 : D9 có chứa chuỗi: D2="<0.5M"; D3="Phải <0.5M"; D4="n<0.5M"...

Với =COUNTIF(D2: D9,"?<0.5?") ra kết quả 1, vì chỉ có "n<0.5M" thỏa điều kiện.
Với =COUNTIF(D2: D9,"*<0.5*") ra kết quả 3, vì D2, D3, D4 đều thỏa điều kiện.

Thân
 
Đó là ký tự đại diện, gồm:
"?": đại diện cho 1 ký tự bất kỳ
"*": đại diện cho bất kỳ ký tự (bao nhiêu cũng được)
Ví dụ: trong dãy D2 : D9 có chứa chuỗi: D2="<0.5M"; D3="Phải <0.5M"; D4="n<0.5M"...

Với =COUNTIF(D2: D9,"?<0.5?") ra kết quả 1, vì chỉ có "n<0.5M" thỏa điều kiện.
Với =COUNTIF(D2: D9,"*<0.5*") ra kết quả 3, vì D2, D3, D4 đều thỏa điều kiện.

Thân
vâng. cảm ơn bác nhiều lắm ạ :D
 
[HELP] Dùng hàm Count ra kết quả không chính xác
Là do bạn gõ hàm không chính xác. Với cú pháp bạn gõ như trong file thì kết quả excel trả về 3 là đúng rồi.
Bạn lưu ý: trong excel những ký tự >, <, ?, * là các kí tự rất đặc biệt.
Trong công thức
=COUNTIF(D2':'D9,"<0.5M") tức =COUNTIF({"<0.5M";"<0.5M";">10M";"3M - 4.5M";"4.5M - 6M";"4.5M - 6M";"6M - 10M";"6M - 10M"},"=<0.5M")
Trong vùng D2':'D9, excel sẽ hiểu các dấu "<" và ">" đơn giản là 1 phần của chuỗi. Bởi nó là 1 phần dữ liệu trong các ô.
Tuy nhiên với điều kiện, Excel sẽ hiểu dấu "<" trong "<0.5M" là đếm số lượng chuỗi mà "bé hơn" chuỗi "0.54M" thay vì xem "<" là 1 phần của chuỗi kí tự.
Như vậy với yêu cầu của bạn là đếm số lượng chuỗi "<0.5M" thì buộc bản phải "làm sao đấy" để excel hiểu rằng dấu "<" ở đây "không có gì đặc biệt"
Tức là hàm phải trở thành
=COUNTIF(D2':'D9,"=<0.5M")
(Bạn chú ý: dấu "=" trước dấu "<" sẽ giúp dấu "<" trở nên "bình thường", nếu đặt sau thì excel lại hiểu là "<=" tức nhỏ hơn hoặc bằng)
Hoặc "an toàn" hơn
=SUMPRODUCT(--((D2':'D9)="<0.5M"))

Về phần 2 kí tự "*" và "?" anh Hiệp đã giải thích rõ rồi. Mình chỉ thêm vài ví dụ để bạn dễ hiểu
wh*: tất cả các chuỗi bắt đầu bằng "wh", sau "wh" có thể bất kỳ kí tự gì với bất kể số lượng nào: who, whom, which, what
*is: tất cả các chuỗi kết thúc bằng "is", trước "is" có thể bất kỳ kí tự gì với bất kể số lượng nào: is, miss, this
*i*: tất cả chuỗi có "i": trước vào sau "i" có thể là bất kỳ kí tự gì với bất kể số lượng nào: which, kick
Ký tự "?": Hiểu tương tự như trên nhưng chỉ là đại diện cho 1 ký tự duy nhất.

Vậy câu hỏi đặt ra: dấu "*" đặc biệt như vậy, vậy nếu thực sự muốn tìm ký tự "*" theo "đúng nghĩa" thì sao?
Trả lời: cho excel hiểu "*" là 1 ký tự bình thường bằng cách thêm dấu "~" phía trước.
Ví dụ: tìm kí tự "* trong chuỗi: abc
Hàm: search("*","abc") cho kết quả là 1. Vì dấu "*" ở đây mang ý nghĩa đặc biệt, excel hiểu là bạn đang search ký tự bất kỳ, với số lượng bất kỳ
Search("~*","abc") báo lỗi không tìm thấy. Vì lúc này dấu "*" đã được "bình thường hóa". Và trong chuỗi "abc" không có ký tự nào là "*"

Những dấu: "*", "?" gọi là wildcard. Dấu "~" là escape. Vậy thì escape của "~" là "~~"
Dấu nháy kép (") nếu cần tìm kiếm thì vẫn như thường lệ, cho vào """. Tuy nhiên người viết hàm/code thường né tránh viết kiểu vậy để tránh "end-user" rối mắt, mà thay bằng char(34).
Hi vọng những thông tin có chút ít hữu ích với bạn :)
P/S: Dấu ":" và chữ "D" cạnh nhau sẽ thành icon, vì vậy mình có né chút xíu bằng ':' trong D2':'D9
 
Là do bạn gõ hàm không chính xác. Với cú pháp bạn gõ như trong file thì kết quả excel trả về 3 là đúng rồi.
Bạn lưu ý: trong excel những ký tự >, <, ?, * là các kí tự rất đặc biệt.
Trong công thức
=COUNTIF(D2':'D9,"<0.5M") tức =COUNTIF({"<0.5M";"<0.5M";">10M";"3M - 4.5M";"4.5M - 6M";"4.5M - 6M";"6M - 10M";"6M - 10M"},"=<0.5M")
Trong vùng D2':'D9, excel sẽ hiểu các dấu "<" và ">" đơn giản là 1 phần của chuỗi. Bởi nó là 1 phần dữ liệu trong các ô.
Tuy nhiên với điều kiện, Excel sẽ hiểu dấu "<" trong "<0.5M" là đếm số lượng chuỗi mà "bé hơn" chuỗi "0.54M" thay vì xem "<" là 1 phần của chuỗi kí tự.
Như vậy với yêu cầu của bạn là đếm số lượng chuỗi "<0.5M" thì buộc bản phải "làm sao đấy" để excel hiểu rằng dấu "<" ở đây "không có gì đặc biệt"
Tức là hàm phải trở thành
=COUNTIF(D2':'D9,"=<0.5M")
(Bạn chú ý: dấu "=" trước dấu "<" sẽ giúp dấu "<" trở nên "bình thường", nếu đặt sau thì excel lại hiểu là "<=" tức nhỏ hơn hoặc bằng)
Hoặc "an toàn" hơn
=SUMPRODUCT(--((D2':'D9)="<0.5M"))

Về phần 2 kí tự "*" và "?" anh Hiệp đã giải thích rõ rồi. Mình chỉ thêm vài ví dụ để bạn dễ hiểu
wh*: tất cả các chuỗi bắt đầu bằng "wh", sau "wh" có thể bất kỳ kí tự gì với bất kể số lượng nào: who, whom, which, what
*is: tất cả các chuỗi kết thúc bằng "is", trước "is" có thể bất kỳ kí tự gì với bất kể số lượng nào: is, miss, this
*i*: tất cả chuỗi có "i": trước vào sau "i" có thể là bất kỳ kí tự gì với bất kể số lượng nào: which, kick
Ký tự "?": Hiểu tương tự như trên nhưng chỉ là đại diện cho 1 ký tự duy nhất.

Vậy câu hỏi đặt ra: dấu "*" đặc biệt như vậy, vậy nếu thực sự muốn tìm ký tự "*" theo "đúng nghĩa" thì sao?
Trả lời: cho excel hiểu "*" là 1 ký tự bình thường bằng cách thêm dấu "~" phía trước.
Ví dụ: tìm kí tự "* trong chuỗi: abc
Hàm: search("*","abc") cho kết quả là 1. Vì dấu "*" ở đây mang ý nghĩa đặc biệt, excel hiểu là bạn đang search ký tự bất kỳ, với số lượng bất kỳ
Search("~*","abc") báo lỗi không tìm thấy. Vì lúc này dấu "*" đã được "bình thường hóa". Và trong chuỗi "abc" không có ký tự nào là "*"

Những dấu: "*", "?" gọi là wildcard. Dấu "~" là escape. Vậy thì escape của "~" là "~~"
Dấu nháy kép (") nếu cần tìm kiếm thì vẫn như thường lệ, cho vào """. Tuy nhiên người viết hàm/code thường né tránh viết kiểu vậy để tránh "end-user" rối mắt, mà thay bằng char(34).
Hi vọng những thông tin có chút ít hữu ích với bạn :)
P/S: Dấu ":" và chữ "D" cạnh nhau sẽ thành icon, vì vậy mình có né chút xíu bằng ':' trong D2':'D9
Cảm ơn bác rất nhiều vì bài viết hữu ích :)...
Em đã đọc đi đọc lại rất kỹ bài của 2 bác, thực sự rất hữu ích ạ... giúp em mở mang thêm đc nhiều kiến thức xử lý chuỗi ạ
 
Web KT

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

Back
Top Bottom