Office: (Office 2016) Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen

Helfe beim Thema Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Tag, folgendes Problem: Ich muss das Makro so umbauen damit es mir vor der eigentlichen Berechnung des Markos alle Werte die in Spalte... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von popoff, 20. Juni 2019.

  1. popoff User

    Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen


    Guten Tag,

    folgendes Problem:
    Ich muss das Makro so umbauen damit es mir vor der eigentlichen Berechnung des Markos alle Werte die in Spalte A-Tabelle2 stehen gelöscht werden.

    Kann mir da jmd. helfen?


    Code:
    Sub Wiederholen()
    Dim lAnzahl As String
    Dim i As Long
    Anf:
        lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)
        ' Prüfen ob eine Zahl eingegeben wurde
        If IsNumeric(lAnzahl) Then
            For i = 1 To CLng(lAnzahl)
                FormulaR1C1 = "=RANDBETWEEN(2,19)"
                    Range("AA2").Select
                With Sheets("Tabelle2")
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                End With
            Next i
        Else
            MsgBox "Bitte eine Zahl eingeben !", vbInformation
            GoTo Anf
        End If
    End Sub
    



    Ich habe bereits folgendes versucht einzufügen aber dies klappt nicht:

    Code:
        Sheets("Tabelle2").Select
        Columns("A:A").Select
        Selection.ClearContents

    Code:
    Sub Wiederholen()
        Sheets("Tabelle2").Select
        Columns("A:A").Select
        Selection.ClearContents
    Dim lAnzahl As String
    Dim i As Long
    Anf:
        lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)
        ' Prüfen ob eine Zahl eingegeben wurde
        If IsNumeric(lAnzahl) Then
            For i = 1 To CLng(lAnzahl)
                FormulaR1C1 = "=RANDBETWEEN(2,19)"
                    Range("AA2").Select
                With Sheets("Tabelle2")
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                End With
            Next i
        Else
            MsgBox "Bitte eine Zahl eingeben !", vbInformation
            GoTo Anf
        End If
    End Sub
     
    Zuletzt bearbeitet: 20. Juni 2019
    popoff, 20. Juni 2019
    #1
  2. PRichard hat Ahnung
    Hallo popoff

    Habe dein Makro kurz bei mir getestet.
    Wenn ich die entsprechenden Codezeilen zwischen der Überprüfung (If... Then) und der Schleife (For) einfüge funktioniert es.

    Ansonsten empfehle ich dir anstelle von Sheets("Tabelle2").Select wenn Tabelle2 auch wirklich das zweite Tabellenblatt ist, diese Variante zu probieren:
    Activeworkbook.Worksheets(2).Select
    --> Hat bei mir auch funktioniert.

    Grüsse
    Pascal
     
    PRichard, 21. Juni 2019
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi,

    einfach so:

    Code:
    Worksheets("Tabelle2").Columns(1).ClearContents
    Bis später,
    Karin
     
    Beverly, 21. Juni 2019
    #3
  4. Exl121150 Erfahrener User

    Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen

    Hallo,

    von deinen 3 VBA-Code-Versionen können die 1. und die 3. Version unmöglich funktionieren, während die 2. zwar sicher funktioniert, wenn auch suboptimal.

    Code:
    [COLOR="#0000CD"]Option Explicit[/COLOR]
    
    Sub Wiederholen2()
       Dim Ws2 As Worksheet
       Dim lngAnzahl As Long, strInput As String
       Dim i As Long, NextZeile As Long
       
       On Error GoTo Err_Wiederholen
          
       Set Ws2 = Worksheets("Tabelle2")
       'Inhalte der Spalte A von Arbeitsblatt "Tabelle2" entfernen:
       Ws2.Columns("A").ClearContents
       
    Anf_Wiederholen:
       strInput = InputBox(Prompt:="Wie oft soll das Makro laufen ?", Default:=3)
       'Falls keine Zahl eingegeben wurde, wird Error 13 (Typen unvertr?glich) ausgel?st
       '      und es erfolgt ein Sprung zur Marke "Err_Wiederholen"
       lngAnzahl = CLng(strInput)
       
       With Ws2
         For i = 1 To lngAnzahl
           'Speichere in Zelle "Tabelle2!AA2" die Formel "=ZUFALLSBEREICH(2;19)"
           .Range("AA2").Formula = "=RANDBETWEEN(2,19)"
           'Ermittle die Zeilennummer der n?chsten freien Zelle von Spalte "Tabelle2!A:A":
           NextZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
           'In diese freie Zelle wird der Zellinhalt von "Tabelle2!X3" gespeichert:
           .Cells(NextZeile, 1).Value = .Range("X3").Value
         Next i
       End With
       
    Exit_Wiederholen:
       Exit Sub
       
    Err_Wiederholen:
       If Err.Number = 13 Then  '= Typen unvertr?glich
          MsgBox Prompt:="Bitte eine Zahl eingeben !", Buttons:=vbInformation, Title:="Falscher Typ"
          Resume Anf_Wiederholen
       Else
          Resume Exit_Wiederholen
       End If
    End Sub
    
    Du musst unbedingt in jedem VBA-Modul als erste Zeile "Option Explicit" einfügen. Diese Zeile erspart dir beim Fehlersuchen bzw. Programmieren viel Ärger und Zeit. Was sie bewirkt, kannst du ja in jeder Menge Hilfeliteratur nachlesen.

    Da ich nicht wirklich den Sinn der ersten beiden Zeilen in der "For i / Next i"-Schleife erkennen konnte,
    FormulaR1C1 = "=RANDBETWEEN(2,19)"
    Range("AA2").Select
    habe ich eine mögliche Variante eingefügt zusammen mit Kommentar, sodass ersichtlich ist, was meine Version tut.

    Die Zeile lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 enthält im Prinzip auch einen Fehler, da der Punkt vor "Rows.Count" fehlt, denn korrekterweise muss es dort ".Rows.Count" heißen.

    Was den Ausdruck Range("X3") betrifft, habe ich angenommen, dass es sich um eine Zelle des Arbeitsblattes "Tabelle2" handeln sollte - was immer dort auch gespeichert sein mag.
     
    Exl121150, 21. Juni 2019
    #4
  5. popoff User
    Danke für die Hilfe. Allerdings funktioniert dein Code nicht richtig. Da mir das Makro nicht die Werte in Tabelle2 hineinspeichert.
    Dies ist eben wichtig für meine Berechnung.

    Mit dem Code von Beverly funktioniert die ganze Sache:

    Code:
    Sub Wiederholen()
    Worksheets("Tabelle2").Columns(1).ClearContents
    Dim lAnzahl As String
    Dim i As Long
    Anf:
        lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)
        ' Prüfen ob eine Zahl eingegeben wurde
        If IsNumeric(lAnzahl) Then
            For i = 1 To CLng(lAnzahl)
                FormulaR1C1 = "=RANDBETWEEN(2,19)"
                    Range("AA2").Select
                With Sheets("Tabelle2")
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                End With
            Next i
        Else
            MsgBox "Bitte eine Zahl eingeben !", vbInformation
            GoTo Anf
        End If
    End Sub

    Das Ziel meiner Berechnung ist aus einer gewissen Anzahl an Aktien ein zufällig erstelltes Portfolio zu erstellen.

    Also ich gebe die Zahl 5 ein (und 1000 wiederholungen), dann Berechnet mir das Makro aus diesen 5 Aktien 1000 verschiedene Portfolios.

    Und die annualisierte Rendite in Tabelle1 ZelleX3 wird dann jeweils in Tabelle2 hineinkopiert.

    Was mir jetzt noch fehlt ist die Eingabe der Aktien. Dieser Wert sollte mir das Makro nach der Eingabe immer in Zelle AC4 hineinkopieren.

    Mir schwebt da in so etwas vor, allerdings mache ich hier irgendeinen Fehler:

    Code:
    Sub Wiederholen()
    Worksheets("Tabelle2").Columns(1).ClearContents
    Dim sTxt As String
       sTxt = InputBox("Bitte die Anzahl der Aktien eingeben:")
       
       If sTxt = "" Then Exit Sub
       'MsgBox sTxt
       sTxt = Value.Range("AC4")
    Dim lAnzahl As String
    Dim i As Long
    Anf:
        lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)
        ' Prüfen ob eine Zahl eingegeben wurde
        If IsNumeric(lAnzahl) Then
            For i = 1 To CLng(lAnzahl)
                FormulaR1C1 = "=RANDBETWEEN(2,19)"
                    Range("AA2").Select
                With Sheets("Tabelle2")
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                End With
            Next i
        Else
            MsgBox "Bitte eine Zahl eingeben !", vbInformation
            GoTo Anf
        End If
    End Sub
    
     
    Zuletzt bearbeitet: 21. Juni 2019
    popoff, 21. Juni 2019
    #5
  6. Beverly
    Beverly Erfahrener User
    Hi,

    verstehe ich das richtig: die Eingabe in der InputBox soll in AC4 ausgegeben werden? In AC4 steht jedoch eine Formel, die sich auf Z1 bezieht, also müsste der Wert in Z1 und nicht in AC4 eingetragen werden

    Code:
    Sub Wiederholen()
        Dim lAnzahl As Long
        Dim i As Long
        lAnzahl = Application.InputBox("Wie oft soll das Makro laufen?", , Range("Z1").Value, , , , , 1) '<== lässt nur Zahleneingaben zu
        ' Prüfen ob eine Zahl eingegeben wurde
        If lAnzahl > 0 Then
            Range("Z1") = lAnzahl
            With Worksheets("Tabelle2")
                .Columns(1).ClearContents
                For i = 1 To lAnzahl
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                Next i
            End With
        End If
    End Sub
    
    
    
    Bis später
    Karin
     
    Zuletzt bearbeitet: 21. Juni 2019
    Beverly, 21. Juni 2019
    #6
  7. popoff User
    Ja stimmt, mein Fehler. Der Wert sollte in Z1 geschrieben werden.

    Aber es sollte zweimal eine Abfrage kommen.
    1. Wieviele Aktien sollen kombiniert werden => Eingabe z.b 5 => Dieser Wert muss in Zelle Z1 kopiert werden.
    2te Abfrage: Wie oft soll das Makro laufen. z.b 500. Dann wiederholt sich das Makro 500 mal.

    Bei deinem Code oben kommt eben nur eine Abfrage. Wie oft soll das Makro laufen.
     
    popoff, 22. Juni 2019
    #7
  8. Beverly
    Beverly Erfahrener User

    Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen

    Dass 2 getrennte Abfragen sein sollen habe ich deinen anderen Beiträgen nicht entnehmen können.
    Wenn du 2 Abfragen brauchst musst du auch 2 getrennte InputBoxen verwenden. Oder du verwendest gleich ein UserForm mit 2 TextBoxen - eine für die Anzahl der Kombinationen und eine für die Anzahl der Durchläufe.

    Übrigens: du musst den vorhergehenden Beitrag in deiner Antwort nicht zitieren, denn man sieht ja alle Beiträge.

    Bis später,
    Karin
     
    Beverly, 22. Juni 2019
    #8
  9. popoff User
    Ah ok danke.

    Ich bin nicht so tief in der VBA programmierung drinnen.

    Für mich reicht da der obige Code auch aus. Es müssen nicht unbedingt zwei Abfragen (Textbox) sein. :)
     
    popoff, 25. Juni 2019
    #9
  10. Beverly
    Beverly Erfahrener User
    Was denn nun: ich denke du brauchst 2 Abfragen: eine für die Anzahl der Aktien und eine für die Anzahl der Durchläufe? Der obige Code hat eben nur 1 Abfrage, also kann er nicht ausreichend sein - oder verstehe ich da was falsch?

    Bis später,
    Karin
     
    Beverly, 25. Juni 2019
    #10
  11. popoff User
    Ja das schon, ich weiß aber nicht wie ich die beiden Eingaben in VBA richtig zuordnen kann.

    Ich habe so was probiert:
    Code:
    Sub Wiederholen()
    Worksheets("Tabelle2").Columns(1).ClearContents
    Dim lAnzahl As String
    Dim i As Long
    Anf:
    lAnzahl = Application.InputBox("Wieviele Aktien sollen kombiniert werden?", , Range("Z1").Value, , , , , 1) '<== lässt nur Zahleneingaben zu
            Range("Z1") = lAnzahl
        lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)
        ' Prüfen ob eine Zahl eingegeben wurde
        If IsNumeric(lAnzahl) Then
            For i = 1 To CLng(lAnzahl)
                FormulaR1C1 = "=RANDBETWEEN(2,19)"
                    Range("AA2").Select
                With Sheets("Tabelle2")
                    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lastRow, 1) = Range("X3")
                End With
            Next i
        Else
            MsgBox "Bitte eine Zahl eingeben !", vbInformation
            GoTo Anf
        End If
    End Sub
    
    Es kommt hier auch zweimal eine Abfrage allerdigs wiederholt sich das Makro hier nicht. (Nach der eingegebenen Zahl)
     
    Zuletzt bearbeitet: 25. Juni 2019
    popoff, 25. Juni 2019
    #11
  12. Beverly
    Beverly Erfahrener User
    Wie ich schon geschrieben hatte: du brauchst 2 getrennte Abfragen wenn du kein Userform mit 2 TextBoxen verwenden willst:

    Code:
    Sub Wiederholen()
        Dim lAnzahl As Long
        Dim lngAktien As Long
        Dim i As Long
        lngAktien = Application.InputBox("Wieviele Aktien sollen kombiniert werden?", , Range("Z1").Value, , , , , 1)
        If lngAktien > 0 Then
            lAnzahl = Application.InputBox("Wie oft soll das Makro laufen?", , 1, , , , , 1)
            If lAnzahl > 0 Then
                Range("Z1") = lngAktien
                With Worksheets("Tabelle2")
                    .Columns(1).ClearContents
                    For i = 1 To lAnzahl
                        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                        .Cells(lastRow, 1) = Range("X3")
                    Next i
                End With
            End If
        End If
    End Sub
    
    

    Bis später,
    Karin
     
    Beverly, 25. Juni 2019
    #12
  13. popoff User

    Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen

    Ah perfekt. Jetzt klappt es.

    Ein Problem was mir ausgefallen ist:
    In den Spalten AA:AS wird ja mit dem Befehl
    Code:
    ZUFALLSBEREICH(2;19)
    Zufallszahlen von 2-19 generiert.
    Habe aber gemerkt dass sich hier die Zahlen oftmals wiederholen. Ich muss das Problem lösen damit sich keine Zahl zweimal vorkommt.

    Habe diese Lösung mit einer Hilfsspalte gelöst:

    Zelle AA1 :
    Code:
    =RANG(AA2;$AA$2:$AS$2)
    ZelleAA2 :
    Code:
    =ZUFALLSZAHL()
    Nur habe ich das Problem dass die Zahl 1 nicht vorkommen sollte. Es sollten nur Zahlen von 2-19 angezeigt werden.
    Hast du da einen Lösungsansatz?
     
    Zuletzt bearbeitet: 26. Juni 2019
    popoff, 26. Juni 2019
    #13
  14. Beverly
    Beverly Erfahrener User
    Dieses Formelproblem hat ja nichts mit dem anderen Problem in diesem Thread zu tun, deshalb solltest du dafür einen neuen Thread eröffnen.

    Bis später,
    Karin
     
    Beverly, 26. Juni 2019
    #14
