ไปยังเนื้อหาหลัก

จะค้นหาชุดค่าผสมทั้งหมดที่เท่ากับผลรวมที่กำหนดใน Excel ได้อย่างไร

ผู้เขียน: Xiaoyang แก้ไขล่าสุด: 2024-08-01

การค้นหาชุดตัวเลขที่เป็นไปได้ทั้งหมดภายในรายการที่รวมกันเป็นจำนวนเฉพาะถือเป็นความท้าทายที่ผู้ใช้ Excel จำนวนมากอาจเผชิญ ไม่ว่าจะเพื่อวัตถุประสงค์ด้านงบประมาณ การวางแผน หรือการวิเคราะห์ข้อมูล

ในตัวอย่างนี้ เรามีรายการตัวเลข และมีวัตถุประสงค์เพื่อระบุว่าชุดค่าผสมใดจากรายการนี้รวมกันได้ไม่เกิน 480 ภาพหน้าจอที่ให้ไว้แสดงให้เห็นว่ามีกลุ่มชุดค่าผสมที่เป็นไปได้ห้ากลุ่มที่จะบรรลุผลรวมนี้ รวมถึงชุดค่าผสมเช่น 300+120 +60, 250+120+60+50 และอื่นๆ ในบทความนี้ เราจะสำรวจวิธีการต่างๆ เพื่อระบุชุดค่าผสมเฉพาะของตัวเลขภายในรายการที่รวมค่าที่กำหนดใน Excel

รับชุดตัวเลขที่เป็นไปได้ทั้งหมด

ค้นหาการรวมกันของตัวเลขเท่ากับผลรวมที่กำหนดด้วยฟังก์ชัน Solver

รับการรวมกันของตัวเลขทั้งหมดเท่ากับผลรวมที่กำหนด

รับชุดตัวเลขทั้งหมดที่มีผลรวมในช่วงด้วยโค้ด VBA


ค้นหาการรวมเซลล์ที่เท่ากับผลรวมที่กำหนดด้วยฟังก์ชัน Solver

การเจาะลึกเข้าไปใน Excel เพื่อค้นหาชุดค่าผสมของเซลล์ที่รวมกันเป็นจำนวนเฉพาะอาจดูยุ่งยาก แต่ Solver Add-in ทำให้มันเป็นเรื่องง่าย เราจะแนะนำคุณตลอดขั้นตอนง่ายๆ ในการตั้งค่า Solver และค้นหาชุดเซลล์ที่เหมาะสม ทำให้สิ่งที่ดูเหมือนเป็นงานที่ซับซ้อนตรงไปตรงมาและทำได้

ขั้นตอนที่ 1: เปิดใช้งาน Add-in ของ Solver

  1. กรุณาไปที่ เนื้อไม่มีมัน > Optionsใน ตัวเลือก Excel คลิกตกลง Add-Ins จากบานหน้าต่างด้านซ้าย จากนั้นให้คลิก Go ปุ่ม. ดูภาพหน้าจอ:
    ไปที่กล่องตัวเลือกของ Excel เพื่อเลือก Add-in
  2. จากนั้น Add-Ins กล่องโต้ตอบปรากฏขึ้น ให้ตรวจสอบ โปรแกรม Solver Add-in แล้วคลิก OK เพื่อติดตั้ง Add-in นี้ให้สำเร็จ
    เปิดใช้งาน Solver Add-in

ขั้นตอนที่ 2: ใส่สูตร

หลังจากเปิดใช้งาน Add-in ของ Solver คุณจะต้องป้อนสูตรนี้ลงในเซลล์ B11:

=SUMPRODUCT(B2:B10,A2:A10)
หมายเหตุ: ในสูตรนี้: B2: B10 คือคอลัมน์ของเซลล์ว่างข้างรายการหมายเลขของคุณ และ A2: A10 คือรายการหมายเลขที่คุณใช้

ป้อนสูตรในเซลล์

ขั้นตอนที่ 3: กำหนดค่าและเรียกใช้ Solver เพื่อให้ได้ผลลัพธ์

  1. คลิก ข้อมูล > ตัวแก้ ไป พารามิเตอร์ Solver ในกล่องโต้ตอบโปรดดำเนินการดังต่อไปนี้:
    • (1. ) คลิก ปุ่มพารามิเตอร์ของตัวแก้ปัญหา เพื่อเลือกเซลล์ B11 โดยที่สูตรของคุณอยู่จาก กำหนดวัตถุประสงค์ มาตรา;
    • (2. ) จากนั้นในไฟล์ ไปยัง เลือก มูลค่าของและป้อนค่าเป้าหมายของคุณ 480 ตามที่คุณต้องการ
    • (3. ) ภายใต้ โดยการเปลี่ยนเซลล์แปรผัน โปรดคลิก ปุ่มพารามิเตอร์ของตัวแก้ปัญหา ปุ่มเพื่อเลือกช่วงเซลล์ B2: B10 ที่จะทำเครื่องหมายหมายเลขที่เกี่ยวข้องของคุณ
    • (4. ) จากนั้นคลิก เพิ่ม ปุ่ม
    • กำหนดค่าพารามิเตอร์ของ Solver
  2. จากนั้น เพิ่มข้อ จำกัด กล่องโต้ตอบจะปรากฏขึ้น คลิก ปุ่มพารามิเตอร์ของตัวแก้ปัญหา ปุ่มเพื่อเลือกช่วงเซลล์ B2: B10และเลือก ถัง จากรายการแบบเลื่อนลง ในที่สุดคลิก OK ปุ่ม. ดูภาพหน้าจอ:
    กำหนดค่าเพิ่มข้อจำกัด
  3. ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร พารามิเตอร์ Solver คลิกที่ แก้ ปุ่มบางนาทีต่อมา a ผลการแก้ปัญหา กล่องโต้ตอบจะปรากฏขึ้น และคุณจะเห็นการรวมกันของเซลล์ซึ่งเท่ากับผลรวมที่กำหนด 480 ซึ่งถูกทำเครื่องหมายเป็น 1 ในคอลัมน์ B ใน ผลการแก้ปัญหา โปรดเลือก ให้โซลูชัน Solver แล้วคลิก OK เพื่อออกจากกล่องโต้ตอบ ดูภาพหน้าจอ:
    กำหนดค่าผลลัพธ์ของ Solver เพื่อรับผลลัพธ์
หมายเหตุ: อย่างไรก็ตาม วิธีการนี้มีข้อจำกัด: สามารถระบุได้เพียงชุดเดียวของเซลล์ที่รวมกันเป็นผลรวมที่ระบุ แม้ว่าจะมีชุดค่าผสมที่ถูกต้องหลายชุดก็ตาม

รับการรวมกันของตัวเลขทั้งหมดเท่ากับผลรวมที่กำหนด

การสำรวจความสามารถเชิงลึกของ Excel ช่วยให้คุณค้นหาชุดตัวเลขทุกชุดที่ตรงกับผลรวมที่ระบุ และง่ายกว่าที่คุณคิด ในส่วนนี้จะแสดงสองวิธีในการค้นหาชุดค่าผสมของตัวเลขทั้งหมดที่เท่ากับผลรวมที่ระบุ

รับการรวมกันของตัวเลขทั้งหมดเท่ากับผลรวมที่กำหนดด้วยฟังก์ชันที่กำหนดโดยผู้ใช้

เพื่อค้นหาการรวมกันของตัวเลขที่เป็นไปได้ทั้งหมดจากชุดเฉพาะที่รวมกันถึงค่าที่กำหนด ฟังก์ชันแบบกำหนดเองที่แสดงด้านล่างนี้ทำหน้าที่เป็นเครื่องมือที่มีประสิทธิภาพ

ขั้นตอนที่ 1: เปิดตัวแก้ไขโมดูล VBA และคัดลอกโค้ด

  1. ค้างไว้ ALT + F11 ใน Excel และจะเปิดไฟล์ Microsoft Visual Basic สำหรับแอปพลิเคชัน หน้าต่าง
  2. คลิก สิ่งที่ใส่เข้าไป > โมดูลและวางรหัสต่อไปนี้ในหน้าต่างโมดูล
    รหัส VBA: รับชุดตัวเลขทั้งหมดเท่ากับผลรวมที่กำหนด
    Public Function MakeupANumber(xNumbers As Range, xCount As Long)
    'updateby Extendoffice
        Dim arrNumbers() As Long
        Dim arrRes() As String
        Dim ArrTemp() As Long
        Dim xIndex As Long
        Dim rg As Range
    
        MakeupANumber = ""
        
        If xNumbers.CountLarge = 0 Then Exit Function
        ReDim arrNumbers(xNumbers.CountLarge - 1)
        
        xIndex = 0
        For Each rg In xNumbers
            If IsNumeric(rg.Value) Then
                arrNumbers(xIndex) = CLng(rg.Value)
                xIndex = xIndex + 1
            End If
        Next rg
        If xIndex = 0 Then Exit Function
        
        ReDim Preserve arrNumbers(0 To xIndex - 1)
        ReDim arrRes(0)
        
        Call Combinations(arrNumbers, xCount, ArrTemp(), arrRes())
        ReDim Preserve arrRes(0 To UBound(arrRes) - 1)
        MakeupANumber = arrRes
    End Function
    
    Private Sub Combinations(Numbers() As Long, Count As Long, ArrTemp() As Long, ByRef arrRes() As String)
    
        Dim currentSum As Long, i As Long, j As Long, k As Long, num As Long, indRes As Long
        Dim remainingNumbers() As Long, newCombination() As Long
        
        currentSum = 0
        If (Not Not ArrTemp) <> 0 Then
            For i = LBound(ArrTemp) To UBound(ArrTemp)
                currentSum = currentSum + ArrTemp(i)
            Next i
        End If
     
        If currentSum = Count Then
            indRes = UBound(arrRes)
            ReDim Preserve arrRes(0 To indRes + 1)
            
            arrRes(indRes) = ArrTemp(0)
            For i = LBound(ArrTemp) + 1 To UBound(ArrTemp)
                arrRes(indRes) = arrRes(indRes) & "," & ArrTemp(i)
            Next i
        End If
        
        If currentSum > Count Then Exit Sub
        If (Not Not Numbers) = 0 Then Exit Sub
        
        For i = 0 To UBound(Numbers)
            Erase remainingNumbers()
            num = Numbers(i)
            For j = i + 1 To UBound(Numbers)
                If (Not Not remainingNumbers) <> 0 Then
                    ReDim Preserve remainingNumbers(0 To UBound(remainingNumbers) + 1)
                Else
                    ReDim Preserve remainingNumbers(0 To 0)
                End If
                remainingNumbers(UBound(remainingNumbers)) = Numbers(j)
                
            Next j
            Erase newCombination()
    
            If (Not Not ArrTemp) <> 0 Then
                For k = 0 To UBound(ArrTemp)
                    If (Not Not newCombination) <> 0 Then
                        ReDim Preserve newCombination(0 To UBound(newCombination) + 1)
                    Else
                        ReDim Preserve newCombination(0 To 0)
                    End If
                    newCombination(UBound(newCombination)) = ArrTemp(k)
    
                Next k
            End If
            
            If (Not Not newCombination) <> 0 Then
                ReDim Preserve newCombination(0 To UBound(newCombination) + 1)
            Else
                ReDim Preserve newCombination(0 To 0)
            End If
            
            newCombination(UBound(newCombination)) = num
    
            Combinations remainingNumbers, Count, newCombination, arrRes
        Next i
    
    End Sub
    

ขั้นตอนที่ 2: ป้อนสูตรที่กำหนดเองเพื่อให้ได้ผลลัพธ์

หลังจากวางโค้ดแล้ว ให้ปิดหน้าต่างโค้ดเพื่อกลับไปที่เวิร์กชีต ป้อนสูตรต่อไปนี้ลงในเซลล์ว่างเพื่อแสดงผลลัพธ์ จากนั้นกด เข้าสู่ กุญแจสำคัญในการรับชุดค่าผสมทั้งหมด ดูภาพหน้าจอ:

