Note: The other languages of the website are Google-translated. Back to English
Se connecter  \/ 
x
or
x
INSCRIPTION  \/ 
x

or

Comment générer ou lister toutes les permutations possibles dans Excel?

Par exemple, j'ai trois caractères XYZ, maintenant, je veux lister toutes les permutations possibles basées sur ces trois caractères pour obtenir six résultats différents comme ceci: XYZ, XZY, YXZ, YZX, ZXY et ZYX. Dans Excel, comment pouvez-vous générer ou répertorier rapidement toutes les permutations en fonction d'un nombre différent de caractères?

Générer ou lister toutes les permutations possibles basées sur des caractères avec le code VBA


flèche bleue bulle droite Générer ou lister toutes les permutations possibles basées sur des caractères avec le code VBA

Le code VBA suivant peut vous aider à répertorier toutes les permutations en fonction de votre nombre spécifique de lettres, procédez comme suit:

1. Maintenez le ALT + F11 clés pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2. Cliquez insérer > Moduleet collez le code suivant dans le Module Fenêtre.

Code VBA: liste toutes les permutations possibles dans Excel

Sub GetString()
'Updateby Extendoffice
    Dim xStr As String
    Dim FRow As Long
    Dim xScreen As Boolean
    xScreen = Application.ScreenUpdating
    Application.ScreenUpdating = False
    xStr = Application.InputBox("Enter text to permute:", "Kutools for Excel", , , , , , 2)
    If Len(xStr) < 2 Then Exit Sub
    If Len(xStr) >= 8 Then
        MsgBox "Too many permutations!", vbInformation, "Kutools for Excel"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        FRow = 1
        Call GetPermutation("", xStr, FRow)
    End If
    Application.ScreenUpdating = xScreen
End Sub
Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long)
    Dim i As Integer, xLen As Integer
    xLen = Len(Str2)
    If xLen < 2 Then
        Range("A" & xRow) = Str1 & Str2
        xRow = xRow + 1
    Else
        For i = 1 To xLen
            Call GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
        Next
    End If
End Sub

3. Puis appuyez F5 clé pour exécuter ce code, et une boîte de dialogue apparaît pour vous rappeler d'entrer les caractères que vous souhaitez lister toutes les permutations, voir capture d'écran:

permutations de liste de documents 1

4. Après avoir entré les caractères, puis cliquez sur OK bouton, toutes les permutations possibles sont affichées dans la colonne A de la feuille de calcul active. Voir la capture d'écran:

permutations de liste de documents 2

Notes: Si la longueur de caractère saisie est égale ou supérieure à 8 caractères, ce code ne fonctionnera pas car il y a trop de permutations.

permutations de liste de documents 3


Répertoriez ou générez toutes les combinaisons possibles à partir de plusieurs colonnes

Si vous avez besoin de générer toutes les combinaisons possibles basées sur des données de plusieurs colonnes, il n'y a peut-être pas un bon moyen de gérer la tâche. Mais, Kutools pour Excel's Lister toutes les combinaisons L'utilitaire peut vous aider à répertorier toutes les combinaisons possibles rapidement et facilement. Cliquez pour télécharger Kutools for Excel!

doc liste toutes les combinaisons