Thema:

Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen

Die Seite wird geladen...
  1. Vor Start des Makros alle Werte in Spalte A Tabelle2 löschen - Similar Threads - Start Makros Werte

  2. Makro aus personal.xls starten

    in Microsoft Excel Hilfe
    Makro aus personal.xls starten: Auf einem Arbeitsblatt habe ich mehrere Buttons. Die zugehörigen Makros sind in personal.xls gespeichert. Aus dem Code-Editor heraus kann ich die Makros ohne Problem starten. auf dem Arbeitsblatt...
  3. Workbook ohne Makros starten

    in Microsoft Excel Hilfe
    Workbook ohne Makros starten: Moin allerseits, wer das Thema liest, wird sich sicher fragen "und so etwas wird hier wieder aufgewärmt? Ist doch tausendfach im Netz beantwortet!?" Stimmt, denn der Tipp mit der...
  4. Excel Registrierkarte Start Pfeil Rahmen

    in Microsoft Excel Hilfe
    Excel Registrierkarte Start Pfeil Rahmen: Hallo bei mir löst der Mauspfeilklick auf zB den Pfeil neben dem Rahmenbutton kein öffnen des Rahmenfensters aus .. gleiches bei unterstreichen, bedingte Formatierung u.a. Es geht jedoch bei als...
  5. Drucken nur wenn Zelle Wert hat / Automatisches Löschen der Zelle beim Start

    in Microsoft Excel Hilfe
    Drucken nur wenn Zelle Wert hat / Automatisches Löschen der Zelle beim Start: Hallo Zusammen, ich - VBA-Nullnummer - habe mal wieder etwas für die VBA-Profis. Es soll nur gedruckt werden können, wenn in einer Zelle ein Wert ist. Die Zelle ist zusammengeführt, G2:H4. Die...
  6. Nettotage aus Start- und Enddatum pro Monat berechnen

    in Microsoft Excel Hilfe
    Nettotage aus Start- und Enddatum pro Monat berechnen: Hallo, ich habe ein Sheet mit drei Tabellen. Die erste errechnet mittel Start- und Enddatum die Nettoarbeitstage, in der zweiten sind die Freien Tage eingetragen und die dritte Tabelle sind die...
  7. Aufzeichnen eines Makros zum Öffnen bestimmter Arbeitsmappen beim Start von Excel

    in Microsoft Excel Tutorials
    Aufzeichnen eines Makros zum Öffnen bestimmter Arbeitsmappen beim Start von Excel: Aufzeichnen eines Makros zum Öffnen bestimmter Arbeitsmappen beim Start von Excel Excel 2013 Mehr... Weniger...
  8. EXCEL VBA: Mehrere Makros starten mit IF-Anweisung

    in Microsoft Excel Hilfe
    EXCEL VBA: Mehrere Makros starten mit IF-Anweisung: Hallo, wie der Titel schon sagt, ich habe einen Hauptmakro wo mehrere Makros nacheinander ausgeführt werden. z.B.: Call Makro 1 Call Makro 2 Call Makro 3 ... Makro 10. Ich möchte...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden