Note: The other languages of the website are Google-translated. Back to English
English English

Comment répertorier toutes les combinaisons possibles à partir d'une seule colonne dans Excel ?

Si vous souhaitez renvoyer toutes les combinaisons possibles à partir de données à une seule colonne pour obtenir le résultat illustré ci-dessous, avez-vous des moyens rapides de gérer cette tâche dans Excel ?

Répertorier toutes les combinaisons possibles à partir d'une seule colonne avec des formules

Répertorier toutes les combinaisons possibles à partir d'une seule colonne avec le code VBA


Répertorier toutes les combinaisons possibles à partir d'une seule colonne avec des formules

Les formules matricielles suivantes peuvent vous aider à réaliser ce travail, veuillez procéder étape par étape :

1. Tout d'abord, vous devez créer deux cellules de formule d'assistance. Dans la cellule C1, veuillez entrer la formule ci-dessous et appuyez sur Ctrl + Maj + Entrée touches pour obtenir le résultat :

=MAX(LEN(A2:A6))
Notes: Dans cette formule, A2: A6 est la liste des cellules dont vous souhaitez répertorier leurs combinaisons.

2. Dans la cellule C2, entrez la formule suivante et appuyez sur Ctrl + Maj + Entrée touches ensemble pour obtenir le deuxième résultat, voir capture d'écran :

=CONCAT(A2:A6&REPT(" ",C2-LEN(A2:A6)))
Notes: Dans cette formule, A2: A6 est la liste des cellules dont vous voulez lister leurs combinaisons, C2 est la cellule contient la formule que vous avez créée à l'étape 1.

3. Ensuite, copiez et collez la formule suivante dans la cellule D2 et appuyez sur Ctrl + Maj + Entrée clés ensemble pour obtenir le premier résultat, voir capture d'écran:

=IF(ROW()>2^(COUNTA(A$2:A$6)),"",TEXTJOIN(" + ",TRUE,IF(MID(TEXT(DEC2BIN(ROW()-1),REPT("0",COUNTA($A$2:$A$6))),ROW(INDIRECT("1:"&COUNTA($A$2:$A$6))),1)+0,TRIM(MID($C$3,(ROW(INDIRECT("1:"&COUNTA($A$2:$A$6)))-1)*$C$2+1,$C$2)),"")))
Notes: Dans cette formule, A2: A6 est la liste des cellules dont vous voulez lister leurs combinaisons, C2 si la cellule contient la formule que vous avez créée à l'étape 1, C3 est la cellule avec la formule que vous avez créée à l'étape 2, la + Le caractère est le séparateur pour séparer les combinaisons, vous pouvez les modifier selon vos besoins.

4. Ensuite, sélectionnez cette cellule de formule et faites glisser la poignée de remplissage vers le bas jusqu'à ce que des cellules vides apparaissent. Maintenant, vous pouvez voir toutes les combinaisons des données de colonne spécifiées sont affichées comme ci-dessous :

Notes: Cette formule est uniquement disponible dans Office 2019, 365 et versions ultérieures.

Répertorier toutes les combinaisons possibles à partir d'une seule colonne avec le code VBA

Les formules ci-dessus ne sont disponibles que pour les nouvelles versions d'Excel, si vous avez des versions antérieures d'Excel, le code VBA suivant peut vous rendre service.

1. presse Alt + F11 touches simultanément pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2. Puis clique insérer > Module, copiez et collez le code VBA ci-dessous dans la fenêtre.

Code VBA : répertorier toutes les combinaisons possibles à partir d'une seule colonne

Sub ConnectArr()
'Updateby ExtendOffice
Dim xDValue As Variant
Dim xOutRg As Range
Dim xDictionary As Object
Dim xF As Long
Dim xChar As String
xDValue = Range("A2:A6").Value 'the data range
Set xOutRg = Range("C1") 'output range
xChar = "," 'separator
For xF = 1 To UBound(xDValue)
    Set xDictionary = CreateObject("Scripting.Dictionary")
    xDictionary(0) = "Sets of " & xF
    Call ConnectValue(xDValue, xDictionary, 0, xF, 0, "", xChar)
    xOutRg.Offset(0, xF - 1).Resize(xDictionary.Count).Value = WorksheetFunction.Transpose(xDictionary.Items)
    Set xDictionary = Nothing
Next
End Sub
Sub ConnectValue(ByRef pDValue, ByRef pDictionary, ByRef pLevel, ByVal pMaxLevel, ByVal pIndex, ByVal pValue, ByVal pChar)
Dim xF As Long
If pLevel = pMaxLevel Then
    pDictionary(pDictionary.Count + 1) = pValue
    Exit Sub
End If
For xF = pIndex + 1 To UBound(pDValue)
    If pValue = "" Then
        Call ConnectValue(pDValue, pDictionary, pLevel + 1, pMaxLevel, xF, pDValue(xF, 1), pChar)
    Else
        Call ConnectValue(pDValue, pDictionary, pLevel + 1, pMaxLevel, xF, pValue & pChar & pDValue(xF, 1), pChar)
    End If
Next
End Sub
Notes: Dans le code ci-dessus:
  • A2: A6: est la liste des données que vous souhaitez utiliser ;
  • C1: est la cellule de sortie ;
  • ,: le délimiteur pour séparer les combinaisons.

