Zahlen mischen
Hallo!
Habe folgendes Problem: Ich habe ein Wort z.B. "Herbstzeit" als String in einzelne Buchstaben zerlegt und jeden Buchstaben eine
Zahl zugeordnet.
Also H=1,E=2 usw. Jetzt möchte ich die Buchstaben bzw. die Zahlen mischen od. anders in der Reihenfolge anordnen.
Mit dem Zufallsgenerator in Excel geht es nicht da doppelte Zahlen generiert werden und =wenn() Abfragen sind zu aufwendig, voralllem wenn die Wörter länger sind.
Habe folgendes Problem: Ich habe ein Wort z.B. "Herbstzeit" als String in einzelne Buchstaben zerlegt und jeden Buchstaben eine
Zahl zugeordnet.
Also H=1,E=2 usw. Jetzt möchte ich die Buchstaben bzw. die Zahlen mischen od. anders in der Reihenfolge anordnen.
Mit dem Zufallsgenerator in Excel geht es nicht da doppelte Zahlen generiert werden und =wenn() Abfragen sind zu aufwendig, voralllem wenn die Wörter länger sind.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 10178
Url: https://administrator.de/forum/zahlen-mischen-10178.html
Ausgedruckt am: 24.12.2024 um 12:12 Uhr
19 Kommentare
Neuester Kommentar
Moin,
beschreib mal etwas näher den Sinn der Sache,
da kann man mit Sicherheit was über ein Macro machen.
Psycho
beschreib mal etwas näher den Sinn der Sache,
da kann man mit Sicherheit was über ein Macro machen.
Psycho
Hallo, also ich kann dir nur ein Beispiel geben, wie ich es in einer anderen Programmiersprache machen würde:
Als erstes würde ich die Länge des Wortes über die entsprechende Funktion (z. b. length()? ) auslesen lassen und den Wert einer Hilfsvariable (I= length(wort)) zuweisen
Das Wort würde ich nicht in einzelne Strings teilen. Wenn dann würde ich sie in deinem Fall in Felder schreiben, da du dann auch über die indizes diese einfach auslesen kannst.
danach nur noch von 1 (damit der erste buchstabe gleich bleibt) bis I-1 eine for-schleife durchlaufen lassen, in dieser musste dann per random(word[I]) dem word einen neuen wert zuweisen. Dann würde ich nur mit einer weiteren schleife schauen, ob dieser neue wert schon einmal in einem der Felder vorher vergeben wurde, wenn ja, dann neu random ausführen, ansonsten die zählvariable I erhöhen. -> fertig
in anderen Programmiersprachen müssten die begriffe nur anders heißen, aber vom prinzip müsste es so gehen
MfG DeRe666
Als erstes würde ich die Länge des Wortes über die entsprechende Funktion (z. b. length()? ) auslesen lassen und den Wert einer Hilfsvariable (I= length(wort)) zuweisen
Das Wort würde ich nicht in einzelne Strings teilen. Wenn dann würde ich sie in deinem Fall in Felder schreiben, da du dann auch über die indizes diese einfach auslesen kannst.
danach nur noch von 1 (damit der erste buchstabe gleich bleibt) bis I-1 eine for-schleife durchlaufen lassen, in dieser musste dann per random(word[I]) dem word einen neuen wert zuweisen. Dann würde ich nur mit einer weiteren schleife schauen, ob dieser neue wert schon einmal in einem der Felder vorher vergeben wurde, wenn ja, dann neu random ausführen, ansonsten die zählvariable I erhöhen. -> fertig
in anderen Programmiersprachen müssten die begriffe nur anders heißen, aber vom prinzip müsste es so gehen
MfG DeRe666
Hi,
ich habe hier mal einen Lösungsansatz ohne Macro, allerdings kommt man mit einer Formel nicht hin:
- In die A1 wird der Begriff eingetragen
- In die A3 kommt folgende Formel:
=WENN(LÄNGE($A$1)-2>=1;ZUFALLSZAHL();"")
Diese habe ich bis zur A32 runtergezogen (max. 30 Zeichen pro Begriff)
Der Wert für die Länge wird jeweils um 1 erhöht (>=1,>=2,>=3 ... )
- In die B3 folgende Formel:
=WENN(ISTZAHL(A3);RANG(A3;A$3:A$32);"")
Bis B32 runterziehen
Jetzt haben wir Zufallszahlen, die sich nicht wiederholen und auf die Zeichenlänge
des Begriffes - 2 beschränkt sind.
- In C4 steht diese Formel:
=WENN(ISTZAHL(A3);TEIL($A$1;B3+1;1);"")
damit haben wir die entsprechenden Zeichen gemischt.
Und jetzt kommt etwas Fleißarbeit
- In C1 steht:
=VERKETTEN(LINKS(A1;1);C3;C4;C5;C6;C7;C8;C9;C10;C11;C12;
C13;C14;C15;C16;C17;C18;C19;C20;C21;C22;C23;C24;C25;C26;
C27;C28;C29;C30;RECHTS(A1;1))
Damit hast du Anfangs- und Endbuchstaben an der richtigen Stelle und der Rest ist vertauscht.
Ich hoffe das hilft dir weiter
Psycho
Edit: Die Formel in C4 steht natürlich in C3 und wird auch runtergezogen - sorry
ich habe hier mal einen Lösungsansatz ohne Macro, allerdings kommt man mit einer Formel nicht hin:
- In die A1 wird der Begriff eingetragen
- In die A3 kommt folgende Formel:
=WENN(LÄNGE($A$1)-2>=1;ZUFALLSZAHL();"")
Diese habe ich bis zur A32 runtergezogen (max. 30 Zeichen pro Begriff)
Der Wert für die Länge wird jeweils um 1 erhöht (>=1,>=2,>=3 ... )
- In die B3 folgende Formel:
=WENN(ISTZAHL(A3);RANG(A3;A$3:A$32);"")
Bis B32 runterziehen
Jetzt haben wir Zufallszahlen, die sich nicht wiederholen und auf die Zeichenlänge
des Begriffes - 2 beschränkt sind.
- In C4 steht diese Formel:
=WENN(ISTZAHL(A3);TEIL($A$1;B3+1;1);"")
damit haben wir die entsprechenden Zeichen gemischt.
Und jetzt kommt etwas Fleißarbeit
- In C1 steht:
=VERKETTEN(LINKS(A1;1);C3;C4;C5;C6;C7;C8;C9;C10;C11;C12;
C13;C14;C15;C16;C17;C18;C19;C20;C21;C22;C23;C24;C25;C26;
C27;C28;C29;C30;RECHTS(A1;1))
Damit hast du Anfangs- und Endbuchstaben an der richtigen Stelle und der Rest ist vertauscht.
Ich hoffe das hilft dir weiter
Psycho
Edit: Die Formel in C4 steht natürlich in C3 und wird auch runtergezogen - sorry
Hi,
hast du das Edit in meinem Beitrag beachtet,
mir ist da ein kleiner Fehler unterlaufen, bei mir klappt es so.
Psycho
hast du das Edit in meinem Beitrag beachtet,
mir ist da ein kleiner Fehler unterlaufen, bei mir klappt es so.
Psycho
Guten Morgen,
musste gestern weg.
Poste doch mal Deine Formeln, speziell die aus C1, vielleicht kommen wir ja so weiter!
Psycho
musste gestern weg.
Poste doch mal Deine Formeln, speziell die aus C1, vielleicht kommen wir ja so weiter!
Psycho
Hi,
sieht die Formel in C3 so aus:
=WENN(ISTZAHL(A3);TEIL($A$1;B3+1;1);"")
?
Das mit dem Verketten ist mir auch aufgefallen, könnte man aber ander lösen, wenn es nötig sein sollte.
Psycho
Edit : In der A3 sollte aber folgendes stehen:
=WENN(LÄNGE($A$1)-2>=1;ZUFALLSZAHL();"")
sieht die Formel in C3 so aus:
=WENN(ISTZAHL(A3);TEIL($A$1;B3+1;1);"")
?
Das mit dem Verketten ist mir auch aufgefallen, könnte man aber ander lösen, wenn es nötig sein sollte.
Psycho
Edit : In der A3 sollte aber folgendes stehen:
=WENN(LÄNGE($A$1)-2>=1;ZUFALLSZAHL();"")
Hi,
irgendwas muß anders sein, bei mir kommt folgendes raus:
Walter -> Wetalr
irgendwas muß anders sein, bei mir kommt folgendes raus:
Walter -> Wetalr
Ich noch mal,
gib mir doch mal Deine Adresse, dann maile ich Dir meine Datei einfach
Psycho
gib mir doch mal Deine Adresse, dann maile ich Dir meine Datei einfach
Psycho
Hi,
für alle, die es noch interessiert, ich habe da mal ein kleines Tool geschrieben,
mit dem man ganze Text gleichzeitig behandeln kann (es hat mir halt keine Ruhe gelassen)
Mit den Satzzeichen kommt es noch nicht klar, aber vielleicht gibt es ja bald ein Update
Wer Interesse hat kann mir mailen:
psycho-dad-shl@arcor.de
Psycho
für alle, die es noch interessiert, ich habe da mal ein kleines Tool geschrieben,
mit dem man ganze Text gleichzeitig behandeln kann (es hat mir halt keine Ruhe gelassen)
Mit den Satzzeichen kommt es noch nicht klar, aber vielleicht gibt es ja bald ein Update
Wer Interesse hat kann mir mailen:
psycho-dad-shl@arcor.de
Psycho
@thorium
Hi,
öffne eine neue Excel-Tabelle, starte den VB-Editor und füge ein neues Modul ein.
Kopiere folg. Programmcode ein:
Wechsle zur Tabellenansicht, markiere eine Zelle(z.B. C1) und starte den Funktionsassistenten,wähle Benutzerdefiniert, anschließend
die Funktion Buchstabensalat. Im folg. Dialog gibst du die Zelle ein(z.B. A1), die dein zu verdrehendes Wort enthalten soll
und bestätigst mit OK.
Oder gib direkt in eine Zelle(z.B. C1) ein: =Buchstabensalat(A1).
Wenn du nun in A1 ein Wort eingibst, erscheint es in C1 verdreht.
Ich wollte noch ein paar Kommentare schreiben, hatte aber keine Zeit mehr.
Hole ich aber nach, wenn's dich interessiert.
Gruß
Günni
PS.: Hatte übersehen, dass der 1. und der letzte Buchstabe bleiben müssen. Hol ich nach.
Hi,
öffne eine neue Excel-Tabelle, starte den VB-Editor und füge ein neues Modul ein.
Kopiere folg. Programmcode ein:
Dim Kontrollfeld() As Boolean
Dim Wortfeld() As String
Dim NeuesWort
Dim Gefunden
Function Zufallszahl(Bereich) As Integer
Randomize
Zufallszahl = Int((Bereich * Rnd) + 1)
End Function
Function Buchstabensalat(Wort)
If IsEmpty(Wort) Then Exit Function
ReDim Kontrollfeld(Len(Wort))
For i = 1 To UBound(Kontrollfeld)
Kontrollfeld(i) = False
Next
ReDim Wortfeld(Len(Wort))
For i = 1 To Len(Wort)
Wortfeld(i) = Mid(Wort, i, 1)
Next i
Randomize
z = Zufallszahl(Len(Wort))
Kontrollfeld(z) = True
NeuesWort = Wortfeld(z)
Gefunden = 1
For i = 2 To Len(Wort)
While Kontrollfeld(z) And Gefunden < Len(Wort)
z = Zufallszahl(Len(Wort))
Wend
Gefunden = Gefunden + 1
Kontrollfeld(z) = True
NeuesWort = NeuesWort + Wortfeld(z)
Next
Buchstabensalat = NeuesWort
End Function
Wechsle zur Tabellenansicht, markiere eine Zelle(z.B. C1) und starte den Funktionsassistenten,wähle Benutzerdefiniert, anschließend
die Funktion Buchstabensalat. Im folg. Dialog gibst du die Zelle ein(z.B. A1), die dein zu verdrehendes Wort enthalten soll
und bestätigst mit OK.
Oder gib direkt in eine Zelle(z.B. C1) ein: =Buchstabensalat(A1).
Wenn du nun in A1 ein Wort eingibst, erscheint es in C1 verdreht.
Ich wollte noch ein paar Kommentare schreiben, hatte aber keine Zeit mehr.
Hole ich aber nach, wenn's dich interessiert.
Gruß
Günni
PS.: Hatte übersehen, dass der 1. und der letzte Buchstabe bleiben müssen. Hol ich nach.
Programmode, bei dem 1. und letzter Buchstabe im verdrehten Wort stehen bleiben
Dim Kontrollfeld() As Boolean 'Hier werden Zahlen gespeichert, die schon "gezogen" wurden
Dim Wortfeld() As String 'Das Ursprungswort wird hier in Buchstaben zerlegt
Dim NeuesWort 'Das neue, verdrehte Wort
Dim Gefunden 'Kontrollvariable
'Ermittelt Zufallszahlen aus dem Bereich 1 -n(Wortlänge)
'Wortlänge wird in der Hauptfunktion als Parameter übergeben
Function Zufallszahl(Bereich) As Integer
Randomize
Zufallszahl = Int((Bereich * Rnd) + 1)
End Function
'Hauptfunktion
Function Buchstabensalat(Wort) 'Wort wird im Tabellenblatt durch eine Zelle ersetzt, z.B. A1
If IsEmpty(Wort) Then Exit Function 'Unterdrückt Fehlermeldung, wenn Zelle leer ist
ReDim Kontrollfeld(Len(Wort)) 'Kontrollfeld an Wortlänge anpassen
For i = 1 To UBound(Kontrollfeld) 'Kontrollfeld initialisieren
Kontrollfeld(i) = False
Next
ReDim Wortfeld(Len(Wort)) 'Wortfeld an Wortlänge anpassen
For i = 1 To Len(Wort) 'Wort in Buchstaben zerlegen, und die Buchstaben in Wortfeld einfügen
Wortfeld(i) = Mid(Wort, i, 1)
Next i
Kontrollfeld(1) = True 'Erster Buchstabe soll nicht per Zufall ermittelt werden
Kontrollfeld(Len(Wort)) = True 'Letzter Buchstabe soll nicht per Zufall ermittelt werden
NeuesWort = Wortfeld(1) 'Erster Buchstabe wird eingefügt
Gefunden = 1 'Erster Buchstabe gefunden
For i = 2 To Len(Wort) 'In der For-Schleife werden nun die Buchstaben 2 - n per Zufall ermittelt
'While-Schleife läuft solange,
'a: ein gefundener Wert bereits vorhanden ist
'b: oder bereits alle Buchstaben vertauscht wurden
While Kontrollfeld(z) And Gefunden < Len(Wort)
z = Zufallszahl(Len(Wort))
Wend
Gefunden = Gefunden + 1 'Kontrollvariable wird solange erhöht, wie Buchstaben vorhanden
Kontrollfeld(z) = True 'Entsprechendes Feld wird auf TRUE gesetzt
NeuesWort = NeuesWort + Wortfeld(z) 'Zufällig gef. Buchstabe wird an neues Wort angehangen
Next
'Da bereits oben das Finden des letzten Buchstabens ausgeschlossen wurde(Kontrollfeld(Len(Wort)) = True ),
'muß er nun zum Schluß noch angefügt werden
NeuesWort = NeuesWort + Wortfeld(Len(Wort))
Buchstabensalat = NeuesWort 'Das neue Wort wird an die Funktion übergeben
End Function
Hi,
... trotzdem große Lob an Günni:
riesen Aufwand, toll erklärt!
Psycho
... trotzdem große Lob an Günni:
riesen Aufwand, toll erklärt!
Psycho