Kutools pour Excel: avec plus de 300 compléments Excel pratiques, essai gratuit sans limitation dans 30 jours. Téléchargez et essayez gratuitement maintenant!


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ée...
  • 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 gammes...
  • 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 cellules...
  • 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 PDF...
  • 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
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    DVdm · 1 years ago
    Hi there, if the input string contains duplicate chars, then the sub produces duplicate permutations.
    This does not happen if you make the following modification the the loop:

    ' ==========================
    For i = 1 To xLen
    If Instr( Left(Str2, i - 1), Mid(Str2, i, 1) ) = 0 then
    Call GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
    End if
    Next
    ' ==========================

    Creating temporary local variables for Mid(Str2, i, 1) and for Left(Str2, i - 1), and avoiding the test for i=1 makes it go faster:


    ' ==========================
    Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long)
    Dim i As Integer, xLen As Integer, Str2left as String, c as String
    xLen = Len(Str2)
    If xLen < 2 Then
    Range("A" & xRow) = Str1 & Str2
    xRow = xRow + 1
    Else
    Call GetPermutation(Str1 + Mid(Str2, 1, 1), Right(Str2, xLen - 1), xRow)
    For i = 2 To xLen
    c = Mid(Str2, i, 1)
    Str2left = Left(Str2, i - 1)
    If Instr( Str2left, c ) = 0 then
    Call GetPermutation(Str1 + c, Str2left + Right(Str2, xLen - i), xRow)
    End If
    Next
    End If
    End Sub
    ' ==========================

    Cheers,
    DVdm
  • To post as a guest, your comment is unpublished.
    lyto · 2 years ago
    who can send me a list of 10 diferent items permutatted by 2 outcomes. this code doe

    snt work on this
  • To post as a guest, your comment is unpublished.
    ilhan · 2 years ago
    peki bunu listeleyecek bir program uygulama yok mu?basit sıradan bir hesaplamadan daha fazlasına ihtiyacı olan ne yapacak?
  • To post as a guest, your comment is unpublished.
    MC · 2 years ago
    this code will not work because there are two many permutations


    should be:

    this code will not work because there are too many permutations


    HTH
    • To post as a guest, your comment is unpublished.
      skyyang · 2 years ago
      Hello, MC,
      Thank you for your warm reminder, it is my mistake. I have corrected it.
      Thanks a lot!
  • To post as a guest, your comment is unpublished.
    Paul · 3 years ago
    Hello everyone. I need help on this. I have two alphabets to be permutated in 20 rows. But am not getting it right. Anyone who could help me out should send the permutation to my email. pauladah69@gmail.com.


    1.a b b a
    2.a a b b
    3.a a b b
    4.a a b b
    5.a a b b
    6.a a b b
    7.a a b b
    8.a a b b
    9.a a b b
    10.a a b b
    11.a a b b
    12.a a b b
    13.a a b b
    14.a a b b
    15.a a b b
    16.a a b b
    17.a a b b
    18.a a b b
    19.a a b b
    20.a a b b
  • To post as a guest, your comment is unpublished.
    Wule · 3 years ago
    How many sequences of 3things can be formed from 7 different things replacement and order is important?
    • To post as a guest, your comment is unpublished.
      Guest · 3 years ago
      3 to the power of 7: 2187
  • To post as a guest, your comment is unpublished.
    declankeogh01@gmail.com · 4 years ago
    @Supraja...

    in the first sub clear all cells... not just the first row
    --Cells.Clear

    Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long)
    Dim i As Integer, xLen As Integer
    xLen = Len(Str2)
    If xLen < 2 Then
    'move to the next column when you get to 100
    Cells(((xRow - 1) Mod 100) + 1, 1 + Int(xRow / 100)) = Str1 & Str2
    xRow = xRow + 1
    Else
    For i = 1 To xLen
    Call GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
    Next
    End If
    End Sub
  • To post as a guest, your comment is unpublished.
    Supraja · 4 years ago
    Hello,

    Im trying to get a permutation for 82 characters, the code provided works, but, since the columns are only 1048576, I want to move the next output in B,C,D..... Can any of you help me on this regard
  • To post as a guest, your comment is unpublished.
    Terence · 4 years ago
    Hello,

    Im doing a small project using permutation and combination rules. I need your support on this please.
    Scenario: I have 13 digit alpha numeric data (00SHGO8BJIDG0) I want a coding to interchange S to 5, I to 1 and O to 0 and vise versa.

    The project is that if I have the correct 13 digit data I will receive a 3 digit pass code.

    (eg) 00SHG08BJ1DG0 - 500 is the pass code but because of wrong typo that is instead of 1 it was I and 0 it was O there is a wrong info.
    can you please help me.