TÌM 2 GIÁ TRỊ TRONG HÀNG VỚI SỐ LẦN XUẤT HIỆN NHIỀU NHẤT (1 người xem)

Liên hệ QC

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

Sơn Mã

Thành viên hoạt động
Tham gia
30/12/16
Bài viết
114
Được thích
2
Nhờ các bạn trên GPE giúp đỡ trường hợp tìm giá trị có trong hàng với số lần xuất hiện nhiều nhất.

- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng

(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)

- Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
 

File đính kèm

Nhờ các bạn trên GPE giúp đỡ trường hợp tìm giá trị có trong hàng với số lần xuất hiện nhiều nhất.

- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng

(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)

- Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
PHP:
D2=LOOKUP(1,1/(IF((FREQUENCY(G2:QSV2,ROW($1:$37)-1)>=LARGE(FREQUENCY(G2:QSV2,ROW($1:$37)-1),2)),ROW($1:$37)-1,GPE)<>C2),ROW($1:$37)-1)
Ctrl+Shift+Enter fill xuống.
 
Nhờ các bạn trên GPE giúp đỡ trường hợp tìm giá trị có trong hàng với số lần xuất hiện nhiều nhất.

- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng

(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)

- Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
Nhờ các bạn trên GPE giúp đỡ trường hợp tìm giá trị có trong hàng với số lần xuất hiện nhiều nhất.

- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng

(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)

- Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
Bài này có nhiều cách nếu muốn dùng MODE thì bạn dùng CT này tại D2:
D2=MODE(IF(COUNTIF($C2:C2,$H2:$QSW2)=0,IF($H2:$QSW2<>"",$H2:$QSW2)))
Ctrl+Shift+Enter rồi fill xuống, fill sang cột F thì cột E là số lần xuất hiện nhiều nhất thứ 2, cột F là thứ 3....
 
Bài này có nhiều cách nếu muốn dùng MODE thì bạn dùng CT này tại D2:
D2=MODE(IF(COUNTIF($C2:C2,$H2:$QSW2)=0,IF($H2:$QSW2<>"",$H2:$QSW2)))
Ctrl+Shift+Enter rồi fill xuống, fill sang cột F thì cột E là số lần xuất hiện nhiều nhất thứ 2, cột F là thứ 3....
Cảm ơn bạn nhiều. Bạn ơi, trong công thức này dữ liệu bắt đầu có từ cột G, sao trong công thức lại là H vậy bạn?
 
Bài này có nhiều cách nếu muốn dùng MODE thì bạn dùng CT này tại D2:
D2=MODE(IF(COUNTIF($C2:C2,$H2:$QSW2)=0,IF($H2:$QSW2<>"",$H2:$QSW2)))
Ctrl+Shift+Enter rồi fill xuống, fill sang cột F thì cột E là số lần xuất hiện nhiều nhất thứ 2, cột F là thứ 3....
Bạn ơi cho mình hỏi ạ: nếu mình muốn tìm ngược lại là thay cho tìm 2 giá trị với số lần xuất hiện nhiều nhất như trên thì bây giờ muốn tìm 2 giá trị với số lần xuất hiện ít nhất mình làm như thế nào ạ? Rất Mong sự hồi âm của các bạn!
 
Bạn ơi cho mình hỏi ạ: nếu mình muốn tìm ngược lại là thay cho tìm 2 giá trị với số lần xuất hiện nhiều nhất như trên thì bây giờ muốn tìm 2 giá trị với số lần xuất hiện ít nhất mình làm như thế nào ạ? Rất Mong sự hồi âm của các bạn!
Vậy không dùng MODE được nữa, thấy các số của bạn nhiều nhất có 2 chữ số, bạn dùng CT này ở C2:
PHP:
C2=MATCH(TRUE,COUNTIF($G2:$QSV2,ROW($1:$100)-1)/(COUNTIF($B2:B2,ROW($1:$100)-1)=0)=MIN(IFERROR(1/(1/COUNTIF($G2:$QSV2,ROW($1:$100)-1)/(COUNTIF($B2:B2,ROW($1:$100)-1)=0)),"")),)-1
Ctrl+Shift+Enter rồi fill xuống, rồi fill qua cột D và E...Cột C là số lần xuất hiện ít nhất, cột D là số lần xuất hiện ít thứ 2, cột E là số lần xuất hiện ít thứ 3.....
 
Mình dùng công thức đó thấy báo lỗi là :"the syntax of this name is not correct" bạn ạ!
Tôi thấy bình thường mà. Xem file kèm GPE.Max và Max1.0
Bạn ơi cho mình hỏi ạ: nếu mình muốn tìm ngược lại là thay cho tìm 2 giá trị với số lần xuất hiện nhiều nhất như trên thì bây giờ muốn tìm 2 giá trị với số lần xuất hiện ít nhất mình làm như thế nào ạ? Rất Mong sự hồi âm của các bạn!
Công thức đầu không thể dùng Mode được:
Mã:
C2=MATCH(MIN(IFERROR(1/(1/FREQUENCY(G2:QSV2,ROW($1:$37)-1)),"")),FREQUENCY(G2:QSV2,ROW($1:$37)-1),0)-1
Ctrl+Shift+Enter, fill xuống.
Công thức cho vị trí thứ 2 không điều chỉnh nhiều:
Mã:
B2=LOOKUP(1,1/(IF((FREQUENCY(G2:QSV2,ROW($1:$37)-1)<=SMALL(IFERROR(1/(1/FREQUENCY(G2:QSV2,ROW($1:$37)-1)),""),2)),ROW($1:$37)-1,gpe)<>C2),ROW($1:$37)-1)
Ctrl+Shift+Enter, fill xuống.
Vẫn tính theo nguyên tắc: hễ cùng tần suất xuất hiện thì số phát sinh trước thì tính trước. (xem dòng 10)
Bạn tham khảo file kèm.

Chúc bạn ngày vui. /-*+//-*+//-*+/
 

File đính kèm

Bạn ơi cho mình hỏi ạ: nếu mình muốn tìm ngược lại là thay cho tìm 2 giá trị với số lần xuất hiện nhiều nhất như trên thì bây giờ muốn tìm 2 giá trị với số lần xuất hiện ít nhất mình làm như thế nào ạ? Rất Mong sự hồi âm của các bạn!
Xem lại thấy dùng MODE tốt hơn cho trường hợp cùng tần suất xuất hiện thì số nào xuất hiện trước sẽ được ưu tiên liệt kê trước:
Mã:
C2=MODE(IFERROR(IF(MATCH(G2:QSV2,SMALL(IF((FREQUENCY(G2:QSV2,ROW($1:$37)-1)=SMALL(IFERROR(1/(1/FREQUENCY(G2:QSV2,ROW($1:$37)-1)),""),COLUMN(A$1))),ROW($1:$37)-1,""),ROW($1:$10)),0),G2:QSV2,""),""))
Ctrl+Shift+Enter, copy qua phải rồi kéo cả hai xuống.

Bạn tham khảo file kèm.

Chúc bạn ngày vui. /-*+//-*+//-*+/
 

File đính kèm

Thanks anh, không để ý tới chỗ đó vẫn có thể chỉnh lại được chỉnh Row(1:100) thành vùng $G2:$QSV2 là được nhưng như vậy công thức nặng.
Mà công thức của anh cũng chưa đúng, vẫn dòng 10 nếu tính số xuất hiện ít nhất thứ 3 lẽ ra là 7, mà CT của anh khi kéo qua thêm 1 cột nữa vẫn là 35, tức là giả sử lần thứ 1 và 2 bị trùng thì nó chỉ lấy được một số đầu tiên, các số sau nó bỏ qua!!
 
