Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
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

Zeichenkette mit Sequenzen

Zeichenkette mit Sequenzen
14.11.2014 11:20:39
Alifa
Hallo,
Die Zeichenkette besteht aus 11 Zeichen. Zahlen von 0 bis 9. in jedem String sollen die Zeichen unterschiedlich sein. Der String kann eine bis fünf Sequenzen ohne Null enthalten. Die Quersummen dieser Sequenzen sind vorgegeben. Beispiel String mit 2 Sequenzen und Quersummen 21 und 15: 00984000762. Der String 00109870650 ist WAHR für 3 Sequenzen (1,987,65) mit den Quersummen 1,24,11. Mein Ansatz: Ein Macro mit der Function Sequenzen(Byval Sequenz1,Quersumme1,...Sequenz(n),Quersumme(n). Hier n=3. Oder ist für jeden String mit unterschiedlicher Anzahl von Sequenzen ohne Null eine Funktion notwendig? Die Sequenzen gelten von rechts nach links. Danke im Voraus!
Alifa

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Meinst du das so, ...
14.11.2014 12:59:26
Luc:-?
…Alifa:
 ABC
1001098706501,24,11WAHR
20098400076221,15WAHR
3007824000752121,15WAHR
4C1[:C3]:=B1=MaskOn(DiSum(WECHSELN(A1;0;"."));"num";;",")
5B3:=MaskOn(DiSum(WECHSELN(A3;0;"."));"num";;",")
Habe jetzt mal der Einfachheit halber meine UDFs benutzt.
Gruß, Luc :-?

Anzeige
AW: Meinst du das so, ...
14.11.2014 16:34:01
Alifa
Hallo Luc,
ich versuche das zu verdeutlichen

Sub TesteKetten()
Dim a, b, c, d, e, f, g, h, i, j, k, s
For a = 1 To 9
For b = 1 To 9
For c = 1 To 9
For d = 1 To 9
For e = 1 To 9
For f = 1 To 9
For g = 1 To 9
For h = 1 To 9
For i = 1 To 9
For j = 1 To 9
For k = 1 To 9
s = CStr(a & b & c & d & e & f & g & h & i & j & k)
If Verschieden(Replace(s, 0, "")) Then
'jetzt folgt die Bedingung: s hat 2 Sequenzen(sequ1 und sequ2)
'deren Summen s1=21 und s2=15 sind
If Sequenzen(s, 2, 21, 15) Then ' Sequenzen ist die Funktion, die noch
'erfunden weden soll...
's=00984000762 oder s=98400007620 oder s=05970000438....
'es gibt also mehrere Lösungen. Mit zusätzlichen Bedingunen(die hier nicht
'von Bedeutung sind) grenze ich die Ergebnisse ein
MsgBox a
End Sub
'alle Ziffern unterschiedlich.Beispiel:Verschieden(Cstr(a1 & a2 & a3))
Function Verschieden(ByVal Zahl As String, Optional i As Integer) As Boolean
For i = Len(Zahl) To 1 Step -1
If Len(Zahl) - Len(Replace(Zahl, Mid$(Zahl, i, 1), ""))  1 Then Exit For
Next
Verschieden = i = 0
End Function

Gruß, Alifa

Anzeige
Na, da scheint ja noch Anderes im HGrd zu ...
14.11.2014 18:28:53
Luc:-?
…liegen, was du hier nicht thematisieren willst, Alifa;
bisher bin ich nämlich davon ausgegangen, dass das HptProblem die Bildung einer Quersummen­Folge über eine (hier durch 0) unter­brochene Ziffernfolge ist. Dabei wäre der Ersatz von 0 durch "" kontra­produktiv, denn die Ziffernfolge wäre dann ja nicht mehr unter­brochen.
Vielleicht käme es ja wirklich erstmal nur darauf an, was man statt deiner geplanten Fkt Sequenzen auch mit meiner UDF DiSum, der Lösung von XlFmln nach Splitten der Ziffernfolge in selbständige Einzelteile (Sequenzen) oder den dir bereits im Okt2009 bzw Jan2014 aufgezeigten Möglichkeiten bewältigen kann.
Die DiSum-Fml kann übrigens auch so aussehen:
 ABC
1ZiffernfolgeSeqzQSumVorgabeBestätigung
2001098706501,24,11WAHR
30098400076221,15WAHR
4007824000752121,15WAHR
5C2[:C4]:=B2=WECHSELN(DiSum(GLÄTTEN(WECHSELN(A2;0;" ")));" ";",")
Du scheinst es umgekehrt versuchen und direkt nach der Vorgabe­Sequenz in der unterbrochenen Ziffern­folge suchen zu wollen, was ich für ein doch sehr (bzw zu) spezifisches Einsatz­Gebiet einer solchen Fkt halte. Es ist idR immer günstiger, allgemeinere Lösungs­möglich­keiten zu nutzen als einen solchen „insularen“ Aufwand zu treiben (vor allem, wenn man das nicht selber schafft!)… ;-)
Luc :-?

Anzeige
Ansatz - schnarchlangsam
15.11.2014 17:32:48
Erich
Hi Erhard,
probier mal den folgenden Code. Er ist recht kurz, dafür aber umso langsamer:

Option Explicit
Sub Sequ()
Dim arQ, aa As Long, zz As Double, arS, ii As Long, jj As Long, ss As Long
Dim ee As Long, arT() As Boolean, arZ(0 To 9) As Boolean
arQ = Array(1, 14, 11)           ' Beispiel: Quersummen für 3 Sequenzen
aa = UBound(arQ)
For zz = 1 To 99999999999#
Application.StatusBar = zz & " / " & ee
DoEvents
arS = Split(Application.Trim(Replace(zz, "0", " ")))
If aa = UBound(arS) Then
ReDim arT(aa)
For ii = 0 To aa
Erase arZ
For jj = 1 To Len(arS(ii))                ' in Sequ. keine doppelte Ziffer
If arZ(Mid(arS(ii), jj, 1)) Then Exit For Else arZ(Mid(arS(ii), jj, 1)) = True
Next jj
If jj  aa Then
For jj = 1 To aa                          ' alle Vorgabe-Quersummen gefunden?
arT(0) = arT(0) And arT(jj)
Next jj
If arT(0) Then
ee = ee + 1                            ' Ausgabezeile
Cells(ee, 1) = Time
Cells(ee, 2) = zz
Cells(ee, 3).Resize(, aa + 1) = arS
End If
End If
End If
Next zz
Application.StatusBar = False
End Sub
Kommen da die Ergebnisse raus, die du haben wolltest?
Ein Tipp: Bei Vorgabe der Quersummen mit Array(1, 14, 11) ist 1029059 der erste Treffer,
also kannst du die zz-Schleife statt bei 1 besser bei z. B. 1029050 starten lassen.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Ein schönes Wochenende allerseits!

Anzeige
Aha, du gehst also davon aus, ...
15.11.2014 17:58:34
aus,
…Erich,
dass Alifa für die jeweilige Quersummen­Sequenz alle möglichen Zahlenfolgen erst ermitteln will. Dann dürfte aber nur die Unterbrechung durch eine 0-Sequenz beliebiger Länge eine Rolle spielen, wodurch dann die Ergebnisse noch durch diese verschieden­langen 0-Sequen­zen modifizierbar wären. Dadurch wäre es …
1. nicht verwunderlich, dass das lange dauert, und …
2. auch irgendwie irrwitzig, …
weshalb ich davon ausging, dass feststehende Ziffern­folgen (auch gestützt durch ver­schieden­lange 0-Sequen­zen) nur darauf unter­sucht wdn sol­len, ob sie einer eben­falls fest­stehenden Quer­summen­Sequenz genügen, zumal er ja auch etwas von vorheriger Ein­gren­zung (mit nicht genannten Methoden) schrieb.
Deshalb nahm ich an, dass er nur einen ungünstigen Ansatz gewählt hat, um dieses Ziel zu erreichen, was bei Zutreffen meiner Ver­mu­tung recht einfach und schnell (wie von mir demonstriert) zu erreichen wäre.
Aber bei der Art der Aufgabenstellungen, die er bisher hier nachgefragt hat, würde mich die Richtigkeit deiner Interpretation auch nicht sonderlich verwundern…
Gruß + schöWE, Luc :-?

