Anzeige
Archiv - Navigation
1012to1016
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suche einen VBA-Ansatz

Suche einen VBA-Ansatz
11.10.2008 18:53:00
Christina
Hallo,
für unten angeführtes Beispiel bitte ich um einen Denkanstoß.
All meine Versuche waren bisher erfolglos.
Gruß
Christina Verena
Userbild

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Permutationen
11.10.2008 19:22:33
Erich
Hallo Christina,
das sind alle Permutationen von "1234".
Probier mal

Option Explicit
Sub tst()
Perm "1234", "", 5, 1
End Sub
Sub Perm(aa As String, bb As String, Ze As Long, Sp As Long)
Dim ii As Integer, jj As Integer, kk As Long
jj = Len(aa)
If jj > 1 Then
For ii = 1 To jj
Perm Left(aa, ii - 1) + Right(aa, jj - ii), bb + Mid(aa, ii, 1), _
Ze, Sp
Next ii
Else
If Ze >= Rows.Count Then Exit Sub
For kk = Sp To Sp + Len(bb & aa) - 1
Cells(Ze, kk) = Mid(bb & aa, kk, 1)
Next kk
Ze = Ze + 1
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Permutationen
11.10.2008 19:43:00
Christina
Hallo Erich,
Dein Programm funktioniert vorzüglich. Vielen Dank.
Doch, da ich noch ziemlich am VBA-Anfang stehe, ist das schon ein harter Brocken.
Beim Kauf einer Waschmaschine bekommt man stets eine Bedienungsanleitung ... , die man dann in den seltensten Fällen auch tatsächlich liest.
Leider gibt es so etwas bei Programmen selten oder doch?
Ist da eine Rekursivstruktur eingebaut?
Will sagen: eine kurze Anleitung wäre hilfreich. Vielleicht .... hast Du ja die Zeit dazu.
Ich will das Programm schon verstehen lernen.
Gruß
Christina Verena
AW: Permutationen - Testversion
11.10.2008 21:06:00
Erich
Hallo Christina Verena,
ja, das ist eine Rekursion - Perm ruft sich immer wieder selbst auf.
Mit dem Erklären ist das nicht so einfach.
Ich gebe dir hier eine Testversion, die alle Aufrufe von "Perm" in den Spalten G und H protokolliert
und die Ergebnisse auch in die Spalten I und J schreibt.
Die Routine löscht zu Beginn alle Zellen, damit keine alten Werte stören.
Lass die Routine auch mal mit "If jj > 3 Then" und "If jj > 2 Then" laufen, damit verringerst du die Aufruftiefe.
Kannst du daran nachvollziehen, was wann passiert?:

Option Explicit
Sub tst()
Dim zzz As Long                           ' test
zzz = 1                                   ' test
Cells.Clear                               ' test
Range("G1:J1") = Split("aa bb Ze Erg")    ' test
Perm "1234", "", 5, 1, zzz
End Sub
Sub Perm(aa As String, bb As String, Ze As Long, Sp As Long, zz As Long)
Dim ii As Integer, jj As Integer, kk As Long
zz = zz + 1          ' test
Cells(zz, 7) = aa    ' test
Cells(zz, 8) = bb    ' test
jj = Len(aa)
If jj > 3 Then       ' testweise statt "If jj > 1 Then" laufen lassen
'  If jj > 2 Then       ' testweise statt "If jj > 1 Then" laufen lassen
'  If jj > 1 Then       ' das ist die Original-Anweisung
For ii = 1 To jj
Perm Left(aa, ii - 1) & Right(aa, jj - ii), bb & Mid(aa, ii, 1), _
Ze, Sp, zz
Next ii
Else
If Ze >= Rows.Count Then Exit Sub
For kk = Sp To Sp + Len(bb & aa) - 1
Cells(Ze, kk) = Mid(bb & aa, kk, 1)
Next kk
zz = zz + 1                 ' test
Cells(zz, 9) = Ze           ' test
Cells(zz, 10) = bb & aa     ' test
Ze = Ze + 1
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Permutationen - Testversion
12.10.2008 19:28:53
Christina
Hallo Erich,
tausend Dank für Deine Hilfen.
Das war für mich eine harte Nuss, aber ich denke, dass ich die Lösung nun verstanden habe, was nicht heißen soll, für eine ähnliche Aufgabe eine genauso knapp geschriebene Lösung fertig zu bringen.
Es ist noch ein langer Weg, der vor mir liegt.
Wichtig ist, dass man - wie von Dir - Unterstützung erfahren darf und die ganze Sache obendrein Spaß macht.
Einen schönen Abend und eine gute Woche.
Gruß
Christina Verena

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige