google-sheets

How to generate all possible combinations from a list without having duplicates?


I am trying to create an automatically generated list with every possible combination.

Example of generated list:
enter image description here

This is the current formula I am using:

=INDEX(SPLIT(TOCOL(TOCOL(TOCOL(TOCOL(TOCOL(
TOCOL(H2:H10, 1) &"×"&
TOROW(H2:H10, 1))&"×"&
TOROW(H2:H10, 1))&"×"&
TOROW(H2:H10, 1))&"×"&
TOROW(I2:I4, 1))&"×"&
TOROW(J2:J3, 1)),"×"))

However, this creates duplicate groupings of the fruits. These are all the same but presented in a different order:

I would like just one instance of 3 apples and a banana. How do I go about to fix this?


Solution

  • Try this Google Sheets formula. It is based on the OP.

    =INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOROW(SORT(UNIQUE(BYROW(BYROW(INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×")),LAMBDA(ROW,transpose(sort(Transpose(ROW),1,true)))),LAMBDA(ROW,join("×",ROW)))),1,true), 1))&"×"&
    TOROW(I2:I4, 1))&"×"&
    TOROW(J2:J3, 1)),"×"))
    

    This formula creates a data list of 2970 rows, compared to the 39366 rows (including duplicates) generated by the original formula in the question.

    Logic

    The formula consists of several stages:

    1. Modify the original formula to return only the combinations of Column H (Fruit). This returns 6561 rows of data.
    INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×"))
    
    1. Sort each "fruit" row alphabetically.
    BYROW(INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×")),LAMBDA(ROW,transpose(sort(Transpose(row),1,true))))
    

    Converts this extract:

    Fruit1 Fruit2 Fruit3 Fruit4
    Apple Apple Apple Banana
    Apple Apple Banana Apple

    to this:

    Fruit 1 Fruit 2 Fruit 3 Fruit 4
    Apple Apple Apple Banana
    Apple Apple Apple Banana
    1. Join the columns in preparation for getting unique values.
    BYROW(BYROW(INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×")),LAMBDA(ROW,transpose(sort(Transpose(row),1,true)))),LAMBDA(ROW,join("×",ROW)))
    

    Sample outcome

    Joined data
    Apple×Apple×Apple×Banana
    Apple×Apple×Apple×Banana
    1. Get the unique values (sorted)

    The number of unique combinations = 495 (compared to 6561-including duplicates).

    sort(unique(BYROW(BYROW(INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×")),LAMBDA(ROW,transpose(sort(Transpose(row),1,true)))),LAMBDA(ROW,join("×",ROW)))),1,true)
    
    
    Sorted unique values
    Apple×Apple×Apple×Apple
    Apple×Apple×Apple×Banana
    Apple×Apple×Apple×Blueberry
    Apple×Apple×Apple×Grape
    Apple×Apple×Apple×Lemon
    Apple×Apple×Apple×Melon
    Apple×Apple×Apple×Necatarine
    Apple×Apple×Apple×Orange
    Apple×Apple×Apple×Pear
    Apple×Apple×Banana×Banana
    Apple×Apple×Banana×Blueberry
    Apple×Apple×Banana×Grape
    Apple×Apple×Banana×Lemon
    Apple×Apple×Banana×Melon
    Apple×Apple×Banana×Necatarine
    Apple×Apple×Banana×Orange
    Apple×Apple×Banana×Pear
    1. Split the sorted Unique values
    index(split(sort(unique(BYROW(BYROW(INDEX(SPLIT(TOCOL(TOCOL(TOCOL(
    TOCOL(H2:H10, 1) &"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1))&"×"&
    TOROW(H2:H10, 1)),"×")),LAMBDA(ROW,transpose(sort(Transpose(row),1,true)))),LAMBDA(ROW,join("×",ROW)))),1,true),"×"))
    
    Fruit 1 Fruit 2 Fruit 3 Fruit 4
    Apple Apple Apple Apple
    Apple Apple Apple Banana
    Apple Apple Apple Blueberry
    Apple Apple Apple Grape
    Apple Apple Apple Lemon
    Apple Apple Apple Melon
    Apple Apple Apple Necatarine
    Apple Apple Apple Orange
    Apple Apple Apple Pear
    Apple Apple Banana Banana
    Apple Apple Banana Blueberry
    Apple Apple Banana Grape
    Apple Apple Banana Lemon
    Apple Apple Banana Melon
    Apple Apple Banana Necatarine
    Apple Apple Banana Orange
    Apple Apple Banana Pear
    1. Add M1 and N1 values to the unique values

    Sample extract

    Fruit 1 Fruit 2 Fruit 3 Fruit 4 M1 N1
    Apple Apple Apple Apple A X
    Apple Apple Apple Apple A Y
    Apple Apple Apple Apple B X
    Apple Apple Apple Apple B Y
    Apple Apple Apple Apple C X
    Apple Apple Apple Apple C Y
    Apple Apple Apple Banana A X
    Apple Apple Apple Banana A Y
    Apple Apple Apple Banana B X
    Apple Apple Apple Banana B Y
    Apple Apple Apple Banana C X
    Apple Apple Apple Banana C Y
    Apple Apple Apple Blueberry A X
    Apple Apple Apple Blueberry A Y
    Apple Apple Apple Blueberry B X
    Apple Apple Apple Blueberry B Y
    Apple Apple Apple Blueberry C X
    Apple Apple Apple Blueberry C Y