Schleife bei Zufallszahlen
Projekt: Übungsaufgaben für die Grundschule
Hallo Spezis,
für die Excel-Datei mit Übungsaufgaben für die Grundschuke bin ich zur Zeit bei der Subtraktion.
Zur Generierung von Übungsaufgaben verwende ich das folgende Makro in immer abgewandelter Form:
Sub neueZahlenSubtraktionbis1000()
Dim Bereich As Range
Dim zelle As Range
Sheets("Subtraktion bis 1000").Select
Set Bereich = Range("A1:A100,C1:C100")
For Each zelle In Bereich
zelle.Value = Int((1000 * Rnd) + 1)
Next zelle
End Sub
Bei der Subtraktion erzeugt diese Makro jedoch auch Aufgaben, bei denen der Subtrahend größer ist als der Minuend. zB: 123-768=
Da die Kinder jedoch noch keine negativen Zalen kennen, kann man eine solche Aufgabe nicht brauchen.
Wie kann man das Makro so verschleifen, daß es die Felder in einer Zeile überprüft?
Zelle a1 größer Zelle c1 : in Ordnung > nächste Zeile
Zelle a1 kleiner Zelle c1 : nicht in Ordnung > Zeile nochmal mit Zufallszahlen belegen
Kann mir dabei jemand helfen?
Gruß
Hanheik
Hallo Spezis,
für die Excel-Datei mit Übungsaufgaben für die Grundschuke bin ich zur Zeit bei der Subtraktion.
Zur Generierung von Übungsaufgaben verwende ich das folgende Makro in immer abgewandelter Form:
Sub neueZahlenSubtraktionbis1000()
Dim Bereich As Range
Dim zelle As Range
Sheets("Subtraktion bis 1000").Select
Set Bereich = Range("A1:A100,C1:C100")
For Each zelle In Bereich
zelle.Value = Int((1000 * Rnd) + 1)
Next zelle
End Sub
Bei der Subtraktion erzeugt diese Makro jedoch auch Aufgaben, bei denen der Subtrahend größer ist als der Minuend. zB: 123-768=
Da die Kinder jedoch noch keine negativen Zalen kennen, kann man eine solche Aufgabe nicht brauchen.
Wie kann man das Makro so verschleifen, daß es die Felder in einer Zeile überprüft?
Zelle a1 größer Zelle c1 : in Ordnung > nächste Zeile
Zelle a1 kleiner Zelle c1 : nicht in Ordnung > Zeile nochmal mit Zufallszahlen belegen
Kann mir dabei jemand helfen?
Gruß
Hanheik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160643
Url: https://administrator.de/forum/schleife-bei-zufallszahlen-160643.html
Ausgedruckt am: 07.04.2025 um 06:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo hanheik!
Würde ich eher so machen:
Die Abfrage muss auf "<=" erfolgen, da ansonsten bei einem Minueneden von 1 kein passender Subtrahend gefunden werden kann und das Script in eine Endlosschleife gerät. Alternativ könntest Du auch dem Minuenden ansstelle eines "+1" ein "+10" mit auf den Weg geben ...
Grüße
bastla
P.S.: Die Anleitung zur "Code"-Formatierung findest Du übrigens ...
Würde ich eher so machen:
Sub neueZahlenSubtraktionbis1000()
Zeilenanzahl = 1000
Sheets("Subtraktion bis 1000").Select
For i = 1 To Zeilenanzahl
Cells(i, "A") = Int((1000 * Rnd) + 1)
Do
Cells(i, "C") = Int((1000 * Rnd) + 1)
Loop Until Cells(i, "C") <= Cells(i, "A")
Next
End Sub
Grüße
bastla
P.S.: Die Anleitung zur "Code"-Formatierung findest Du übrigens ...

Hallo @all
oder so:
Gruß Dieter
oder so:
Sub neueZahlenSubtraktionbis1000()
Sheets("Subtraktion bis 1000").Select
For i = 1 To 100
Cells(i, "A") = Int((1000 * Rnd) + 1)
Cells(i, "C") = Int((Cells(i, "A") - 1) * Rnd + 1) 'Zelle A als Obergrenze
Next
End Sub
Gruß Dieter
Moin hanheik,
oder, als dritte Variante, ein Versuch diesem zerstückelten Bereich A1:A100;C1:C100 irgendeinen Sinn einzuhauchen:
[Obwohl eigentlich der ganze Ansatz nur durch das Vorhandensein des zusammengekloppten Bereichs erst so kompliziert wird.
Normalererweise würde jeder Zusammenschroter die Zellen A1:A100 und C1:C100 direkt addressieren]
Grüße
Biber
oder, als dritte Variante, ein Versuch diesem zerstückelten Bereich A1:A100;C1:C100 irgendeinen Sinn einzuhauchen:
Sub neueZahlenSubtraktionbis1000()
Dim Bereich As Range
Dim zelle As Range
Dim nextMinuend As Integer
Dim nextSubtrahend As Integer
Sheets("Subtraktion bis 1000").Select
Set Bereich = Range("A1:A100,C1:C100")
For i = 1 To Bereich.Areas(1).Cells.Count
nextMinuend = Int((1000 * Rnd) + 1)
nextSubtrahend = Int((1000 * Rnd) + 1)
Bereich.Areas(1).Cells(i).Value = IIf(nextMinuend > nextSubtrahend, nextMinuend, nextSubtrahend)
Bereich.Areas(2).Cells(i).Value = IIf(nextMinuend > nextSubtrahend, nextSubtrahend, nextMinuend)
Next i
[Obwohl eigentlich der ganze Ansatz nur durch das Vorhandensein des zusammengekloppten Bereichs erst so kompliziert wird.
Normalererweise würde jeder Zusammenschroter die Zellen A1:A100 und C1:C100 direkt addressieren]
Grüße
Biber