Anzeige
AW: Ansatz - schnarchlangsam
16.11.2014 11:24:25
Alifa
Hallo Erich,
es geht um 11 Zeilen und 11 Spalten(wie beim Kreuzworträtsel). Die 0(schwarze Felder) dient zum Trennen der Sequenzen. Man könnte auch einen Buchstaben nehmen. Bei N Sequenzen sind mindestens N-1 "Trennungen"(Tr). Die Kette mit den 5 Sequenzen (deren Quersummen: 10,9,6,3,8) könnte folgendes "Muster" haben: nn0nn0n0n0n oder 0nn0n0n0non oder...Wenn mit solchen "Mustern" vorgegangen wird, ist die größte "Zahl" siebenstellig und kann schneller abgearbeitet werden, als eine 11 stlg. Im String(11 Zeichen) müssen alle Ziffern unterschiedlich sein. Ich habe Dein Makro mit meiner Kette mit 3 Sequenzen und deren Quersummen(8,7,19) geprüft. Ein Ergebnis war: B=8070793; C=8; D=7; F=793. Die Bedingung(alle Ziffern verschieden) ist nicht erfüllt. Vielleicht kann man das nicht lösen, da es zu viele Möglichkeiten gibt und die Berechnungen zu lange dauern. Wenn man die Ketten einzeln berechnen lässt, dann mit Deiner Sub "NoDubs" die Anzahl der Möglichkeiten reduziert...
Viele Grüße, Erhard

Anzeige
Typischer Fall (wie aus dem Lehrbuch für ...
16.11.2014 18:49:27
Luc:-?
…Problemlösungstrainer), Erhard;
immer schön nicht das eigentliche Problem benennen, sondern nur nach auftretenden Problemen bei eigenen Lösungs­ansätzen fragen und damit eine ggf mögliche rationalere Heran­gehens­weise verhindern, da doch viele nur ungern für den Papierkorb arbeiten… :->
Glücklicherweise habe ich hier, dank meiner Mittel, nicht so viel Zeit investieren müssen wie jetzt wohl Erich…
Nebenbei, ich denke, dass das (ggf auch ohne lange Laufzeiten) lösbar ist!
Luc :-?

AW: Typischer Fall (wie aus dem Lehrbuch für ...
16.11.2014 21:21:28
Alifa
Ich denke, du hast viel zu viel Zeit für dieses Thema investiert, Luc! Wen kümmert deine "Hilfe"? Wohl keinen!
Alifa

Anzeige
Wenn du dich da nicht mal irrst, ...
17.11.2014 15:09:11
Luc:-?
…Erhard;
schau einfach mal über den Tellerrand deiner selbstgemachten Probleme! :->
Ich habe auch eine Lehrberechtigung und in dem dafür erforderlichen Kurs ist genau das von dir hier gezeigte und von mir beschriebene Verhalten thematisiert worden. Es ist also in Fachkreisen bekannt und du bist, falls dich das tröstet, beileibe kein Einzelfall. Allerdings macht es unter diesen Umständen wenig Freude, dir helfen zu wollen, weshalb ich das auch nur in Einzelfällen wie hier versuche. Natürlich wiedermal umsonst…
Könnte an unseren, evtl (weit zurückliegend) gemeinsamen Vorfahren liegen, dass wir beide relativ kompliziert denken. Nur kommt bei mir auch etwas allgemein Brauchbares dabei heraus (könnte aber auch der preußische Einfluss beteiligt sein)…! ;-]
Gruß, Luc :-?
Besser informiert mit …
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige