You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Excel生成所有可能组合?含多列2-3值取值场景

Excel: Generating All Possible Combinations

1. How to Find All Possible Combinations in Excel?

There are several reliable, user-friendly ways to generate all possible combinations (Cartesian product) of values from multiple columns in Excel. Here are the most practical methods:

Power Query is built into modern Excel versions and simplifies this task, even with multiple columns:

  • Step 1: Organize your data into a table (select your range > press Ctrl+T > check "My table has headers"). Let’s say your columns are named Column1, Column2, Column3 with their respective values.
  • Step 2: Go to the Data tab > click From Table/Range to open the Power Query Editor.
  • Step 3: For each column after the first, perform a cross join:
    • Select the first column (e.g., Column1), then go to Add Column > Custom Column.
    • In the formula bar, enter: =Table.FromList(Column2, Splitter.SplitByNothing(), {"Column2"}) (replace Column2 with your actual column name).
    • Click OK, then expand the new custom column by clicking the expand icon (⊕) and uncheck "Use original column name as prefix".
    • Repeat this process for each additional column: select the combined table, add a custom column referencing the next column’s values, then expand again.
  • Step 4: Once all columns are combined, go to Home > Close & Load to export the full combinations back to an Excel sheet.

Method 2: Using Formulas (Dynamic, No External Tools)

If you prefer formulas, use SEQUENCE, INDEX, and basic arithmetic to calculate combinations dynamically:

  • Step 1: Assume your values are in ranges: A2:A3 (2 values), B2:B4 (3 values), C2:C3 (2 values).
  • Step 2: Calculate total combinations: =COUNTA(A2:A3)*COUNTA(B2:B4)*COUNTA(C2:C3) (this gives 12 for our example).
  • Step 3: Generate row numbers for each column using modulus and division:
    • Column A combinations: =INDEX(A$2:A$3, INT((ROW()-ROW($F$2))/(COUNTA(B$2:B$4)*COUNTA(C$2:C$3)))+1) (enter in F2, drag down).
    • Column B combinations: =INDEX(B$2:B$4, MOD(INT((ROW()-ROW($F$2))/COUNTA(C$2:C$3)), COUNTA(B$2:B$4))+1) (enter in G2, drag down).
    • Column C combinations: =INDEX(C$2:C$3, MOD((ROW()-ROW($F$2)), COUNTA(C$2:C$3))+1) (enter in H2, drag down).
  • Note: Adjust ranges and cell references to match your data. This logic extends to any number of columns.

Method 3: Using VBA (Customizable for Complex Scenarios)

For more control (like dynamic ranges or filtering), a simple VBA macro works great:

  • Step 1: Press Alt+F11 to open the VBA Editor.
  • Step 2: Insert a new module (Insert > Module), then paste this code:
Sub GenerateAllCombinations()
    Dim ranges As Variant
    Dim outputSheet As Worksheet
    Dim totalCombos As Long
    Dim currentCombo As Variant
    
    ' Define your data ranges here (each range is a column of values)
    ranges = Array(Range("A2:A3"), Range("B2:B4"), Range("C2:C3"))
    
    ' Calculate total number of combinations
    totalCombos = 1
    For i = LBound(ranges) To UBound(ranges)
        totalCombos = totalCombos * ranges(i).Rows.Count
    Next i
    
    ' Create output sheet
    Set outputSheet = ThisWorkbook.Sheets.Add
    outputSheet.Name = "Combinations"
    
    ' Generate and paste combinations
    currentCombo = GetCartesianProduct(ranges)
    outputSheet.Range("A1").Resize(UBound(currentCombo, 1), UBound(currentCombo, 2)).Value = currentCombo
End Sub

Function GetCartesianProduct(ranges As Variant) As Variant
    Dim result As Variant, temp As Variant
    Dim i As Integer, j As Long, k As Long, l As Long, m As Long
    
    ' Initialize with first range
    ReDim result(1 To ranges(0).Rows.Count, 1 To 1)
    For j = 1 To ranges(0).Rows.Count
        result(j, 1) = ranges(0).Cells(j, 1).Value
    Next j
    
    ' Combine with remaining ranges
    For i = 1 To UBound(ranges)
        temp = result
        ReDim result(1 To UBound(temp, 1) * ranges(i).Rows.Count, 1 To UBound(temp, 2) + 1)
        
        k = 1
        For j = 1 To UBound(temp, 1)
            For l = 1 To ranges(i).Rows.Count
                ' Copy existing values
                For m = 1 To UBound(temp, 2)
                    result(k, m) = temp(j, m)
                Next m
                ' Add new value
                result(k, UBound(temp, 2) + 1) = ranges(i).Cells(l, 1).Value
                k = k + 1
            Next l
        Next j
    Next i
    
    GetCartesianProduct = result
End Function
  • Step 3: Adjust the ranges array to match your data ranges.
  • Step 4: Run the macro (press F5 in the VBA Editor, or assign it to an Excel button). It will create a new sheet with all combinations.

2. Can I Generate All Combinations Where Each Column Has 2 or 3 Values?

Absolutely! All the methods above work seamlessly regardless of how many values are in each column (2, 3, or more). For example:

  • If Column A has 2 values, Column B has 3 values, and Column C has 2 values, you’ll get 2×3×2=12 total combinations.
  • Power Query automatically expands all possible pairs/triplets during cross joins.
  • The formula method uses COUNTA to dynamically adjust to the number of values in each range.
  • The VBA macro calculates total combinations by multiplying the row count of each range, so it handles variable lengths without modification.

Just ensure each column’s values are in a contiguous range, then follow the steps for your chosen method.


内容的提问来源于stack exchange,提问作者Udi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:10:40