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

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.

2Cliquez sur 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é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-2021 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Fonctionnalités complètes 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 (13)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, Je fais un petit projet en utilisant des règles de permutation et de combinaison. J'ai besoin de votre soutien à ce sujet s'il vous plaît. Scénario : J'ai des données alphanumériques à 13 chiffres (00SHGO8BJIDG0) Je veux un codage pour échanger S à 5, I à 1 et O à 0 et vice versa. Le projet est que si j'ai les données correctes à 13 chiffres, je recevrai un code d'accès à 3 chiffres. (par exemple) 00SHG08BJ1DG0 - 500 est le code d'accès, mais à cause d'une erreur de frappe au lieu de 1, c'était I et 0, c'était O, il y a une mauvaise information. Pouvez-vous m'aider s'il vous plaît.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

J'essaie d'obtenir une permutation pour 82 caractères, le code fourni fonctionne, mais, puisque les colonnes ne sont que 1048576, je veux déplacer la prochaine sortie en B, C, D ..... Est-ce que l'un de vous peut m'aider sur ce ce qui concerne
Ce commentaire a été minimisé par le modérateur sur le site
@Supraja...

dans le premier sous, effacez toutes les cellules... pas seulement la première ligne
--Cells.Clear

Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long)
Dim i As Integer, xLen As Integer
xLen = Len(Str2)
Si xLen < 2 Alors
'passe à la colonne suivante quand tu arrives à 100
Cellules(((xRow - 1) Mod 100) + 1, 1 + Int(xRow / 100)) = Str1 & Str2
xLigne = xLigne + 1
autre
Pour i = 1 Vers xLen
Appelez GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
Suivant
Si fin
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Combien de séquences de 3 choses peuvent être formées à partir de 7 choses différentes, le remplacement et l'ordre sont-ils importants ?
Ce commentaire a été minimisé par le modérateur sur le site
3 à la puissance 7 : 2187
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour à tous. J'ai besoin d'aide sur ça. J'ai deux alphabets à permuter en 20 lignes. Mais je ne comprends pas bien. Quiconque pourrait m'aider devrait envoyer la permutation à mon e-mail. pauladah69@gmail.com.


1.abba
2.aabb
3.aabb
4.aabb
5.aabb
6.aabb
7.aabb
8.aabb
9.aabb
10.aabb
11.aabb
12.aabb
13.aabb
14.aabb
15.aabb
16.aabb
17.aabb
18.aabb
19.aabb
20.aabb
Ce commentaire a été minimisé par le modérateur sur le site
ce code ne fonctionnera pas car il y a deux nombreuses permutations


devrait être:

ce code ne fonctionnera pas car il y a trop de permutations


HTH
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, MC,
Merci pour votre rappel chaleureux, c'est mon erreur. Je l'ai corrigé.
Merci beaucoup!
Ce commentaire a été minimisé par le modérateur sur le site
peki bunu listeleyecek bir programme uygulama yok mu?basit sıradan bir hesaplamadan daha fazlasına ihtiyacı olan ne yapacak?
Ce commentaire a été minimisé par le modérateur sur le site
qui peut m'envoyer une liste de 10 items différents permutés par 2 résultats. ce code biche

Je ne travaille pas sur ça
Ce commentaire a été minimisé par le modérateur sur le site
Salut, si la chaîne d'entrée contient des caractères en double, le sous produit des permutations en double.
Cela ne se produit pas si vous apportez la modification suivante à la boucle :

' ==========================
Pour i = 1 Vers xLen
Si Instr( Left(Str2, i - 1), Mid(Str2, i, 1) ) = 0 alors
Appelez GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Right(Str2, xLen - i), xRow)
fin si
Suivant
' ==========================

Créer des variables locales temporaires pour Mid(Str2, i, 1) et pour Left(Str2, i - 1), et éviter le test pour i=1 le rend plus rapide :


' ==========================
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)
Si xLen < 2 Alors
Plage("A" & xRow) = Str1 & Str2
xLigne = xLigne + 1
autre
Appelez GetPermutation(Str1 + Mid(Str2, 1, 1), Right(Str2, xLen - 1), xRow)
Pour i = 2 Vers xLen
c = Moyen(Str2, je, 1)
Str2gauche = Gauche(Str2, je - 1)
Si Instr( Str2left, c ) = 0 alors
Appelez GetPermutation(Str1 + c, Str2left + Right(Str2, xLen - i), xRow)
Si fin
Suivant
Si fin
End Sub
' ==========================

Cordialement,
DVDdm
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour!

Como faço para gerar pelo menos 10 permutações ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Matéus,
Pour résoudre votre problème, veuillez appliquer le code ci-dessous : (Remarque : s'il y a plus de 8 caractères, le code s'exécutera lentement.)
Sub GetString()
'Updateby Extendoffice
    Dim xStr As String
    Dim FRow As Long
    Dim FC As Integer
    Dim xScreen As Boolean
    Dim xNumber As Long
    xNumber = 10 ' This is the max length of the characters you can change it to 11, 12, 13...as you need
    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) > xNumber Then
        MsgBox "Too many permutations!", vbInformation, "Kutools for Excel"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        FRow = 1
        FC = 1
        Call GetPermutation("", xStr, FRow, FC)
    End If
    Application.ScreenUpdating = xScreen
End Sub
Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long, ByRef xc As Integer)
    Dim i As Integer, xLen As Integer
    xLen = Len(Str2)
    If xLen < 2 Then
        If xRow > 1000000 Then
            xc = xc + 1
            xRow = 1
        End If
       ActiveSheet.Cells(xRow, xc) = 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, xc)
        Next
    End If
End Sub


S'il vous plaît essayez, j'espère que cela peut vous aider!
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

Nous suivre

Copyright © 2009 - www.extendoffice.com. | Tous les droits sont réservés. Alimenté par ExtendOffice. | | Plan du site
Microsoft et le logo Office sont des marques commerciales ou des marques déposées de Microsoft Corporation aux États-Unis et / ou dans d'autres pays.
Protégé par Sectigo SSL