278 Aufrufe
Gefragt in Tabellenkalkulation von robbi58 Mitglied (400 Punkte)

Ich möchte ein Blatt mit fortlaufenden Rechnungen erstellen. Dazu habe ich in Spalte A Zufallsbereiche generiert

=ZUFALLSBEREICH(1;100) .

Diese übertrage ich in die blauen Felder mit einer Formel ( = A1, ... ). So weit so gut. In die grüne Spalte kommen die Ergebnisse der "Kopfrechnung". Mitunter passiert es jedoch, dass mit dem Klick auf eine grüne Zelle die Zufallszahlen erneut generiert werden, was die vorherigen Eingaben in den Ergebnisfeldern nutzlos macht. Wie kann ich dies verhindern. Oder gibt es eine Möglichkeit, die Zufallszahlen per CommandButton etc. zu generieren? Danke Robert M.

28 Antworten

+1 Punkt
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

das Problem bei der Ermittlung von Zufallszahlen durch die Formel ist, dass sobald im Blatt etwas neu berechnet wird, auch die Zufallszahlen neu berechnet werden. Um das zu verhindern könntest du im Menüband Formeln bei den Berechnungsoptionen auf Manuell umstellen. Dann wird z.B. bei Eingabe einer Formel in eine Zelle nur die aktuelle Zelle neu berechnet. Das hilft aber nicht, wenn man z.B. aus Versehen in eine Zelle klickt, in der du die Zufallszahl generierst. Diese wird dann neu berechnet. Diese müsstest du auch noch sperren, so dass sie nicht ausgewählt werden kann. Und wenn du neue Zufallszahlen generieren willst, müsstest du das Blatt neu berechnen lassen.

Für deine Zwecke wäre es besser die Zufallszahlen per VBA zu generieren. Dann ändern sich die Zahlen nur, wenn du z.B. auf dem Command-Button drückst.

Hier ein Beispielcode, der den Bereich A4 bis A9 mit Zufallszahlen füllt:

Private Sub CommandButton1_Click()

Dim Untergrenze As Long
Dim Obergrenze As Long
Dim lngZeile As Long

Untergrenze = 1
Obergrenze = 100

For lngZeile = 4 To 9
 Randomize
 Cells(lngZeile, 1) = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Next lngZeile

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)
Hallo M.O.

Wie gewohnt die perfekte Lösung für mein Problem. Das erleichtert meine Arbeit, da ein und dasselbe Arbeitsblatt stets neue Aufgaben und Lösungen bietet. Danke vielmals.

Eine Frage hätte ich noch: für die Rechenoperationen gebe ich die Plus-, Minus- , Mal- und Divisionszeichen vor. Das bedeutet, dass die Aufgabe stets dieselben Rechenoperationen aufweist. Ich kann dies umgehen, indem ich wie bei den Zufallszahlen auch die Operationszeichen (z. B. +, - , * , / ) generieren lasse.

Ich möchte aber dem Bearbeiter ein Feedback (bedingte Formatierung) zukommen lassen, ob sein Ergebnis z. B. nach 5 Rechenoperationen richtig ist. Wenn ich aber die Operationszeichen generiere, wie kann ich dann eine Formel zur Berechnung der Lösung eingeben, da ich diese nämlich in Abhängigkeit der generierten Rechenoperationen anschreiben muss? Oder ist dies nicht möglich? Danke für euer Feedback.
+1 Punkt
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

du kannst dir ja 4 Zufallszahlen im Bereich zwischen 1 und 4 generieren lassen und diesen dann die Rechenoperationen zuordnen (z.B. 1 = +, 2 = -, 3 = *, 4 = /).

Entsprechende Formeln zur Kontrolle kann man auch per VBA generieren. Wenn du mal eine Beispieltabelle auf einen Hoster deiner Wahl (z.B.hier: https://filehorst.de/) hochladen und den Link dann im Forum posten könntest, kann man eine entsprechende Lösung finden.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)
Mittlerweile habe ich eine Lösung gefunden, wenn auch auf Umwegen.

=WENN(G7="*";F10*A1;WENN(G7=":";F10/A1;WENN(G7="-";F10-A1;WENN(G7="+";F10+A1;0))))

Ich lasse einfach jeden Rechenschritt mit der obigen Formel extra durchführen und blende am Schluss diese Spalte aus.

Allerdings habe ich noch das Problem, neben den Zufallszahlen auch die Rechenzeichen per Zufall in Spalte B auszugeben.
+1 Punkt
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

ich habe dir das Makro so erweitert, dass auch die Operatoren per Zufall ermittelt werden:

Private Sub CommandButton1_Click()

Dim Untergrenze As Long
Dim Obergrenze As Long
Dim lngZeile As Long
Dim strOperator As String

Untergrenze = 1
Obergrenze = 100

For lngZeile = 4 To 9
 Randomize
 Cells(lngZeile, 1) = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Next lngZeile

'hier werden jetzt die Rechenoperationen ermittelt
'Ober- und Untergrenze für 4 Rechenzeichen festlegen
Untergrenze = 1
Obergrenze = 4

'Schleife, da 4 Rechenzeichen benötigt werden
For lngZeile = 1 To 4
  'Rechenzeichen ermitteln
  Randomize
  Select Case Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    Case Is = 1
      strOperator = "+"
    Case Is = 2
      strOperator = "-"
    Case Is = 3
      strOperator = "*"
    Case Is = 4
     strOperator = ":"
  End Select
 'Rechenzeichen in Zellen schreiben
 Select Case lngZeile
   Case Is = 1
     Range("G7") = strOperator
   Case Is = 2
     Range("L5") = strOperator
   Case Is = 3
     Range("G14") = strOperator
   Case Is = 4
     Range("L16") = strOperator
   End Select

Next lngZeile

End Sub

Ich habe die Zellen mal anhand deiner Beispieltabelle zugeordnet. Schau mal ob das so passt.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)
Bearbeitet von robbi58

