ecart Geschrieben April 23, 2017 Geschrieben April 23, 2017 Hallo ich benötige Hilfe bei folgendem Problem Mit dem VBA Befehl For i = 1 TO 300 jetzt folgt mein kleines Programm Next i D.h jetzt läuft mein Programm 300 * durch. mein Wunsch wenn in Zelle g30 ein negativer Wert erscheint( wird durch eine Formel errechnet) soll das Programm stoppen. Wer kann mir da helfen ? Vielen Dank Ecart
EinsDaneben Geschrieben April 23, 2017 Geschrieben April 23, 2017 (bearbeitet) Zelle abfragen geht so: cells(zeile,spalte) Für dein Beispiel zeile=30, spalte=7 'raus aus der for ... next schleife for i=1 to 300 'deine zeilen if cells(30,7)<0 then exit for next oder raus aus der private sub prozedur for i=1 to 300 'deine zeilen if cells(30,7)<0 then exit sub 'ende der prozedur next oder raus aus der function for i=1 to 300 'deine zeilen if cells(30,7)<0 then exit function 'ende der function next EinsDaneben bearbeitet April 23, 2017 von EinsDaneben
ecart Geschrieben April 23, 2017 Autor Geschrieben April 23, 2017 EinsDaneben Vielen,vielen Dank ! Perfekt Liebe Grüße Ecart
ecart Geschrieben Juni 18, 2018 Autor Geschrieben Juni 18, 2018 Hallo , ich bräuchte noch einmal Hilfe bei VBa. Eine Formel errechnet ein Ergebnis (z.B in "g10" erfolgt die Ausgabe). Meistens aber kommt es zu keinem Ergebnis. Dann steht in G10 nichts.Ich möchte jetzt, enn es zu einem Ergebnis kommt,dass das Ergebnis automatisch in einer Spalte abgespeichert wird. Die Leerzeilen sollen übergangen werden. Kann jemand helfen ? Vielen Dank Ecart
Egoist Geschrieben Juni 18, 2018 Geschrieben Juni 18, 2018 Moin ecart, Du brauchst vermutlich eine globale Variable, die die nächste zu beschreibende Zeilennummer enthält. Nur wenn Deine Funktion ein festzuhaltendes Ergebnis erzeugt hat, zählst Du die globale Variable um 1 hoch. Wenn Du was anderes wolltest, schneide mal Dein Codeschnipselhier herein. Gruss vom Ego
PsyFon Geschrieben Juni 19, 2018 Geschrieben Juni 19, 2018 Public zeile as integer zeile=1 if cells(30,7) <> EMPTY then cells(zeile, 8)=cells(30,7) zeile=zeile+1 endif
elementaar Geschrieben Juni 19, 2018 Geschrieben Juni 19, 2018 (bearbeitet) Hallo ecart, ich verstehe Deine Anfrage so, daß, falls es ein Ergebnis gibt, dieses in eine Extraergebnisspalte eingetragen werden soll. Falls dies so sein sollte, geht mein Beispiel von Spalte "Z11:Z10010" für diese Ergebnisse aus. In Zelle "Z10" wird die Anzahl der schon vorhandenen Ergebnisse gezählt mit (in Zelle "Z10" eintragen): =Anzahl(Z11:Z10010) Das Makro geht dann so: ====== Sub Neues_Ergebnis_eintragen() 'Tabellenblattname von "ecart" zu Deinem Blattnamen ändern! Sheets("ecart").Select Dim VarErg As Object Set VarErg = Range("G10") Dim VarAnzahlErg As Object Set VarAnzahlErg = Range("Z10") If VarErg = "" then goto z else Range("Z11").Select ActiveCell.Range("A1").Offset(VarAnzahlErg, 0).Select ActiveCell = VarErg.Value end if ActiveWorkbook.Save z: End Sub ====== Gruß elementaar bearbeitet Juni 19, 2018 von elementaar Leerzeile hinzugefügt
ecart Geschrieben Juni 19, 2018 Autor Geschrieben Juni 19, 2018 Hi vielen Dank erstmal für die Rückmeldungen. Werde versuchen die Programme zum Laufen zu bringen.Gebe dann Bericht. Ecart
ecart Geschrieben Juni 19, 2018 Autor Geschrieben Juni 19, 2018 Hallo , hab ich mir schon gedacht, dass ich das nicht hin bekomme. so sieht mein Makro aus : For i = 1 To 11500 ...... Die Permanenz wird jeweils um eine Zahl verschoben Range("A3:A11500").Select Selection.Copy Range("A2").Select ActiveSheet.Paste ActiveWindow.SmallScroll Down:=378 Range("A2").Select If Cells(21, 3) = 10 Then Exit Sub ... hier bleibt das Programm stehen und das Ergebnis muss ich dann händisch aufschreiben If Cells(21, 10) = 10 Then Exit Sub .... siehe oben If Cells(1, 3) = 0 Then Exit Sub .... hier ist die Monatspermanenz auf Null Next End Sub Mein Wunsch wäre, dass das Programm nicht stoppt,sondern nur die beiden Ergebnisse in 2 Spalten wegschreibt. Vielleicht kann mir jemand helfen ? Vielen Dank Ecart
EinsDaneben Geschrieben Juni 20, 2018 Geschrieben Juni 20, 2018 (bearbeitet) Hallo ecart, hab das nur für den Fall, daß in Spalte 3 in irgendeiner Zeile zwischen 1 und 11500 eine 10 steht, gemacht. Mußt du für die anderen Bedingungen ergänzen. In der For ... Next Schleife durchläuft das Programm die Permanenz. Steht in Spalte 3 eine 10, dann wird diese in Spalte 10 immer in die nächste leere Zeile geschrieben. Sollten alledings tausende von Werten in die Rapporteurspalte geschrieben werden, wäre die Zwischenspeicherung der letzten Zeile besser, da die Do While Schleife verlangsamt. Code: Dim z, NaechsteZeile, IrgendeineSpalte As Integer IrgendeineSpalte = 10 '.......Spalte Rapporteur Columns(IrgendeineSpalte).Select ' .......Spalte Rapporteur leeren Selection.ClearContents For z = 1 To 11500 '...... Durchlaufen der Permanenz If Cells(z, 3) = 10 Then NaechsteZeile = 1 Do While CStr(Cells(NaechsteZeile, IrgendeineSpalte)) <> "" NaechsteZeile = NaechsteZeile + 1 Loop Cells(NaechsteZeile, IrgendeineSpalte) = Cells(z, 3) 'Eintragen des Wertes in Spalte 10 End If Next oder so müßte es auch gehen: Dim z, NaechsteZeile, IrgendeineSpalte As Integer IrgendeineSpalte = 10 '.......Spalte Rapporteur Columns(IrgendeineSpalte).Select ' .......Spalte Rapporteur leeren Selection.ClearContents For z = 1 To 11500 '...... Durchlaufen der Permanenz If Cells(z, 3) = 10 Then NaechsteZeile = ActiveSheet.Cells(Rows.Count, IrgendeineSpalte).End(xlUp).Row + 1 'letzte Zeile um eins hochzaehlen Cells(NaechsteZeile, IrgendeineSpalte) = Cells(z, 3) 'Eintragen des Wertes in Spalte 10 End If Next EinsDaneben bearbeitet Juni 20, 2018 von EinsDaneben
ecart Geschrieben Juni 20, 2018 Autor Geschrieben Juni 20, 2018 Hallo EinsDaneben, vielen Dank für die beiden Makros.Leider habe ich nur sehr geringe VBA Kenntnisse. Deswegen meine "komischen " Fragen: 1.Du schreibst "irgendeine Spalte", wie definiere ich die? 2."Nächste Zeile" ist das schon ein Befehl? oder nur ein Hinweis? 3.Bei dem Befehl "Row +1 verschwindet das + automatisch sorry nochmal ,vielleicht hast du ja noch mal Zeit zum Antworten. Gruß Ecart PS. wozu das ganze ?Ich werte das alte Pauffler System Labyrinth aus .Habe jetzt 9 Monate durch ca 63000 Coups + 275 ST. Ist aber kein Spiel zum Geld verdienen ,da nur ca alle 130 Coups ein Angriff stattfindet!
EinsDaneben Geschrieben Juni 20, 2018 Geschrieben Juni 20, 2018 (bearbeitet) Hallo ecart, betrachten wir diesen Code. vor 13 Stunden schrieb EinsDaneben: Dim z, NaechsteZeile, IrgendeineSpalte As Integer IrgendeineSpalte = 10 '.......Spalte Rapporteur Columns(IrgendeineSpalte).Select ' .......Spalte Rapporteur leeren Selection.ClearContents For z = 1 To 11500 '...... Durchlaufen der Permanenz If Cells(z, 3) = 10 Then NaechsteZeile = ActiveSheet.Cells(Rows.Count, IrgendeineSpalte).End(xlUp).Row + 1 'letzte Zeile um eins hochzaehlen Cells(NaechsteZeile, IrgendeineSpalte) = Cells(z, 3) 'Eintragen des Wertes in Spalte 10 End If Next gleich am Anfang in Zeile 2 fülle ich die Variable 'irgendeinespalte' mit einem Wert. IrgendeineSpalte = 10 Dies bedeutet es wird in die Zellen unter der Spalte J geschrieben, da J der 10. Buchstabe im Alphabet ist. Du kannst aber auch einen anderen Wert für 'irgendeinespalte' nehmen. 8 stünde für Spalte H, 4 für D, 13 für M usw. Jenachdem in welcher Spalte du deine Werte später sammeln willst. NaechsteZeile = ActiveSheet.Cells(Rows.Count, IrgendeineSpalte).End(xlUp).Row + 1 Weil oben die Variable IrgendeineSpalte = 10 zugewiesen wurde, wird mit dieser Anweisung die unterste Zelle in Spalte J (=10. Spalte) mit einem Inhalt drin gesucht. Das macht Excel indem es von ganz unten nach oben die Spalte durchsucht, bis es auf eine Zelle trifft, wo etwas drin steht. Diese Zeile plus 1 wird dann der Inhalt der Variable 'NaechsteZeile', in die du ja was in der Spalte 'IrgendeineSpalte' reinschreiben willst. Warum das + verschwindet ist mir auch schleierhaft. Könntest das + 1 auch löschen und in der Zeile drunter Folgendes einfügen: NaechsteZeile = NaechsteZeile + 1 Vielleicht klappt das ja. Welche Excel Version benutzt du? Paufler sagt mir was, Methode Labyrinth nix. EinsDaneben bearbeitet Juni 20, 2018 von EinsDaneben
ecart Geschrieben Juni 22, 2018 Autor Geschrieben Juni 22, 2018 Hallo Einsdaneben, leider krieg ich das nicht hin , so sieht das jetzt bei mir aus : Dim z, naechsteZeile, IrgendeinSpalte As Integer IrgendeineSpalte = 14 ...... hier sagt er außerhalb einer Prozedur ungültig Columns(IrgendeineSpalte).Select Selection.ClearContens For z = 1 To 11500 If Cells(z, 3) = 14 Then naechsteZeile = 1 Do While CStr(Cells(naechsteZeile, IrgendeineSpalte)) <> "" naechsteZeile = NaecchsteZeile + 1 Loop Cells(naechsteZeile, IrgendeineSpalte) = Cells(z, 3) End If Next Vielleicht kannst du ja noch einmal einen Blick darauf werfen. Vielen Dank Ecart
EinsDaneben Geschrieben Juni 22, 2018 Geschrieben Juni 22, 2018 Hallo ecart, habe wohl zuviel vorausgesetzt. Ich bin davon ausgegangen, daß du die Zeilen in eine vorhandene Prozedur oder Funktion kopierst und anpaßt. Aber, zunächst solltest du mir mitteilen, welche Excel Version du benutzt. EinsDaneben
ecart Geschrieben Juni 22, 2018 Autor Geschrieben Juni 22, 2018 Hallo Einsdaneben, excel 2010 und ja, habe wirklich kaum(keine) Kenntnisse.. Beste Grüße Ecart
EinsDaneben Geschrieben Juni 23, 2018 Geschrieben Juni 23, 2018 (bearbeitet) Hallo Ecart, habe jetzt ein Beispiel gemacht, dessen Datei ich anhänge. In diesem Beispiel befindet sich ein Knopf mit der Aufschrift 'Auswertung starten'. Beim Drücken des Knopfes werden die 10Tsd. Coups in Spalte C ab Zeile 10 auf das Erscheinen der Zahl 17 hin untersucht. Die 17 habe ich willkürlich für dieses Beispiel ausgesucht. Immer wenn eine 17 in Spalte C in einer Zeile steht wird die Coup-Nr. in der Rapporteurspalte H in der nächsten Zeile drunter in die Zelle geschrieben. Du könntest deine Permanenz mit den Spalten der Auswertungen anstatt der zufälligen Permanenz in Spalte C, ab Zeile 10 einkopieren. Um an den Code zu kommen, der bein Drücken ausgeführt wird, mußt du die ALT-Taste gedrückt halten und 1x auf die Taste F11 drücken. Danach beide loslassen. Es sollte dann das hier zu sehen sein: Die Erzeugung der Zufallszahlen habe ich bereits auskommentiert. Die AnzahlCoups, die Rapporteurspalte und die Anfangszeile mußt du für deine Permanenz im Code anpassen. Gruß EinsDaneben Beispiel.xlsm bearbeitet Juni 23, 2018 von EinsDaneben
ecart Geschrieben Juni 24, 2018 Autor Geschrieben Juni 24, 2018 hallo EinsDaneben, Wow, vielen Dank für die Mühe und Geduld. Ich glaube,dass ich das jetzt alles verstanden habe und in mein Programm einbauen kann. Allein die Geschwindigkeit ist beeindruckend. Ich werde noch einmal berichten wie es gelaufen ist. Dir einen schönen Sonntag. Beste Grüße Ecart
Recommended Posts
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden