none
Collatz Reihe in Excel mithile von VBA RRS feed

  • Frage

  • Hallo

    In der Schule nutzen wir Visual Studio 6.0 und Excel 97 2002.

    Unsere Aufgabe ist es eine Userform (aufrufbar per STRG+M) zu erstellen welche es ermöglicht einen Start- und Endwert festzulegen. Dies habe ich bereits getan. Nun soll bei Excel (angenommen SW: 5 und EW: 9) in Zeile 1 5 stehen und dann hochgezählt werden bis 9 also bei 1A = 5, bei 1B = 6, bei 1C = 7, bei 1D = 8 usw.

    Immoment klappt nicht mal das.

    Dann soll für den Wert die Collatz Reihe berechnet werden und dann für den Wert 6 usw. und das halt immer nach unten also eine Spalte tiefer etc.

    Ich komme einfach nicht weiter.

    Momentanes Programm:

    Dim startwert As Integer
    Dim endwert As Integer
    Dim zeile As Integer
    Dim spalte As Integer
    Dim zahl As Integer
    
    
    
    
    Private Sub cbCollatz_Click()
    startwert = TextBox1.Text
    endwert = TextBox2.Text
    zeile = 1
    spalte = 1
    
    For n = startwert To endwert
        zahl = startwert
        Cells(zeile, spalte) = zahl
        z = 1
        
        Cells(zeile, spalte) = startwert
        startwert = 1 + startwert
       
        
    Do While zahl <> 1
        If zahl Mod 2 = 0 Then
        zahl = zahl / 2
        Else
            zahl = zahl * 3 + 1
        End If
        zeile = zeile + 1
        spalte = spalte + 1
        Cells(zeile, spalte) = zahl
    
    
        Loop
    Next n
    
    
    End Sub
    
    Private Sub cbUserform2öffnen_Click()
    UserForm2.Show
    End Sub
    

    Code für Collatz:

    Do While zahl <> 1
        If zahl Mod 2 = 0 Then
        zahl = zahl / 2
        Else
            zahl = zahl * 3 + 1
        End If
        zeile = zeile + 1
        spalte = spalte + 1
        Cells(zeile, spalte) = zahl
    
    
        Loop


    Dienstag, 17. April 2018 15:50

Antworten

  • Hi,

    ...wo soll man da anfangen...

    Also, um einen Wert per VBA in eine Zelle zu schreiben, brauchst du etwas wie:

    Worksheets("Sheet1").Cells(5, 3).Value = 14

    oder

    Sheets("Tabelle1").Range("A1").Value = 14

    Wenn du jetzt nicht weiterkommst, weiterfragen...

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Dienstag, 17. April 2018 16:59
  • Naja,....

    Ich weiß jetzt nicht, ob es sinnvoll ist sich eine Lösung für eine Aufgabe in der Schule in einem Internetforum zu holen. Da kannst du genau so gut morgen im Bus kurz bei deinen Kumpels abschreiben oder auf die Erklärung des Lehrers warten (Nachdem du es vorher zumindest selbst versucht hast).

    Folgendes sollte dir allerdings weiter helfen fall noch nicht bekannt:

    1. Im VBA-Editor kannst du druch doppelklick auf die graue Leiste Haltepunkte setzen. Die Ausführung wird an dieser Stelle angehalten, und du kannst dir die Werte in unterschiedlichen Variablen ansehen. Durch Druck auf die Playtaste geht's dann wieder weiter.

    2. Bei Rechtsklick auf eine Variable findest du im Kontexmenü den Eintrag "Überwachung hinzufügen". Der Wert der Variable ist dann während der Ausführung in einem separaten Fenster sichtbar.

    3.Nutzen von Messageboxen

    Msgbox "Hallo Welt!"  'Ausgabe von "Hallo Welt!" in Popup
    
    Msgbox test           'Ausgabe des Wertes der Variable test in Popup

    4. Wenn du über das Menü Ansicht das Direktfenster einblendest kannst du dir dort mit debug.Print Werte anzeigen lassen und sie danach analysieren:

    Sub test()
        Dim i
        For i = 0 To 10
            Debug.Print i
        Next
    End Sub


    Viel Erfolg!

    PS: Pass auf dass du keine Endlosschleifen baust. Sonst stürzt dir dein Excel ab. Am besten baust du in Schleifen zu Beginn einen Haltepunkt, bis du weißt, dass sicher beendet wird. Ist mühsehlig beim durchklicken, aber das ist das Warten auf das abstürzende Excel auch ;). Wenn du etwas mehr Erfahrung gesammelt hast, lässt du das mit dem Haltepunkt in der Schleife dann wieder weg.

    Mittwoch, 18. April 2018 06:14

Alle Antworten

  • Hi,

    ...wo soll man da anfangen...

    Also, um einen Wert per VBA in eine Zelle zu schreiben, brauchst du etwas wie:

    Worksheets("Sheet1").Cells(5, 3).Value = 14

    oder

    Sheets("Tabelle1").Range("A1").Value = 14

    Wenn du jetzt nicht weiterkommst, weiterfragen...

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Dienstag, 17. April 2018 16:59
  • Naja,....

    Ich weiß jetzt nicht, ob es sinnvoll ist sich eine Lösung für eine Aufgabe in der Schule in einem Internetforum zu holen. Da kannst du genau so gut morgen im Bus kurz bei deinen Kumpels abschreiben oder auf die Erklärung des Lehrers warten (Nachdem du es vorher zumindest selbst versucht hast).

    Folgendes sollte dir allerdings weiter helfen fall noch nicht bekannt:

    1. Im VBA-Editor kannst du druch doppelklick auf die graue Leiste Haltepunkte setzen. Die Ausführung wird an dieser Stelle angehalten, und du kannst dir die Werte in unterschiedlichen Variablen ansehen. Durch Druck auf die Playtaste geht's dann wieder weiter.

    2. Bei Rechtsklick auf eine Variable findest du im Kontexmenü den Eintrag "Überwachung hinzufügen". Der Wert der Variable ist dann während der Ausführung in einem separaten Fenster sichtbar.

    3.Nutzen von Messageboxen

    Msgbox "Hallo Welt!"  'Ausgabe von "Hallo Welt!" in Popup
    
    Msgbox test           'Ausgabe des Wertes der Variable test in Popup

    4. Wenn du über das Menü Ansicht das Direktfenster einblendest kannst du dir dort mit debug.Print Werte anzeigen lassen und sie danach analysieren:

    Sub test()
        Dim i
        For i = 0 To 10
            Debug.Print i
        Next
    End Sub


    Viel Erfolg!

    PS: Pass auf dass du keine Endlosschleifen baust. Sonst stürzt dir dein Excel ab. Am besten baust du in Schleifen zu Beginn einen Haltepunkt, bis du weißt, dass sicher beendet wird. Ist mühsehlig beim durchklicken, aber das ist das Warten auf das abstürzende Excel auch ;). Wenn du etwas mehr Erfahrung gesammelt hast, lässt du das mit dem Haltepunkt in der Schleife dann wieder weg.

    Mittwoch, 18. April 2018 06:14