Thanks anh, không để ý tới chỗ đó vẫn có thể chỉnh lại được chỉnh Row(1:100) thành vùng $G2:$QSV2 là được nhưng như vậy công thức nặng.
Mà công thức của anh cũng chưa đúng, vẫn dòng 10 nếu tính số xuất hiện ít nhất thứ 3 lẽ ra là 7, mà CT của anh khi kéo qua thêm 1 cột nữa vẫn là 35, tức là giả sử lần thứ 1 và 2 bị trùng thì nó chỉ lấy được một số đầu tiên, các số sau nó bỏ qua!!
Nếu chủ thớt muốn liệt kê thêm nữa (nhiều hơn 2 vị trí) thì độn thêm đoạn công thức loại các số đã xuất hiện rồi ở đằng trước: ....IF(($G2:$QSV2<>"")*NOT(COUNTIF($B2:B2,$G2:$QSV2)),$G2:$QSV2,"")....
Mã:
C2=MODE(IFERROR(IF(MATCH($G2:$QSV2,SMALL(IF((FREQUENCY(IF(($G2:$QSV2<>"")*NOT(COUNTIF($B2:B2,$G2:$QSV2)),$G2:$QSV2,""),ROW($1:$37)-1)=SMALL(IFERROR(1/(1/FREQUENCY($G2:$QSV2,ROW($1:$37)-1)),""),COLUMN(A$1))),ROW($1:$37)-1,""),ROW($1:$10)),0),$G2:$QSV2,""),""))
Ctrl+Shift+Enter, fill xuống, copy qua phải ra kết quả vị trí 1,2,3,4...

Chúc anh em ngày thiệt vui. /-*+//-*+//-*+/
 

File đính kèm

Nếu chủ thớt muốn liệt kê thêm nữa (nhiều hơn 2 vị trí) thì độn thêm đoạn công thức loại các số đã xuất hiện rồi ở đằng trước: ....IF(($G2:$QSV2<>"")*NOT(COUNTIF($B2:B2,$G2:$QSV2)),$G2:$QSV2,"")....
Mã:
C2=MODE(IFERROR(IF(MATCH($G2:$QSV2,SMALL(IF((FREQUENCY(IF(($G2:$QSV2<>"")*NOT(COUNTIF($B2:B2,$G2:$QSV2)),$G2:$QSV2,""),ROW($1:$37)-1)=SMALL(IFERROR(1/(1/FREQUENCY($G2:$QSV2,ROW($1:$37)-1)),""),COLUMN(A$1))),ROW($1:$37)-1,""),ROW($1:$10)),0),$G2:$QSV2,""),""))
Ctrl+Shift+Enter, fill xuống, copy qua phải ra kết quả vị trí 1,2,3,4...

Chúc anh em ngày thiệt vui. /-*+//-*+//-*+/
Bài này dùng Index để xét vị trí đầu tiên cũng được, nhưng dùng mode có lẽ ngắn hơn được chút, CT của anh có thể rút lại được chút:
Mã:
=MODE(IFERROR(MATCH($G2:$QSV2,IF((FREQUENCY(NOT(COUNTIF($B2:B2,$G2:$QSV2))*$G2:$QSV2,ROW($1:$37)-1)=SMALL(IFERROR(1/(1/FREQUENCY($G2:$QSV2,ROW($1:$37)-1)),""),COLUMN(A$1))),ROW($1:$37)-1,""),0),""))-1
Không cần dùng Small(,row(1:10)) do đó cũng không cần IF(,$G2:$QSV2,"") Frequency nó không xét ô trống và chuỗi nên cũng không cần đk $G2:$QSV2<>"", có thể công thức sẽ nhẹ hon7 được tý!!
 
Bài này dùng Index để xét vị trí đầu tiên cũng được, nhưng dùng mode có lẽ ngắn hơn được chút, CT của anh có thể rút lại được chút:
Mã:
=MODE(IFERROR(MATCH($G2:$QSV2,IF((FREQUENCY(NOT(COUNTIF($B2:B2,$G2:$QSV2))*$G2:$QSV2,ROW($1:$37)-1)=SMALL(IFERROR(1/(1/FREQUENCY($G2:$QSV2,ROW($1:$37)-1)),""),COLUMN(A$1))),ROW($1:$37)-1,""),0),""))-1
Không cần dùng Small(,row(1:10)) do đó cũng không cần IF(,$G2:$QSV2,"") Frequency nó không xét ô trống và chuỗi nên cũng không cần đk $G2:$QSV2<>"", có thể công thức sẽ nhẹ hon7 được tý!!
Công thức của em sẽ bị sai vì không tính được giá trị 0 với tần suất xuất hiện hiện hữu.

Xem file kèm em sẽ hiểu.
 

File đính kèm

...... Frequency nó không xét ô trống và chuỗi nên cũng không cần đk $G2:$QSV2<>"", có thể công thức sẽ nhẹ hon7 được tý!!
Frequency() vẫn tính ô trống là giá trị 0, nên công thức của em sẽ cộng dồn cho giá trị 0 với tần suất khoảng >4000, vã lại nó loại trừ toàn bộ số 0 bằng việc 1/1/n cả giá trị 0 và ô trống.. Chính nhờ $G2:$QSV2<>"" mới phân biệt được giá trị 0 và ô trống.
 
Nhờ các bạn trên GPE giúp đỡ trường hợp tìm giá trị có trong hàng với số lần xuất hiện nhiều nhất.

- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng

(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)

- Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
Đã có 15 bài xử lý bằng công thức, vui thiệt nhưng hoa cả mắt.
Thử với VBA coi sao nhé.
 

File đính kèm

Frequency() vẫn tính ô trống là giá trị 0, nên công thức của em sẽ cộng dồn cho giá trị 0 với tần suất khoảng >4000, vã lại nó loại trừ toàn bộ số 0 bằng việc 1/1/n cả giá trị 0 và ô trống.. Chính nhờ $G2:$QSV2<>"" mới phân biệt được giá trị 0 và ô trống.
Do countif anh khi đếm nó hiểu ô trống và 0 là như nhau, chứ 1 ô trống bình thường Frequency nó sẽ bỏ qua, vậy là không bỏ điều kiện $G2:$QSV2<>"" này được, thanks anh!!!
 
Đã có 15 bài xử lý bằng công thức, vui thiệt nhưng hoa cả mắt.
Thử với VBA coi sao nhé.
Khà khà khà! --=0

"Người ta đi bắt Pôkề...
(Còn) anh em mình ham xử chủ đề Excel..."

Ngày lễ thảnh thơi 30/4, do không có pháo hoa coi chơi, nên hai anh em đã làm phiền anh Ba Tê coi "pháo hoa" công thức chút chút mà!
Đâu dám chọc giận anh. /-*+//-*+//-*+/

Chúc anh em ngày nghỉ lễ thật vui vẻ, an bình bên gia đình.
 
Đã có 15 bài xử lý bằng công thức, vui thiệt nhưng hoa cả mắt.
Thử với VBA coi sao nhé.
Có xem file của anh gửi, nhưng hình như có chút gì đó... chắc nhờ anh xem lại kết quả của hai sheets.

Cảm ơn anh nhiều.
 

File đính kèm

Có xem file của anh gửi, nhưng hình như có chút gì đó... chắc nhờ anh xem lại kết quả của hai sheets.

Cảm ơn anh nhiều.
Đã chỉnh code lại, không biết có đúng ý chủ topic chưa, mọi người "xúm" nhau ngồi "xem pháo hoa GPE", chủ topic thì chắc "phẻ" rồi.
 

File đính kèm

Đã chỉnh code lại, không biết có đúng ý chủ topic chưa, mọi người "xúm" nhau ngồi "xem pháo hoa GPE", chủ topic thì chắc "phẻ" rồi.
Còn chút xíu nữa anh, theo ý chủ thớt vầy:
- Mình có dùng hàm MODE tìm được giá trị xuất hiện nhiều nhất có trong hàng nhưng lại không tìm được giá trị thứ 2 với số lần xuất hiện nhiều thứ 2 có trong hàng
(Trong trường hợp trong hàng có nhiều giá trị với số lần xuất hiện nhiều nhất là như nhau thì ưu tiên lấy giá trị trong hàng từ trái qua phải)
K2 đang là 1, anh sửa thành số 0
S2 đang là 0, anh sửa thành số 1
Tức bây giờ số 0 và 1 có số tần suất xuất hiện lớn nhất bằng nhau, nhưng số nào phát sinh trước thì phải xếp hạng trên, như bây giờ đã sửa lại thì 0 xếp trước.

Còn có yêu cầu hai của chủ thớt nữa, mà cái này mới vui hơn.
Bạn ơi cho mình hỏi ạ: nếu mình muốn tìm ngược lại là thay cho tìm 2 giá trị với số lần xuất hiện nhiều nhất như trên thì bây giờ muốn tìm 2 giá trị với số lần xuất hiện ít nhất mình làm như thế nào ạ? Rất Mong sự hồi âm của các bạn!
Do yêu cầu hai này mới có màn "pháo hoa" công thức đó anh Ba Tê.

Chúc anh ngày vui. /-*+//-*+//-*+/
 
Còn chút xíu nữa anh, theo ý chủ thớt vầy:

K2 đang là 1, anh sửa thành số 0
S2 đang là 0, anh sửa thành số 1
Tức bây giờ số 0 và 1 có số tần suất xuất hiện lớn nhất bằng nhau, nhưng số nào phát sinh trước thì phải xếp hạng trên, như bây giờ đã sửa lại thì 0 xếp trước.

Còn có yêu cầu hai của chủ thớt nữa, mà cái này mới vui hơn.

Do yêu cầu hai này mới có màn "pháo hoa" công thức đó anh Ba Tê.

Chúc anh ngày vui. /-*+//-*+//-*+/
Lỡ rồi thì theo luôn ra 4 cột: Nhiều nhất, nhiều thứ nhì, Nhỏ nhất, nhỏ thứ nhì.
Nếu chủ topic "nếu" nữa thì chạy.
 

File đính kèm

Lỡ rồi thì theo luôn ra 4 cột: Nhiều nhất, nhiều thứ nhì, Nhỏ nhất, nhỏ thứ nhì.
Nếu chủ topic "nếu" nữa thì chạy.
"Lỡ" thì trị cho lên "mài" luôn anh, phần Max đã "chuẩn không phải chỉnh" --=0, nhưng phần Min (bé) cũng như dzậy đó, tức cũng xếp "bé" nào trước "bé" nào sau đó anh, anh xem giả định sẳn trong file kèm để anh dễ xử các "bé".

Chúc anh ngày vui. /-*+//-*+//-*+/
 

File đính kèm

"Lỡ" thì trị cho lên "mài" luôn anh, phần Max đã "chuẩn không phải chỉnh" --=0, nhưng phần Min (bé) cũng như dzậy đó, tức cũng xếp "bé" nào trước "bé" nào sau đó anh, anh xem giả định sẳn trong file kèm để anh dễ xử các "bé".

Chúc anh ngày vui. /-*+//-*+//-*+/
Có khi nào tìm lớn nhất theo chiều trái phải, còn nhỏ nhất tìm theo phải trái không?
Chóng mặt à nghe.
 

File đính kèm

Có khi nào tìm lớn nhất theo chiều trái phải, còn nhỏ nhất tìm theo phải trái không?
Chóng mặt à nghe.
Vậy là màn "pháo hoa GPE" đã "rực rỡ" đủ màu sắc! ?><???

Chú "Ngựa núi" (Sơn Mã) kỳ này "phẻ" re như bò kéo xe rồi, khỏi phải leo núi nữa.

Còn cái "dụ" mà anh nói: phải trái - trái phải thì coi như hổng biết à nhe! chớ "dẻ" đường cho nai chạy, í lộn "ngựa núi" chạy chứ (chú ngựa này chắc dòng dõi Lạc Long Quân ở biển nên thuộc họ "cá" nhiều hơn ở núi với bà Âu Cơ, nên nhiều bài chủ thớt toàn là liên hệ đến lôtô vé số cá độ... chọc chủ thớt tí cho vui cửa vui nhà nha, đừng dzận) --=0

Chúc anh em ngày nghỉ lễ vui vẻ. /-*+//-*+//-*+/
 
Có khi nào tìm lớn nhất theo chiều trái phải, còn nhỏ nhất tìm theo phải trái không?
Chóng mặt à nghe.
Thầy ơi, bài này khi mà trong hàng mà thiếu mất một số chẳng hạn không có số 1 thì code báo lỗi không thống kê được số lần xuất hiện của số 1 là 0 lần! Cảm ơn thầy đã giúp đỡ ạ!
 
Thầy ơi, bài này khi mà trong hàng mà thiếu mất một số chẳng hạn không có số 1 thì code báo lỗi không thống kê được số lần xuất hiện của số 1 là 0 lần! Cảm ơn thầy đã giúp đỡ ạ!
Bạn hỏi tìm số lần xuất hiện nhiều nhất, nhiều thứ hai, nhỏ nhất, nhỏ thứ hai, đâu có nói tìm số lần xuất hiện của tất cả các số, hoặc không xuất hiện?
 
Thầy ơi, bài này khi mà trong hàng mà thiếu mất một số chẳng hạn không có số 1 thì code báo lỗi không thống kê được số lần xuất hiện của số 1 là 0 lần! Cảm ơn thầy đã giúp đỡ ạ!
Bạn đưa ra dữ liệu 1 đàng, lại đi hỏi một nẻo....
Nếu số 1 không hiện hữu trong bảng thì các ô đó trống rỗng (blank) thì có đâu mà tính tần suất xuất hiện như yêu cầu ban đầu của bạn đưa ra. Tức là, yêu cầu lúc đầu: hễ có xuất hiện trong bảng thì xem nó nhiều nhất hay ít nhất, và nhiều/ít hạng thứ mấy.... rồi tìm hạng 1,2 nhiều ít nhất. Số 1 do không hiện hữu thì làm sao nó tính bằng 0 đồng nghĩa là ít nhất đây!!?
Trước khi hỏi bạn cũng phải xem câu hỏi mình có mâu thuẩn gì với yêu cầu không! rồi hẳn hãy hỏi.
 
Bạn đưa ra dữ liệu 1 đàng, lại đi hỏi một nẻo....
Nếu số 1 không hiện hữu trong bảng thì các ô đó trống rỗng (blank) thì có đâu mà tính tần suất xuất hiện như yêu cầu ban đầu của bạn đưa ra. Tức là, yêu cầu lúc đầu: hễ có xuất hiện trong bảng thì xem nó nhiều nhất hay ít nhất, và nhiều/ít hạng thứ mấy.... rồi tìm hạng 1,2 nhiều ít nhất. Số 1 do không hiện hữu thì làm sao nó tính bằng 0 đồng nghĩa là ít nhất đây!!?
Trước khi hỏi bạn cũng phải xem câu hỏi mình có mâu thuẩn gì với yêu cầu không! rồi hẳn hãy hỏi.
Dạ, mình xin lỗi ạ. Vì mình làm mãi vừa mới bị 1 trường hợp là trong dãy nào đó khi thiếu mất đi 1 số ví dụ như số 1 chẳng hạn thì code báo lỗi không liệt kê ra số nào ra ít nhất ạ!
 