=MakeupANumber(A2:A10,B2)
หมายเหตุ: ในสูตรนี้: A2: A10 คือรายการหมายเลข และ B2 คือผลรวมทั้งหมดที่คุณต้องการได้รับ

รับการรวมกันของตัวเลขทั้งหมดในแนวนอน

ปลาย: หากคุณต้องการแสดงรายการผลลัพธ์ชุดค่าผสมในแนวตั้งในคอลัมน์ โปรดใช้สูตรต่อไปนี้:
=TRANSPOSE(MakeupANumber(A2:A10,B2))
รับการรวมกันของตัวเลขทั้งหมดในแนวตั้ง
ข้อจำกัดของวิธีนี้:
  • ฟังก์ชันแบบกำหนดเองนี้ใช้งานได้ใน Excel 365 และ 2021 เท่านั้น
  • วิธีนี้ใช้ได้กับจำนวนบวกเท่านั้น ค่าทศนิยมจะถูกปัดเศษให้เป็นจำนวนเต็มที่ใกล้ที่สุดโดยอัตโนมัติ และตัวเลขติดลบจะส่งผลให้เกิดข้อผิดพลาด

รับการผสมตัวเลขทั้งหมดเท่ากับผลรวมที่กำหนดพร้อมฟีเจอร์อันทรงพลัง

ด้วยข้อจำกัดของฟังก์ชันดังกล่าว เราขอแนะนำโซลูชันที่รวดเร็วและครอบคลุม: Kutools for Excel's Make up a Number คุณลักษณะซึ่งเข้ากันได้กับ Excel เวอร์ชันใดก็ได้ ทางเลือกนี้สามารถจัดการกับจำนวนบวก ทศนิยม และจำนวนลบได้อย่างมีประสิทธิภาพ ด้วยฟีเจอร์นี้ คุณจะได้รับชุดค่าผสมทั้งหมดที่เท่ากับผลรวมที่กำหนดได้อย่างรวดเร็ว

เคล็ดลับ: ที่จะใช้สิ่งนี้ สร้างตัวเลข ประการแรกคุณควรดาวน์โหลด Kutools สำหรับ Excelแล้วใช้คุณสมบัตินี้อย่างรวดเร็วและง่ายดาย
  1. คลิก Kutools > คอนเทนต์ > สร้างตัวเลขดูภาพหน้าจอ:
    รับการรวมกันของตัวเลขทั้งหมดด้วย kutools
  2. จากนั้นใน สร้างตัวเลข โปรดคลิก เลือกปุ่ม เพื่อเลือกรายการหมายเลขที่คุณต้องการใช้จากปุ่ม แหล่งข้อมูลจากนั้นป้อนจำนวนทั้งหมดลงในไฟล์ รวม กล่องข้อความ. สุดท้ายคลิก OK ปุ่มดูภาพหน้าจอ:
    ไปที่กล่องโต้ตอบสร้างตัวเลขเพื่อตั้งค่าตัวเลือก
  3. จากนั้นกล่องพร้อมท์จะปรากฏขึ้นเพื่อเตือนให้คุณเลือกเซลล์เพื่อค้นหาผลลัพธ์ จากนั้นคลิก OKดูภาพหน้าจอ:
    เลือกเซลล์ที่จะใส่ผลลัพธ์
  4. และตอนนี้ชุดค่าผสมทั้งหมดที่เท่ากับจำนวนที่ระบุนั้นได้แสดงไว้ตามภาพหน้าจอด้านล่างนี้:
    รับชุดตัวเลขทั้งหมดพร้อมผลลัพธ์ kutools
หมายเหตุ: หากต้องการใช้คุณสมบัตินี้ โปรด ดาวน์โหลดและติดตั้ง Kutools สำหรับ Excel ก่อน

รับชุดตัวเลขทั้งหมดที่มีผลรวมในช่วงด้วยโค้ด VBA

บางครั้ง คุณอาจพบว่าตัวเองอยู่ในสถานการณ์ที่คุณต้องระบุชุดตัวเลขที่เป็นไปได้ทั้งหมดที่รวมกันได้เป็นผลรวมภายในช่วงที่ระบุ ตัวอย่างเช่น คุณอาจต้องการค้นหาทุกกลุ่มที่เป็นไปได้ของตัวเลขโดยที่ผลรวมอยู่ระหว่าง 470 ถึง 480

การค้นพบชุดตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงที่ระบุแสดงถึงความท้าทายที่น่าสนใจและใช้งานได้จริงใน Excel ส่วนนี้จะแนะนำโค้ด VBA สำหรับการแก้ปัญหานี้
การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงที่ระบุ

ขั้นตอนที่ 1: เปิดตัวแก้ไขโมดูล VBA และคัดลอกโค้ด

  1. ค้างไว้ ALT + F11 ใน Excel และจะเปิดไฟล์ Microsoft Visual Basic สำหรับแอปพลิเคชัน หน้าต่าง
  2. คลิก สิ่งที่ใส่เข้าไป > โมดูลและวางรหัสต่อไปนี้ในหน้าต่างโมดูล
    รหัส VBA: รับชุดตัวเลขทั้งหมดที่รวมเป็นช่วงที่ระบุ
    Sub Getall_combinations()
    'Updateby Extendoffice
        Dim xNumbers As Variant
        Dim Output As Collection
        Dim rngSelection As Range
        Dim OutputCell As Range
        Dim LowLimit As Long, HiLimit As Long
        Dim i As Long, j As Long
        Dim TotalCombinations As Long
        Dim CombTotal As Double
        Set Output = New Collection
        On Error Resume Next
        Set rngSelection = Application.InputBox("Select the range of numbers:", "Kutools for Excel", Type:=8)
        If rngSelection Is Nothing Then
            MsgBox "No range selected. Exiting macro.", vbInformation, "Kutools for Excel"
            Exit Sub
        End If
        On Error GoTo 0
        xNumbers = rngSelection.Value
        LowLimit = Application.InputBox("Select or enter the low limit number:", "Kutools for Excel", Type:=1)
        HiLimit = Application.InputBox("Select or enter the high limit number:", "Kutools for Excel", Type:=1)
        On Error Resume Next
        Set OutputCell = Application.InputBox("Select the first cell for output:", "Kutools for Excel", Type:=8)
        If OutputCell Is Nothing Then
            MsgBox "No output cell selected. Exiting macro.", vbInformation, "Kutools for Excel"
            Exit Sub
        End If
        On Error GoTo 0
        TotalCombinations = 2 ^ (UBound(xNumbers, 1) * UBound(xNumbers, 2))
        For i = 1 To TotalCombinations - 1
            Dim tempArr() As Double
            ReDim tempArr(1 To UBound(xNumbers, 1) * UBound(xNumbers, 2))
            CombTotal = 0
            Dim k As Long: k = 0
            
            For j = 1 To UBound(xNumbers, 1)
                If i And (2 ^ (j - 1)) Then
                    k = k + 1
                    tempArr(k) = xNumbers(j, 1)
                    CombTotal = CombTotal + xNumbers(j, 1)
                End If
            Next j
            If CombTotal >= LowLimit And CombTotal <= HiLimit Then
                ReDim Preserve tempArr(1 To k)
                Output.Add tempArr
            End If
        Next i
        Dim rowOffset As Long
        rowOffset = 0
        Dim item As Variant
        For Each item In Output
            For j = 1 To UBound(item)
                OutputCell.Offset(rowOffset, j - 1).Value = item(j)
            Next j
            rowOffset = rowOffset + 1
        Next item
    End Sub
    
    
    

ขั้นตอนที่ 2: ดำเนินการโค้ด

  1. หลังจากวางรหัสแล้วให้กด F5 เพื่อเรียกใช้โค้ดนี้ ในกล่องโต้ตอบแรกที่โผล่ออกมา ให้เลือกช่วงตัวเลขที่คุณต้องการใช้ แล้วคลิก OK. ดูภาพหน้าจอ:
    การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงโค้ด vba ที่ระบุเพื่อเลือกช่วงข้อมูล
  2. ในกล่องพร้อมท์ที่สอง ให้เลือกหรือพิมพ์ตัวเลขขีดจำกัดต่ำ แล้วคลิก OK. ดูภาพหน้าจอ:
    การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงโค้ด vba ที่ระบุเพื่อเลือกหมายเลขขีดจำกัดต่ำ
  3. ในกล่องพร้อมท์ที่สาม ให้เลือกหรือพิมพ์หมายเลขขีดจำกัดสูง แล้วคลิก OK. ดูภาพหน้าจอ:
    การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงโค้ด vba ที่ระบุเพื่อเลือกหมายเลขที่มีขีดจำกัดสูง
  4. ในกล่องพร้อมท์สุดท้าย ให้เลือกเซลล์เอาต์พุต ซึ่งเป็นตำแหน่งที่จะเริ่มแสดงผลลัพธ์ จากนั้นคลิก OK. ดูภาพหน้าจอ:
    การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงโค้ด vba ที่ระบุเพื่อเลือกเซลล์ที่จะใส่ผลลัพธ์

ผล

ตอนนี้ ชุดค่าผสมที่มีคุณสมบัติเหมาะสมแต่ละรายการจะแสดงรายการเป็นแถวต่อเนื่องกันในแผ่นงาน โดยเริ่มจากเซลล์ผลลัพธ์ที่คุณเลือก
การผสมตัวเลขที่เป็นไปได้ทั้งหมดซึ่งรวมเป็นค่าภายในช่วงโค้ด vba ที่ระบุเพื่อให้ได้ผลลัพธ์

Excel มีวิธีการค้นหากลุ่มตัวเลขที่รวมกันเป็นจำนวนรวมได้หลายวิธี แต่ละวิธีทำงานแตกต่างกัน ดังนั้นคุณจึงสามารถเลือกได้หลายวิธีโดยพิจารณาจากความคุ้นเคยกับ Excel และสิ่งที่คุณต้องการสำหรับโปรเจ็กต์ของคุณ หากคุณสนใจที่จะสำรวจเคล็ดลับและคำแนะนำเพิ่มเติมเกี่ยวกับ Excel เว็บไซต์ของเรามีบทช่วยสอนหลายพันรายการ. ขอขอบคุณที่อ่าน และเราหวังว่าจะให้ข้อมูลที่เป็นประโยชน์เพิ่มเติมแก่คุณในอนาคต!


บทความที่เกี่ยวข้อง:

  • แสดงรายการหรือสร้างชุดค่าผสมที่เป็นไปได้ทั้งหมด
  • สมมติว่าฉันมีข้อมูลสองคอลัมน์ต่อไปนี้และตอนนี้ฉันต้องการสร้างรายการชุดค่าผสมที่เป็นไปได้ทั้งหมดตามรายการค่าสองรายการตามภาพหน้าจอด้านซ้ายที่แสดง บางทีคุณสามารถแสดงรายการชุดค่าผสมทั้งหมดทีละรายการได้หากมีค่าน้อย แต่หากมีหลายคอลัมน์ที่มีค่าหลายค่าที่จำเป็นในการระบุชุดค่าผสมที่เป็นไปได้นี่คือกลเม็ดด่วนบางอย่างที่อาจช่วยคุณจัดการกับปัญหานี้ใน Excel .
  • สร้างรายการชุดค่าผสม 4 หลักที่เป็นไปได้ทั้งหมด
  • ในบางกรณีเราอาจต้องสร้างรายการตัวเลข 4 หลักที่เป็นไปได้ทั้งหมดของตัวเลข 0 ถึง 9 ซึ่งหมายถึงการสร้างรายการ 0000, 0001, 0002 … 9999 เพื่อแก้ปัญหารายการใน Excel อย่างรวดเร็วฉันขอแนะนำเทคนิคบางอย่างสำหรับคุณ