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

Hur genererar eller listar jag alla möjliga permutationer i Excel?

Till exempel har jag tre tecken XYZ, nu vill jag lista alla möjliga permutationer baserat på dessa tre tecken för att få sex olika resultat som detta: XYZ, XZY, YXZ, YZX, ZXY och ZYX. I Excel, hur kan du snabbt generera eller lista alla permutationer baserat på olika antal tecken?

Generera eller lista alla möjliga permutationer baserat på tecken med VBA-kod


pil blå höger bubbla Generera eller lista alla möjliga permutationer baserat på tecken med VBA-kod

Följande VBA-kod kan hjälpa dig att lista alla permutationer baserat på ditt specifika antal bokstäver, gör så här:

1. Håll ner ALT + F11 nycklar för att öppna Microsoft Visual Basic för applikationer fönster.

2. Klicka Insert > Modulernaoch klistra in följande kod i Modulerna Fönster.

VBA-kod: Lista alla möjliga permutationer i 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. Tryck sedan på F5 nyckel för att köra den här koden, och en snabbruta visas för att påminna dig om att du anger de tecken som du vill lista alla permutationer, se skärmdump:

permutationer för doclista 1

4. Efter att ha skrivit in tecknen och klicka sedan på OK -knappen visas alla möjliga permutationer i kolumn A i det aktiva kalkylbladet. Se skärmdump:

permutationer för doclista 2

Anmärkningar: Om den angivna teckenlängden är lika med eller större än åtta tecken fungerar den här koden inte eftersom det finns för många permutationer.

permutationer för doclista 3


Lista eller generera alla möjliga kombinationer från flera kolumner

Om du behöver generera alla möjliga kombinationer baserat på flera kolumndata finns det kanske inte ett bra sätt att hantera uppgiften. Men, Kutools för Excel's Lista alla kombinationer verktyget kan hjälpa dig att lista upp alla möjliga kombinationer snabbt och enkelt. Klicka för att ladda ner Kutools för Excel!

doc listar alla kombinationer

Kutools för Excel: med mer än 300 praktiska Excel-tillägg, gratis att prova utan begränsning på 30 dagar. Ladda ner och testa gratis nu!


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (13)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag gör ett litet projekt med hjälp av permutation och kombinationsregler. Jag behöver ert stöd i detta snälla. Scenario: Jag har 13-siffriga alfanumeriska data (00SHGO8BJIDG0) Jag vill ha en kodning för att växla S till 5, I till 1 och O till 0 och vice versa. Projektet är att om jag har rätt 13-siffrig data kommer jag att få en 3-siffrig lösenord. (t.ex.) 00SHG08BJ1DG0 - 500 är lösenkoden men på grund av fel stavfel som är istället för 1 var det I och 0 var det O, det finns en felaktig information. kan du vara snäll och hjälpa mig.
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,

Jag försöker få en permutation för 82 tecken, koden som tillhandahålls fungerar, men eftersom kolumnerna bara är 1048576 vill jag flytta nästa utdata i B,C,D..... Kan någon av er hjälpa mig med detta betrakta
Denna kommentar minimerades av moderatoren på webbplatsen
@Supraja...

Rensa alla celler i den första sub-raden... inte bara den första raden
--Cells.Clear

Sub GetPermutation(Str1 Som String, Str2 Som String, ByRef xRow As Long)
Dim i As Integer, xLen As Integer
xLen = Len(Str2)
Om xLen < 2 Då
'flytta till nästa kolumn när du kommer till 100
Cells(((xRow - 1) Mod 100) + 1, 1 + Int(xRow / 100)) = Str1 & Str2
xRow = xRow + 1
annars
För i = 1 Till xLen
Ring GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Höger(Str2, xLen - i), xRow)
Nästa
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hur många sekvenser av 3 saker kan bildas av 7 olika saker ersättning och ordning är viktig?
Denna kommentar minimerades av moderatoren på webbplatsen
3 till makten 7:2187
Denna kommentar minimerades av moderatoren på webbplatsen
Hej alla. Jag behöver hjälp med detta. Jag har två alfabet som ska permuteras i 20 rader. Men jag får det inte rätt. Alla som kan hjälpa mig bör skicka permutationen till min e-post. 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
Denna kommentar minimerades av moderatoren på webbplatsen
den här koden kommer inte att fungera eftersom det finns två många permutationer


borde vara:

den här koden kommer inte att fungera eftersom det finns för många permutationer


HTH
Denna kommentar minimerades av moderatoren på webbplatsen
Hej MC,
Tack för din varma påminnelse, det är mitt misstag. Jag har rättat till det.
Tack så mycket!
Denna kommentar minimerades av moderatoren på webbplatsen
peki bunu listeleyecek bir program uygulama yok mu?basit sıradan bir hesaplamadan daha fazlasına ihtiyacı olan ne yapacak?
Denna kommentar minimerades av moderatoren på webbplatsen
vem kan skicka mig en lista med 10 olika artiklar permuterade av 2 resultat. denna kod doe

jobba inte på det här
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, om inmatningssträngen innehåller dubbla tecken, så producerar suben dubbla permutationer.
Detta händer inte om du gör följande modifiering av slingan:

' ============================
För i = 1 Till xLen
Om Instr( Left(Str2, i - 1), Mid(Str2, i, 1) ) = 0 så
Ring GetPermutation(Str1 + Mid(Str2, i, 1), Left(Str2, i - 1) + Höger(Str2, xLen - i), xRow)
End If
Nästa
' ============================

Genom att skapa tillfälliga lokala variabler för Mid(Str2, i, 1) och för Left(Str2, i - 1) och undvika testet för i=1 gör det att det går snabbare:


' ============================
Sub GetPermutation(Str1 Som String, Str2 Som String, ByRef xRow As Long)
Dim i som heltal, xLen som heltal, Str2left som sträng, c som sträng
xLen = Len(Str2)
Om xLen < 2 Då
Range("A" & xRow) = Str1 & Str2
xRow = xRow + 1
annars
Ring GetPermutation(Str1 + Mid(Str2, 1, 1), Höger(Str2, xLen - 1), xRow)
För i = 2 Till xLen
c = Mid(Str2, i, 1)
Str2vänster = Vänster(Str2, i - 1)
Om Instr( Str2left, c ) = 0 då
Ring GetPermutation(Str1 + c, Str2vänster + Höger(Str2, xLen - i), xRow)
End If
Nästa
End If
End Sub
' ============================

Skål,
DVDm
Denna kommentar minimerades av moderatoren på webbplatsen
Hej !

Como faço para gerar pelo menos 10 permutações ?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Mateus,
För att lösa ditt problem, använd koden nedan:(Obs: om det finns fler än 8 tecken kommer koden att köras långsamt.)
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


Gör ett försök, hoppas det kan hjälpa dig!
Det finns inga kommentarer här ännu
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL