3 cara untuk mencari semua kombinasi dari satu set nombor yang jumlahnya kepada jumlah tertentu.
Mencari kombinasi nilai yang menambah jumlah yang diberikan adalah masalah biasa dalam analisis data. Sebagai contoh, anda mungkin ingin mengetahui semua kemungkinan kombinasi item yang boleh dibeli dengan anggaran tertentu, atau semua cara yang mungkin untuk memperuntukkan sumber untuk memenuhi keperluan tertentu. Dalam artikel ini, kami akan meneroka cara menggunakan Excel Solver dan VBA untuk menyelesaikan tugas. Kami juga akan membincangkan beberapa perangkap yang berpotensi dan batasan setiap pendekatan yang mungkin timbul ketika mengendalikan dataset besar atau kekangan kompleks.
Malangnya, tidak ada fungsi Excel yang dibina dapat membantu anda mengenal pasti angka -angka yang menambah jumlah yang diberikan. Nasib baik, Excel menyediakan tambahan khas untuk menyelesaikan masalah pengaturcaraan linear. Tambahan Solver disertakan dengan semua versi Excel tetapi tidak didayakan secara lalai. Jika anda tidak biasa dengan alat ini, inilah artikel yang hebat tentang cara menambah dan menggunakan Solver dalam Excel.
Dengan solver add-in yang diaktifkan dalam Excel anda, teruskan dengan langkah-langkah berikut:
Untuk ini, masukkan set nombor anda dalam satu lajur (A3: A12 dalam kes kami) dan tambahkan lajur kosong di sebelah kanan nombor anda untuk hasilnya (B3: B12). Dalam sel yang berasingan (B13), masukkan formula sumroduct yang serupa dengan ini:
=SUMPRODUCT(A3:A12, B3:B12)
Pada tab Data , dalam kumpulan analisis , klik butang Solver .
Dalam kotak dialog Parameter Solver , konfigurasikan sel objektif dan berubah -ubah:
Untuk menentukan kekangan, iaitu sekatan atau syarat yang mesti dipenuhi, klik butang Tambah . Dalam tetingkap dialog Tambah Kekangan , pilih julat yang dihasilkan (B3: B12) dan pilih bin dari senarai juntai bawah. Kekangan akan ditetapkan secara automatik kepada binari . Apabila selesai, klik OK.
Apabila dibawa balik ke tetingkap dialog Parameter Solver , semak tetapan anda dan klik butang Solve .
Beberapa saat (atau minit) kemudian, kotak dialog hasil Solver akan muncul. Jika berjaya, pilih pilihan Penyelesaian Keep Solver , dan klik OK untuk keluar dari dialog.
Akibatnya, anda akan mempunyai 1 dimasukkan di sebelah nombor yang menambah jumlah yang ditentukan. Bukan penyelesaian yang mesra pengguna, tetapi ia adalah yang terbaik dari kotak Excel yang boleh dilakukan.
Untuk tujuan visualisasi, saya telah menyerlahkan sel -sel yang memberikan jumlah yang dikehendaki dalam cahaya hijau:
Batasan : Solver Excel dapat mencari, paling banyak, hanya satu gabungan nombor yang sama dengan jumlah tertentu.
Untuk mendapatkan semua kombinasi yang mungkin dari satu set nombor yang diberikan sehingga nilai tertentu, anda boleh menggunakan fungsi tersuai di bawah. Jika anda baru untuk UDFS, anda akan dapati banyak maklumat berguna dalam panduan ini: Bagaimana untuk membuat fungsi pengguna yang ditetapkan dalam Excel.
Bagaimana fungsi ini berfungsi
Fungsi utama, FindSumcombinations , memanggil beberapa fungsi subsidiari yang melaksanakan sub-tugas yang lebih kecil. Fungsi yang dinamakan SumuprecursiveCombinations melaksanakan algoritma teras yang mendapati semua jumlah yang mungkin dalam julat yang ditentukan dan menapis mereka yang mencapai sasaran. Fungsi arraytoString mengawal bentuk rentetan output. Tiga lagi fungsi ( SumArray , AddToArray , dan CopyArray ) bertanggungjawab untuk memproses tatasusunan perantaraan: Setiap kali kita membuat array sementara, tambahkan satu elemen dari array sumber kepadanya, dan periksa sama ada jumlah sasaran dicapai. Algoritma teras diambil dari thread StackOverflow ini, terima kasih untuk berkongsi!
Sintaks
Dari perspektif pengguna, sintaks fungsi tersuai kami semudah ini:
FindSumCombinations (julat, jumlah)Di mana:
Perhatikan! Fungsi tersuai hanya berfungsi dalam array dinamik Excel 365 dan 2021.
Cara menggunakan fungsi FindSumCombinations:
Sebagai contoh, untuk mencari semua kemungkinan kombinasi nombor dalam julat A6: A15 yang sama dengan jumlah dalam A3, formula adalah:
=FindSumCombinations(A6:A15, A3)
Seperti mana -mana fungsi array dinamik yang lain, anda memasukkan formula hanya satu sel (C6 dalam imej di bawah) dan ia memaparkan hasilnya ke dalam sel -sel yang diperlukan. Secara lalai, rentetan yang dipisahkan koma adalah output berturut-turut:
Untuk mengembalikan hasil dalam lajur, bungkus fungsi tersuai ke dalam transpose seperti ini:
=TRANSPOSE(FindSumCombinations(A6:A15, A3))
Untuk mengeluarkan rentetan dalam bentuk array yang tertutup dalam pendakap keriting, ubah fungsi arraytoString seperti berikut:
Hasilnya akan kelihatan serupa dengan ini:
Batasan : Fungsi tersuai ini hanya berfungsi dalam array dinamik Excel 365 dan Excel 2021.
Fungsi tersuai yang diterangkan di atas mengembalikan kombinasi nombor sebagai rentetan. Jika anda lebih suka mempunyai setiap nombor dalam sel yang berasingan, makro ini akan membantu. Kod ini ditulis oleh pakar Excel lain Alexander Trifuntov yang telah secara aktif membantu pengguna menyelesaikan pelbagai masalah Excel di blog ini.
Mulakan dengan menambahkan kod berikut ke buku kerja anda. Untuk langkah -langkah terperinci, sila lihat cara memasukkan kod VBA dalam Excel.
Seterusnya, buat pengguna ( masukkan > userform ) dengan reka bentuk dan sifat berikut:
Selepas melengkapkan reka bentuk borang, tambahkan kod untuk borang tersebut. Untuk ini, klik kanan pada borang dalam Projek Explorer dan pilih Kod Lihat :
Petua. Daripada membuat semula borang dari awal, anda boleh memuat turun buku kerja sampel kami di hujung siaran ini dan menyalin modul kod dan userform1 dari sana (lihat cara menyalin makro ke buku kerja lain). Untuk menjadikan makro boleh diakses dalam semua buku kerja anda, salinnya ke buku kerja makro peribadi.
Dengan kod dan bentuk di tempat, tekan Alt F8 dan jalankan makro Findallcombinations :
Mengenai bentuk yang muncul, tentukan perkara berikut:
Apabila menentukan sel kiri atas julat output, pastikan terdapat sekurang-kurangnya satu baris kosong di atas (untuk tajuk) dan sel kosong yang cukup ke bawah dan ke kanan . Sekiranya terdapat sel kosong yang tidak mencukupi, data anda yang sedia ada akan ditimpa.
Mengklik OK akan menghasilkan hasil seperti yang ditunjukkan dalam tangkapan skrin di bawah:
Bentuk output ini menjadikannya lebih mudah untuk memeriksa hasilnya - hanya masukkan formula jumlah dalam sel F13, seret ke kanan di dua sel lagi dan anda akan melihat bahawa setiap gabungan nombor menambah sehingga nilai yang ditentukan (50).
Batasan: Untuk satu set nombor yang besar, makro mungkin mengambil sedikit masa untuk menghasilkan semua kombinasi yang mungkin.
Kelebihan : Bekerja dalam semua versi Excel 2010 - 365; Menyediakan dua bentuk output - rentetan nilai dan nombor yang dipisahkan koma dalam sel berasingan.
Kesimpulannya, mencari semua kombinasi nilai yang sama dengan nilai tertentu adalah alat yang berkuasa untuk menyelesaikan pelbagai masalah analisis data. Mudah -mudahan, artikel ini telah memberi anda titik permulaan yang berguna untuk meneroka topik ini lebih lanjut dan mengendalikan masalah yang sama dalam kerja anda sendiri. Terima kasih kerana membaca!
Cari kombinasi yang sama dengan jumlah yang diberikan - contoh (fail .xlsm)
Atas ialah kandungan terperinci Cari semua kombinasi nombor yang sama dengan jumlah yang diberikan dalam Excel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!