Bạn hỏi tìm số lần xuất hiện nhiều nhất, nhiều thứ hai, nhỏ nhất, nhỏ thứ hai, đâu có nói tìm số lần xuất hiện của tất cả các số, hoặc không xuất hiện?
Dạ, đúng rồi thầy ạ, vẫn là tìm giá trị với số lần xuất hiện nhiều nhất, nhiều thứ hai, nhỏ nhất , nhỏ thứ hai. Chỉ là khi em làm vừa mới có trường hợp tự nhiên báo lỗi không ra kết quả. Em mày mò mãi mới phát hiện ra là trong trường hợp nếu trong hàng mà thiếu đi một số nào đó (Ví dụ trong hàng nào đó mà không có số 1 chẳng hạn) thì code sẽ báo lỗi không ra kết quả thầy ạ. Mong thầy xem giúp ạ! Xin cảm ơn thầy!
 
Dạ, mình xin lỗi ạ. Vì mình làm mãi vừa mới bị 1 trường hợp là trong dãy nào đó khi thiếu mất đi 1 số ví dụ như số 1 chẳng hạn thì code báo lỗi không liệt kê ra số nào ra ít nhất ạ!
Vậy thì bạn chờ tôi xem lại coi sao.
Dùng công thức như các bạn khác thì sao, có lỗi không?
 
Dạ, dùng công thức thì không có lỗi thầy ạ! Nhưng dùng VBA như thầy thì file nhanh mà gọn rất nhiều ạ! Xin cảm ơn thầy nhiều!
Do bạn hỏi ban đầu là Max, Viết code xong lại muốn có thêm Min, ghép tới ghép lui thành 1 nùi rối tung.
Tách thành 2 hàm Max và Min luôn cho lành. Bạn kiểm tra lại xem sao.
Bạn thử cho biết bạn làm công việc gì với kiểu số liệu này?
 

File đính kèm

thử với sub nầy xem sao
Mã:
Sub Max_Min_1_2()
Dim Darr(), Farr(), Arr(), Sarr(), i As Long, j As Long, Tmp
Darr = Range("G2", Cells(Range("G2").End(xlDown).Row, Range("XFD2").End(xlToLeft).Column)).Value
ReDim Arr(1 To UBound(Darr), 1 To 4)
For i = 1 To UBound(Darr)
  ReDim Farr(0 To 36)
  For j = 1 To UBound(Darr, 2)
    Tmp = Darr(i, j)
    If Tmp <> "" Then Farr(Tmp) = Farr(Tmp) + 1
  Next j
  Sarr = SortArr(Farr)
  Arr(i, 1) = Sarr(UBound(Sarr))      ' lon 1
  Arr(i, 2) = Sarr(UBound(Sarr) - 1)  ' lon 2
  Arr(i, 3) = Sarr(0)                 ' nho 1
  Arr(i, 4) = Sarr(1)                 ' nho 2
Next i
Range("C2").Resize(UBound(Darr), 4) = Arr
End Sub
Private Function SortArr(ByVal Sarr As Variant)
  Dim sList As Object, oList1 As Object, oList2 As Object, Arr As Variant, Tmp As String, i As Long, idx As Long
  Set oList1 = CreateObject("System.Collections.arrayList")
  Set oList2 = CreateObject("System.Collections.arrayList")
  For i = LBound(Sarr) To UBound(Sarr)
    If Sarr(i) <> "" Then
      oList1.Add Sarr(i) + i / 20000
      oList2.Add i
    End If
  Next
  Set sList = oList1.Clone
  sList.Sort
  ReDim Arr(0 To sList.Count - 1)
  For i = 0 To sList.Count - 1
    idx = oList1.InDexOf(sList(i), 0)
    Arr(i) = oList2(idx)
  Next
  SortArr = Arr
End Function
 

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

Back
Top Bottom