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

Cum se generează sau se enumeră toate permutările posibile în Excel?

De exemplu, am trei caractere XYZ, acum, vreau să listez toate permutările posibile pe baza acestor trei caractere pentru a obține șase rezultate diferite astfel: XYZ, XZY, YXZ, YZX, ZXY și ZYX. În Excel, cum ați putea genera sau lista rapid toate permutările pe baza unui număr diferit de caractere?

Generați sau enumerați toate permutările posibile pe baza caracterelor cu cod VBA


săgeată albastru dreapta balon Generați sau enumerați toate permutările posibile pe baza caracterelor cu cod VBA

Următorul cod VBA vă poate ajuta să listați toate permutările pe baza numărului dvs. specific de litere, vă rugăm să procedați după cum urmează:

1. Țineți apăsat butonul ALT + F11 tastele pentru a deschide Microsoft Visual Basic pentru aplicații fereastră.

2. Clic Insera > Moduleși lipiți următorul cod în Module Fereastră.

Cod VBA: enumerați toate permutările posibile în 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. Apoi apăsați F5 pentru a rula acest cod și apare o casetă de prompt pentru a vă reaminti să introduceți caracterele pe care doriți să le afișați toate permutările, a se vedea captura de ecran:

permutări listă doc. 1

4. După introducerea caracterelor, apoi faceți clic pe OK butonul, toate permutările posibile sunt afișate în coloana A a foii de lucru active. Vedeți captura de ecran:

permutări listă doc. 2

notițe: Dacă lungimea caracterului introdus este egală sau mai mare de 8 caractere, acest cod nu va funcționa deoarece există prea multe permutări.

permutări listă doc. 3


Enumerați sau generați toate combinațiile posibile din mai multe coloane

Dacă trebuie să generați toate combinațiile posibile pe baza datelor cu mai multe coloane, poate că nu există o modalitate bună de a face față sarcinii. Dar, Kutools pentru Excel's Enumerați toate combinațiile utilitarul vă poate ajuta să listați toate combinațiile posibile rapid și ușor. Faceți clic pentru a descărca Kutools pentru Excel!

doc enumeră toate combinațiile

Kutools pentru Excel: cu mai mult de 300 de programe de completare Excel la îndemână, încercați fără limitări în 30 de zile. Descărcați și proba gratuită acum!


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (13)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, fac un mic proiect folosind reguli de permutare și combinare. Am nevoie de sprijinul dumneavoastră în acest sens, vă rog. Scenariu: Am date alfanumerice de 13 cifre (00SHGO8BJIDG0) Vreau o codare pentru a schimba S la 5, I la 1 și O la 0 și invers. Proiectul este că, dacă am datele corecte de 13 cifre, voi primi un cod de acces din 3 cifre. (de ex.) 00SHG08BJ1DG0 - 500 este codul de acces, dar din cauza unei greșeli de tipar, care este în loc de 1, era I și 0 era O, există o informație greșită. poti, te rog, sa ma ajuti.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,

Încerc să obțin o permutare pentru 82 de caractere, codul furnizat funcționează, dar, deoarece coloanele sunt doar 1048576, vreau să mutăm următoarea ieșire în B,C,D..... Poate cineva dintre voi să mă ajute în acest sens priveste
Acest comentariu a fost redus la minimum de moderatorul de pe site
@Supraja...

în primul sub șterge toate celulele... nu doar primul rând
--Celele.Clear

Sub GetPermutation (Str1 ca șir, Str2 ca șir, ByRef xRow ca lung)
Dim i ca întreg, xLen ca întreg
xLen = Len(Str2)
Dacă xLen < 2 Atunci
'treceți la următoarea coloană când ajungeți la 100
Celule(((xRow - 1) Mod 100) + 1, 1 + Int(xRow / 100)) = Str1 & Str2
xRow = xRow + 1
Altfel
Pentru i = 1 To xLen
Apelați GetPermutation (Str1 + Mid (Str2, i, 1), Left (Str2, i - 1) + Right (Str2, xLen - i), xRow)
Pagina Următoare →
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Câte secvențe de 3 lucruri pot fi formate din 7 lucruri diferite înlocuirea și ordinea este importantă?
Acest comentariu a fost redus la minimum de moderatorul de pe site
3 la puterea lui 7: 2187
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua tuturor. Am nevoie de ajutor în acest sens. Am două alfabete de permutat în 20 de rânduri. Dar nu înțeleg bine. Oricine ar putea să mă ajute ar trebui să trimită permutarea pe e-mailul meu. 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
Acest comentariu a fost redus la minimum de moderatorul de pe site
acest cod nu va funcționa deoarece există două multe permutări


ar trebui să fie:

acest cod nu va funcționa deoarece există prea multe permutări


HTH
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut, MC,
Vă mulțumesc pentru reamintirea voastră caldă, este greșeala mea. L-am corectat.
Multumesc mult!
Acest comentariu a fost redus la minimum de moderatorul de pe site
peki bunu listeleyecek bir program uygulama yok mu?basit sıradan bir hesaplamadan daha fazlasına ihtiyacı olan ne yapacak?
Acest comentariu a fost redus la minimum de moderatorul de pe site
care îmi poate trimite o listă de 10 articole diferite permutate de 2 rezultate. acest cod doe

nu lucrez la asta
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, dacă șirul de intrare conține caractere duplicate, atunci subproducția produce permutări duplicate.
Acest lucru nu se întâmplă dacă faceți următoarea modificare a buclei:

' ==========================
Pentru i = 1 To xLen
Dacă Instr( Stânga(Str2, i - 1), Mid(Str2, i, 1) ) = 0 atunci
Apelați GetPermutation (Str1 + Mid (Str2, i, 1), Left (Str2, i - 1) + Right (Str2, xLen - i), xRow)
Încheie dacă
Pagina Următoare →
' ==========================

Crearea de variabile locale temporare pentru Mid(Str2, i, 1) și pentru Left(Str2, i - 1) și evitarea testului pentru i=1 face ca acesta să meargă mai rapid:


' ==========================
Sub GetPermutation (Str1 ca șir, Str2 ca șir, ByRef xRow ca lung)
Dim i ca întreg, xLen ca întreg, Str2left ca șir, c ca șir
xLen = Len(Str2)
Dacă xLen < 2 Atunci
Interval(„A” și xRow) = Str1 și Str2
xRow = xRow + 1
Altfel
Apelați GetPermutation(Str1 + Mid(Str2, 1, 1), Right(Str2, xLen - 1), xRow)
Pentru i = 2 To xLen
c = Mid(Str2, i, 1)
Str2left = Stânga(Str2, i - 1)
Dacă Instr( Str2left, c ) = 0 atunci
Apelați GetPermutation (Str1 + c, Str2left + Right (Str2, xLen - i), xRow)
Final, dacă
Pagina Următoare →
Final, dacă
End Sub
' ==========================

Noroc,
DVDm
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut !

Como faço para gerar pelo menos 10 permutações ?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, Mateus,
Pentru a vă rezolva problema, vă rugăm să aplicați codul de mai jos: (Notă: dacă există mai mult de 8 caractere, codul se va executa lent.)
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


Vă rugăm să încercați, sper că vă poate ajuta!
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL