thorium
Goto Top

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.

Content-ID: 10178

Url: https://administrator.de/forum/zahlen-mischen-10178.html

Ausgedruckt am: 24.12.2024 um 12:12 Uhr

8644
8644 02.05.2005 um 08:32:26 Uhr
Goto Top
Moin,

beschreib mal etwas näher den Sinn der Sache,
da kann man mit Sicherheit was über ein Macro machen.

Psycho
thorium
thorium 02.05.2005 um 08:48:02 Uhr
Goto Top
Der Sinn der Sache ist: Laut "Pisastudie" kann man ein Wort lesen bzw. einen Text
wenn bei jeden Wort der Erste und der letzte Buchstabe an der richtigen Stelle steht und die Buchstaben zwischen ersten und letzten können in der Reihenfolge vertauscht sein ,aber es müssen alle vorhanden sein und trotzdem kann man den text lesen.

z.B. : Herbstzeit vertauscht: Hresbtezit alerldngis bei eniem Wrot shcelhct man baruhct 2 Zielen txet um scih enziuelsen ich hfofe du Hßat vretsadnen.

Gurß Thuirom!
6907
6907 02.05.2005 um 09:50:19 Uhr
Goto Top
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
8644
8644 02.05.2005 um 11:04:04 Uhr
Goto Top
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
thorium
thorium 02.05.2005 um 11:56:10 Uhr
Goto Top
Danke Psycho Dad!
Aber es wird leider immer ein Buchstabe zuviel generiert, komme aber leider nicht dahinter warum.
8644
8644 02.05.2005 um 12:01:33 Uhr
Goto Top
Hi,

hast du das Edit in meinem Beitrag beachtet,

mir ist da ein kleiner Fehler unterlaufen, bei mir klappt es so.

Psycho
thorium
thorium 02.05.2005 um 14:26:07 Uhr
Goto Top
Hallo Psycho Dad

Der letzte Buchstabe in jedem Wort ist leider noch immer doppelt.
8644
8644 03.05.2005 um 07:19:47 Uhr
Goto Top
Guten Morgen,

musste gestern weg.

Poste doch mal Deine Formeln, speziell die aus C1, vielleicht kommen wir ja so weiter!

Psycho
thorium
thorium 03.05.2005 um 07:59:58 Uhr
Goto Top
Hallo psycho dad!

Formel aus A3
=WENN(ISTZAHL(A3);RANG(A3;A$3:A$32);"")

Formel aus B3
=WENN(ISTZAHL(A3);RANG(A3;A$3:A$32);"")

Formel aus C1 lautet:
=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))
Das Wort "Walter" ergibt: wlatrer

Wie du siehst kommt das "r" doppelt, passiert immer mit dem letzten Buchstaben eines Wortes. Außerdem =verketten nur bis C30 zu verwenden lt. EXCEL, aber es werden auch Buchst. bis C31 gesetzt und dadurch nicht verwendet.

Gruß Thorium
8644
8644 03.05.2005 um 08:06:25 Uhr
Goto Top
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();"")
thorium
thorium 03.05.2005 um 08:42:56 Uhr
Goto Top
Hi

Die Formel stimmen so, hab es überprüft!
8644
8644 03.05.2005 um 08:49:17 Uhr
Goto Top
Hi,

irgendwas muß anders sein, bei mir kommt folgendes raus:

Walter -> Wetalr
8644
8644 03.05.2005 um 08:57:15 Uhr
Goto Top
Ich noch mal,

gib mir doch mal Deine Adresse, dann maile ich Dir meine Datei einfach

Psycho
thorium
thorium 03.05.2005 um 09:10:36 Uhr
Goto Top
Hi
herbert.trombitas@arcs.ac.at
8644
8644 03.05.2005 um 15:43:20 Uhr
Goto Top
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 face-wink

Wer Interesse hat kann mir mailen:

psycho-dad-shl@arcor.de

Psycho
Guenni
Guenni 03.05.2005 um 22:47:33 Uhr
Goto Top
@thorium

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.
Guenni
Guenni 05.05.2005 um 10:20:34 Uhr
Goto Top
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
thorium
thorium 09.05.2005 um 08:24:33 Uhr
Goto Top
Danke für Eure Mühe, aber Psycho Dad hat das Problem bereits mit "normalen Excel Formeln "gelöst.
8644
8644 09.05.2005 um 12:17:55 Uhr
Goto Top
Hi,

... trotzdem große Lob an Günni:

riesen Aufwand, toll erklärt!

Psycho