Dalam tabel grup dan anggota, bagaimana cara mengurangi persentase tertentu anggota per grup?

-1

Saya memiliki spreadsheet Excel dengan tabel grup dan anggota. Sebagai contoh:

A Jonathan
A Roger
A Donald
B John
B Lilya
C Richard
C Lorry

Yang ingin saya lakukan adalah mengurangi jumlah anggota per grup dengan katakanlah 60%. Tidak masalah anggota mana yang ditinggalkan. Misalnya, grup B berisi 2 anggota, jadi saya ingin menghapus 1 anggota (2 * 0,6 = 1.2 jadi harus dibulatkan ke bawah, saya ingin dibulatkan ke atas jika lebih dari 0,5).

Apakah mungkin dilakukan dengan rumus Excel?

Felicia Yang
sumber
Saya membuat contoh Anda konsisten, tetapi tidak jelas apakah kata-kata Anda dengan tepat menggambarkan apa yang Anda inginkan. Apakah kamu mau pengurangan menjadi 60% atau Anda ingin mengurangi jumlahnya hingga 60% dari aslinya (yang akan menjadi pengurangan 40%)? Selain kesalahan matematika dalam contoh Anda, pembulatan perlu diterapkan ke nilai yang benar. Anda menggambarkan pembulatan jumlah reduksi, yang memberikan efek sebaliknya pada nilai yang tersisa. Jika Anda berbicara tentang pengurangan untuk 60% dari aslinya, Anda harus membulatkan berdasarkan jumlah yang tersisa daripada jumlah pengurangan.
fixer1234

Jawaban:

0

Tabel Pivot seperti @EngineerToast telah menunjukkan adalah cara yang lebih sederhana untuk melakukan ini. Tetapi saya sangat menyukai solusi rekayasa yang sangat berlebihan, jadi inilah salah satu cara untuk melakukannya di VBA. Saya curiga saya membuat terlalu rumit dengan Kamus, mungkin bisa melakukannya hanya dengan menggunakan penghitungan cepat lainnya dan kemudian menambahkan surat yang sudah digunakan ke array, tapi kami di sini ..!

Public Sub ReduceMembers()
    Dim GroupColumn: GroupColumn = 1                        'Original column containing your Groups
    Dim MemberColumn: MemberColumn = 2                      'Original column containing your Members
    Dim ReductionAmount: ReductionAmount = 0.6              'Percentage as a decimal fraction
    Range("D1").Select                                      'Start cell for your new columns

    Dim LastRow: LastRow = GetLastRow(GroupColumn)
    Dim Dictionary, DictionaryKey, I
    Set Dictionary = CreateObject("Scripting.Dictionary")

    For I = 1 To LastRow
        Dim Value: Value = Cells(I, GroupColumn).Value
        If Dictionary.Exists(Value) Then
            Dictionary(Value) = Dictionary(Value) + 1
        Else
            Dictionary.Add Value, 1
        End If
    Next

    For Each DictionaryKey In Dictionary.Keys
        Dim MaxAmount: MaxAmount = Math.Round(Dictionary(DictionaryKey) * ReductionAmount, 0)
        Dim CurrentAmount: CurrentAmount = 0
        For I = 1 To LastRow
            If Cells(I, GroupColumn) = DictionaryKey Then
                If CurrentAmount >= MaxAmount Then
                    Exit For
                End If
                ActiveCell.Value = DictionaryKey
                ActiveCell.Offset(0, 1).Value = Cells(I, MemberColumn).Value
                ActiveCell.Offset(1, 0).Select

                CurrentAmount = CurrentAmount + 1
            End If
        Next
    Next

End Sub

Function GetLastRow(GroupColumn)
    Dim Count
    Count = 0
    Do
        Count = Count + 1
    Loop Until IsEmpty(Cells(Count, GroupColumn).Value)
    GetLastRow = Count - 1
End Function

enter image description here

Jonno
sumber
Kata-kata tersebut ambigu, tetapi ini memberikan pengurangan untuk 60% dari aslinya daripada pengurangan dari 60%.
fixer1234
0

Untuk tindakan satu kali, Anda bisa melakukan ini dengan tabel pivot. Jika Anda perlu sering melakukannya, pendekatan ini mungkin menjadi canggung.

Final Screenshot

Pertama, tambahkan judul kolom. Saya menggunakan Group dan Name. pilih salah satu sel dalam daftar dan klik "Pivot Table" pada pita Insert (tombol paling kiri).

Step 2

Saya t harus secara otomatis menebak rentang yang Anda inginkan tabel pivot diterapkan. Anda seharusnya bisa mengklik "OK" untuk mendapatkan tabel pivot Anda ditambahkan ke sheet baru. Selanjutnya, tambahkan bidang Group lalu Name ke bagian baris dari tabel dengan menyeretnya dari daftar bidang ke daftar baris. Anda juga harus menyeret sesuatu ke dalam bagian Nilai atau tidak akan membiarkan Anda memfilter untuk persentase teratas.

Step 3

Klik kanan pada salah satu nama di tabel pivot dan kemudian klik Filter & gt; 10 besar...

Step 4

Siapkan filter untuk apa pun yang Anda inginkan dan klik OK.

Step 5

Untuk membuatnya lebih mirip data asli Anda, klik kanan tabel, buka Pivot Table Options dan kemudian tab Display dan centang "Classic PivotTable layout". Selanjutnya, klik kanan pada salah satu Grup di Tabel Pivot dan klik Pengaturan Bidang. Tetapkan Subtotal ke Tidak Ada dan, pada Tata Letak & amp; Cetak tab, centang "Ulangi Label Barang".

Step 6

Engineer Toast
sumber
Kata-kata tersebut ambigu, tetapi ini memberikan pengurangan untuk 60% dari aslinya daripada pengurangan dari 60%.
fixer1234
@ fixer1234 Anda secara teknis benar . Sudah diperbaiki.
Engineer Toast