3. Et ensuite, appuyez sur F5 touche pour exécuter ce code. Toutes les combinaisons de la colonne unique sont répertoriées comme illustré ci-dessous :


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (5)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
J'aime beaucoup la méthode, mais les valeurs atteignent leur plus bas niveau à la 511e ligne et vous obtenez #NUM ! si vous avez plus de 6 entrées dans la colonne A. Je me demande si quelqu'un pourrait envisager de m'aider à ajuster la formule afin que les valeurs résultantes soient calculées au-delà de la 511e ligne ? Merci beaucoup! =)
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Oui, comme vous l'avez dit, la formule cessera de fonctionner à la ligne 511. Donc, ici, vous pouvez appliquer le code VBA dans cet article.
Ou si vous souhaitez répertorier toutes les combinaisons possibles dans une seule colonne, veuillez appliquer le code ci-dessous :
Notes: Dans le code, A2 est la première cellule contient les données que vous souhaitez utiliser, vous devez modifier la référence de la cellule A2 et des tours A à la vôtre. Après avoir exécuté le code, toutes les combinaisons seront répertoriées dans la colonne suivante de la liste de données.
Sub allcombination()
Dim Ray As Variant, n As Long, nn As Long, Allnum As String, c As Long
Dim Res As Long, obit, oSt, ipc, Tot As Long, oPst As Long, sNum As String
Ray = Application.Transpose(Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)))
sNum = Join(Evaluate("TRANSPOSE(ROW(" & 1 & ":" & UBound(Ray) & "))"), ",")
For n = 1 To UBound(Ray)
    Tot = Tot + Application.Combin(UBound(Ray), n)
Next n
ReDim Oval(1 To Tot)
ReDim nRay(1 To Tot - UBound(Ray))
Do Until Allnum = sNum
   If c < UBound(Ray) Then
       For n = 1 To UBound(Ray)
             c = c + 1: Oval(c) = n
       Next n
   Else
       For n = 1 To UBound(Ray)
             Res = Res + 1
             obit = Oval(Res)
             oSt = Split(obit, ",")(UBound(Split(obit, ",")))
                For nn = oSt + 1 To UBound(Ray)
                    c = c + 1
                    Allnum = obit & "," & nn
                    Oval(c) = Allnum
                Next nn
         Next n
   End If
Loop
Dim s As Variant, nStr As String
    For oPst = UBound(Ray) + 1 To UBound(Oval)
        For Each s In Split(Oval(oPst), ",")
            nStr = nStr & IIf(nStr = "", Ray(s), "," & Ray(s))
        Next s
            nRay(oPst - UBound(Ray)) = nStr: nStr = ""
  Next oPst
Range("B1").Resize(UBound(nRay)).Value = Application.Transpose(nRay)
End Sub

S'il vous plaît essayez, j'espère que cela peut vous aider! 🙂
Ce commentaire a été minimisé par le modérateur sur le site
Cher skyyang:

C'est merveilleux. Merci, cela m'aide énormément. Je suis très reconnaissant.

Juste quelques observations que j'ai remarquées après avoir généré le code VB que vous avez fourni était que les singletons (faute d'un meilleur terme), comme juste "Ruby", seraient omis, et la commande résultante (colonne) ne correspondait plus à la commande d'origine généré à l'étape 4 graphique animé.

Avez-vous des suggestions rapides sur la façon dont je pourrais modifier votre code pour inclure également les "singletons" et pour faire correspondre le même ordre qu'à l'étape 4 ? Je vais essayer de contourner la solution de contournement, mais malheureusement, je suis assez nouveau dans les scripts VB.

Merci encore! J'apprécie vraiment cela.

Mon meilleur. =)
Ce commentaire a été minimisé par le modérateur sur le site
Cher skyyang:

Tout d'abord, merci beaucoup pour votre solution de code. Je suis reconnaissant! =)

J'ai écrit une réponse hier, mais le système ne semble pas l'avoir publiée pour des raisons inconnues. J'espère que celui-ci passera.

Votre code génère une sortie qui m'intéresse. J'avais juste quelques observations, puis une question :

1) Le code ne génère pas les entrées individuelles seules.
2) L'ordre d'origine vu dans le graphique animé à l'étape 4 est perdu.

À partir de votre code, existe-t-il un moyen d'inclure également les entrées uniques et de refléter le format de commande d'origine de l'étape 4. Je suis plutôt nouveau dans les scripts VB.

Encore une fois, merci beaucoup pour votre aide précieuse. J'apprécie vraiment cela.

Mon meilleur.
Ce commentaire a été minimisé par le modérateur sur le site
Cher skyyang:

Merci beaucoup pour votre aide et le code. C'est inestimable et je vous en suis reconnaissant.

Je suis relativement nouveau dans les scripts VB, donc pas très habile à coder le langage.

Juste un point ou deux :

- Votre code suggéré ne génère pas d'entrées uniques (par exemple Ruby, ou...)
- L'ordre d'origine mis en évidence dans le graphique animé à l'étape 4 a disparu.

Je vais parcourir votre code pour essayer de le calibrer afin que les points ci-dessus soient affichés, mais je me demandais si vous aviez des conseils ou des suggestions rapides qui pourraient y répondre.

Merci encore pour votre aimable aide. J'apprécie vraiment cela. =)

Mon meilleur.
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés