Đếm và sắp xếp dữ liệu (1 người xem)

Liên hệ QC

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

Apomethe

Thành viên mới
Tham gia
10/9/09
Bài viết
7
Được thích
0
1.Nhóm của mình cần chọn ra một danh sách nhân vật, nhưng mỗi người lại có ý kiến khác nhau nên mỗi người đưa ra danh sách bình chọn của mình vào một cột trong Excel. Bây giờ mình cần chọn ra từ các danh sách ấy một danh sách mới sắp xếp theo thứ tự nhân vật được nhiều lựa chọn nhất lên đầu. Nếu có số lần lựa chọn thì càng tốt.

Có thể hiểu giống như là bỏ phiếu quốc hội. Mình cần đưa ra kết quả những người nào được chọn nhiều nhất.

2. Trong trường hợp danh sách của mình có 10 người. Mình muốn người thứ nhất là 10 điểm, người thứ hai 9 điếm,... thì có thể dùng cách tương tự để tính điểm không?
 
Chào bạn, Bạn nói trõng không vậy sao ai hiểu nỗi mà giúp bạn
Bạn nên có file ex đính kèm đi!
 
1.Nhóm của mình cần chọn ra một danh sách nhân vật, nhưng mỗi người lại có ý kiến khác nhau nên mỗi người đưa ra danh sách bình chọn của mình vào một cột trong Excel. Bây giờ mình cần chọn ra từ các danh sách ấy một danh sách mới sắp xếp theo thứ tự nhân vật được nhiều lựa chọn nhất lên đầu. Nếu có số lần lựa chọn thì càng tốt.

Có thể hiểu giống như là bỏ phiếu quốc hội. Mình cần đưa ra kết quả những người nào được chọn nhiều nhất.
Bạn lập 2 cột
+ cột 1 chưa danh sách tất cả những người được chọn
+ cột 2 lập công thức hàm COUNTIF(...) đếm số lần lặp của từng người trong cột 1
+ Sắp xếp cột 1 cột 2 theo giá trị cột 2
thế là có kết quả thứ tự và số lần được chọn


2. Trong trường hợp danh sách của mình có 10 người. Mình muốn người thứ nhất là 10 điểm, người thứ hai 9 điếm,... thì có thể dùng cách tương tự để tính điểm không?

Giờ thì gán điểm theo thứ tự trên là được
 
Lần chỉnh sửa cuối:
Đây là file mẫu, sẽ có thêm nhiều cột tương tự như vậy. Bây giờ mình muốn tạo một cột liệt kê ra những người được liệt kê nhiều lần nhất theo thứ tự từ trên xuống
 

File đính kèm

Lần chỉnh sửa cuối:
1.Nhóm của mình cần chọn ra một danh sách nhân vật, nhưng mỗi người lại có ý kiến khác nhau nên mỗi người đưa ra danh sách bình chọn của mình vào một cột trong Excel. Bây giờ mình cần chọn ra từ các danh sách ấy một danh sách mới sắp xếp theo thứ tự nhân vật được nhiều lựa chọn nhất lên đầu. Nếu có số lần lựa chọn thì càng tốt.

Có thể hiểu giống như là bỏ phiếu quốc hội. Mình cần đưa ra kết quả những người nào được chọn nhiều nhất.

2. Trong trường hợp danh sách của mình có 10 người. Mình muốn người thứ nhất là 10 điểm, người thứ hai 9 điếm,... thì có thể dùng cách tương tự để tính điểm không?
Nếu dữ liệu còn nhiều nữa theo mình nên dùng VBA
Câu 1 thì hiểu, câu 2 ......làm đại vì hổng hiểu ( hổng trúng thì làm lại)
Mã:
Private Sub Worksheet_Activate()
Dim Vung, d, Mg(), I, J, K, M, VungKq, kK, MgKq
Vung = Sheets("sheet1").[a1].CurrentRegion.Value
ReDim Mg(1 To UBound(Vung, 1) * UBound(Vung, 2), 1 To 2)
Set d = CreateObject("scripting.dictionary")
[a2:c1000].ClearContents
    For I = 1 To UBound(Vung, 2)
        For J = 1 To UBound(Vung, 1)
            If Vung(J, I) <> vbNullString Then
                If Not d.exists(Vung(J, I)) Then
                    K = K + 1
                    d.Add Vung(J, I), K
                    Mg(K, 1) = Vung(J, I): Mg(K, 2) = 1
                Else
                    M = d.Item(Vung(J, I))
                    Mg(M, 2) = Mg(M, 2) + 1
                End If
            End If
        Next J
    Next I
        Sheets("sheet2").[a2].Resize(K, 2) = Mg
        Range([a1], [a1000].End(xlUp)).Resize(, 2).Sort Key1:=Range("B1"), Order1:=xlDescending
        VungKq = Range([b2], [b10000].End(xlUp)).Value
        ReDim MgKq(1 To UBound(VungKq), 1 To 1):  kK = UBound(VungKq)
        MgKq(1, 1) = UBound(VungKq)
            For I = 2 To UBound(VungKq)
                K = K - 1
                MgKq(I, 1) = IIf(VungKq(I, 1) = VungKq(I - 1, 1), MgKq(I - 1, 1), K)
            Next
        [c2].Resize(UBound(VungKq)) = MgKq
End Sub
Cách làm: ở sheet1 bạn cứ nhập thêm, bớt, sửa thoải mái, xong.....chọn sheet2 xem kết quả
Mình để kết quả ở sheet2 để sheet1 bạn dễ thêm dữ liệu
 

File đính kèm

Cám ơn bạn concogia, rất đúng ý mình. Mình không nghĩ là phải dùng đến macro vì cho rằng dùng Excel cũng có thể làm được. Bây giờ mình muốn thay vùng từ ô A2 chứ không phải A1 vì dòng 1 sẽ để tên người bình chọn thì phải sửa lại như thế nào.

Phần điểm thì hiện mình chưa dùng nhưng cũng muốn biết vì cũng hay phải dùng đến. Cái này cũng đơn giản thôi, trong một danh sách thì người xếp trên sẽ có điểm cao hơn người xếp dưới, số điểm này tùy trường hợp mình sẽ đặt là bao nhiêu.

Mình định share bảng này lên mạng để nhiều người cùng edit nhưng google docs không chạy macro Visual Basic, có ai biết trang nào chia sẻ có hỗ trợ macro cho excel không?
 
Cám ơn bạn concogia, rất đúng ý mình. Mình không nghĩ là phải dùng đến macro vì cho rằng dùng Excel cũng có thể làm được. Bây giờ mình muốn thay vùng từ ô A2 chứ không phải A1 vì dòng 1 sẽ để tên người bình chọn thì phải sửa lại như thế nào.

Phần điểm thì hiện mình chưa dùng nhưng cũng muốn biết vì cũng hay phải dùng đến. Cái này cũng đơn giản thôi, trong một danh sách thì người xếp trên sẽ có điểm cao hơn người xếp dưới, số điểm này tùy trường hợp mình sẽ đặt là bao nhiêu.

Mình định share bảng này lên mạng để nhiều người cùng edit nhưng google docs không chạy macro Visual Basic, có ai biết trang nào chia sẻ có hỗ trợ macro cho excel không?
1 - Theo mình cách giải bài này là:
Tạo danh sách duy nhất ==> đếm ==> sắp xếp.
Trong bài bạn mới có 4 cột & 28 dòng, bạn nói còn nhiều cột nữa, nếu dùng công thức mà tạo danh sách duy nhất chắc "đẻ" luôn quá chứ đếm gì nổi mà đếm
2 - Bạn làm tuần tự:
Right Click vào sheet2 ==> View Code ==> chép "thằng" này vào đè lên "thằng" cũ
Mã:
Private Sub Worksheet_Activate()
Dim Vung, d, Mg(), I, J, K, M, VungKq, kK, MgKq
Vung = Sheets("sheet1").Range(Sheets("sheet1").[a2], Sheets("sheet1").[a10000].End(xlUp)).Resize(, Sheets("sheet1").[cc2].End(xlToLeft).Column)
ReDim Mg(1 To UBound(Vung, 1) * UBound(Vung, 2), 1 To 2)
Set d = CreateObject("scripting.dictionary")
    For I = 1 To UBound(Vung, 2)
        For J = 1 To UBound(Vung, 1)
            If Vung(J, I) <> vbNullString Then
            If Not d.exists(Vung(J, I)) Then
                K = K + 1
                d.Add Vung(J, I), K
                Mg(K, 1) = Vung(J, I): Mg(K, 2) = 1
            Else
                M = d.Item(Vung(J, I))
                Mg(M, 2) = Mg(M, 2) + 1
            End If
            End If
        Next J
    Next I
        Sheets("sheet2").[a2].Resize(K, 2) = Mg
        Range([a1], [a1000].End(xlUp)).Resize(, 2).Sort Key1:=Range("B1"), Order1:=xlDescending
        VungKq = Range([b2], [b10000].End(xlUp)).Value
        ReDim MgKq(1 To UBound(VungKq), 1 To 1):  kK = UBound(VungKq)
        MgKq(1, 1) = UBound(VungKq)
            For I = 2 To UBound(VungKq)
                K = K - 1
                MgKq(I, 1) = IIf(VungKq(I, 1) = VungKq(I - 1, 1), MgKq(I - 1, 1), K)
            Next
        [c2].Resize(UBound(VungKq)) = MgKq
End Sub
 
Web KT

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

Back
Top Bottom