hanheik
Goto Top

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

Content-Key: 160643

Url: https://administrator.de/contentid/160643

Printed on: April 23, 2024 at 21:04 o'clock

Member: bastla
bastla Feb 12, 2011 at 11:29:42 (UTC)
Goto Top
Hallo hanheik!

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
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 ...
Mitglied: 76109
76109 Feb 12, 2011 at 11:46:50 (UTC)
Goto Top
Hallo @all

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
Member: Biber
Biber Feb 12, 2011 at 13:09:48 (UTC)
Goto Top
Moin hanheik,

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
Member: hanheik
hanheik Feb 12, 2011 at 13:23:06 (UTC)
Goto Top
Hallo Ihr 3,

vielen Dank für eure Mühe, das funktioniert und hilft wirklich weiter.

Gruß

Hanheik