Ich ziehe meinen Hut vor dir, M. O.

Deine Formel funktioniert einwandfrei und ist genau das, was ich mit dieser Tabelle beabsichtige. Ich kann die Zahlen anpassen, kann die Rechenzeichen frei wählen (z. B. nur + und +) und mit der bedingten Formatierung kann man das Endergebnis überprüfen.

Ich habe versucht, die Eingabe der Rechenzeichen auf die Felder Q5, Q16,V5,V16,AA5 und AA16 zu erweitern, indem ich Eingabe

Case Is = 5
     Range("L16") = strOperator


usw. nach unten kopiert und entsprechend abgeändert habe. Leider funktioniert dies nicht. Muss ich noch eine Einstellung verändern? Aber daran merkt man, dass ich mit makros wenig am Hut habe.

Noch einmal recht herzlichen Dank für deine Hilfe!

Robert
 

0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)
Hallo M. O.

Die Datei kannst du unter folgendem Link finden:

https://filehorst.de/d/cbdlmFbi

Ich habe eine Einschränkung auf + und + vorgenommen und den Zahlenbereich auf 20 festgelegt. Die Beschränkung auf + und - deshalb, da bei der Division mitunter endlose Dezimalzahlen herauskommen.

Die Ausgangszahl auf F10 bleibt stets gleich (damit ich nicht in den negativen Bereich komme) oder man generiert diese mit einem Wert z. B. zwischen 60 und 100!

Robert
+1 Punkt
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

die Idee mit der Erweiterung war schon richtig. Nur hast du die Schleife (For lngZeile = 1 To 2) auf 2 Durchläufe reduziert, statt auf 10 zu erhöhen. Daher gibt er in deiner Version nur 2 Operatoren aus. Ersetze diese Zeile durch

For lngZeile = 1 To 10

dann funktioniert das Makro wie gewünscht.

Wenn du willst, kann man auch die Formel zur Berechnung des Ergebnisses per VBA erstellen. Dann könntest du dir die Zwischenrechnungen mit den WENN-Formeln sparen.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)
Kleine Ursache, große Wirkung!

Nun läuft alles einwandfrei genau nach meinen Vorstellungen. Bezüglich Programmierung der Berechnungen möchte ich deine Zeit nicht so sehr beanspruchen.

Vielen, vielen Dank.
0 Punkte
Beantwortet von robbi58 Mitglied (400 Punkte)

Ich habe nun ein ähnliches Beispiel entworfen und es funktioniert einwandfrei. Ich kombiniere unterschiedliche Makros (Spalte A lasse ich von sheet 2 vorgegebene Zahlen generieren), die Spalten B - D fülle ich mittels SVerweis mit Daten aus sheet 2. Die Zahlen werden mit dem CommandButton1 (hier Start) stets neu generiert.

Meine Angaben übernehme ich aus den Spalten A - D (z. B. die Zahl 150 auf H2 wurde aus D2 kopiert). Um zu verhindern, dass durch den S-Verweis immer dieselben Zahlen miteinander kombiniert werden, befülle ich meine Rechnungen mit unterschiedlichen Zeilennummern (C3, A4,...; ich habe in der Skizze die entsprechenden Zellen darunter eingefügt).

Meine Berechnungen für das Ergebnis auf S2 und S4 führe ich mit den Formeln

=WENN(I2="-";H2-J2*L2;WENN(I2="+";H2+J2;0))

=WENN(M2="-";S2-N2*P2;WENN(M2="+";S2+N2*P2;0))

durch.

Wie kann ich diese zu einer Formel zusammenfügen? Ich plane nämlich auch Aufgaben zu entwerfen, die mehrere Rechenschritte erfordern. Wie gesagt, es funktioniert, aber wie hat meine Mathe-Prof früher schon gesagt: der Mathematiker ist ein sehr fauler Mensch. Er wählt immer nur den kürzesten Weg.

...