Makro - Zeile löschen wenn WERT kleiner als
Moderator: Moderatoren
Makro - Zeile löschen wenn WERT kleiner als
Ich habe doch noch einmal eine Bitte und Problem, wo ihr mir sicher helfen könnt.
Nachdem ich den Code eingefügt habe sind doch noch einige Sachen und Daten aus dem Export dazu gekommen.
Den Code mit dem Area und die Schleife habe ich verstanden und mich auch noch ein bißchen mehr mit VBA auseinandergesetzt und gelesen. Echt interessant und da kann man viel machen und lernen.
Nun zu meinen Sachen, die ich gerne lösen würde. Im Anhang habe ich mal eine Beispiel-Datei gelegt, weil es damit einfacher ist.
1) Gemerkt habe ich, dass es wenig Sinn macht anhand der Fahrzeit die Zeilen zu entfernen, sondern besser wäre es anhand Kilometer (Spalte G), mit der Schleifendefinition kleiner 1.0 km. Das Feld ist jedoch definiert mit Uhrzeit - was dem Export geschuldet ist. Frage: Kann man die Spalte eigentlich auch als decimal mit einer Nachkommastelle umkonvertieren? Dann kann ich damit später besser mit Formeln agieren. Und dann eben die Schleife, dass alles kleiner 1.0 gelöscht wird.
2) Die Datei hat x Tabellenblätter. Wie kann man drum herum noch eine Schleife basteln, dass alle Datenblätter angewandt werden? Das Makro soll auf jedem Blatt greifen.
3) Die Anzahl der Zeilen die aus Punkt 1 gelöscht wurden sollen in Zelle A2 unterhalb der Überschrift mit dem Text "Anzahl der gelöschten Zeilen: [variable Anzahl]" geschrieben werden. Darunter dann eine Leerzeile.
4) Letzter Punkt - Die Zeile "Täglich gesamt:" interessiert mich überhaupt nicht. In der Beispieldatei im Anhang habe ich hier auch nur Phantasiewerte stehen. Wie kann man diese, die mehrmals je Blatt vorkommen suchen und durch eine Leerzeile ersetzen?
Hoffe ich überfordere Eure Nerven und Zeit nicht. Ihr würdet mir sehr helfen und ich bin ein gelehriger Schüler und analysiere Euren Code und werde mich verbessern - versprochen.
Vielen, vielen Dank!
Grüsse MavMan
Nachdem ich den Code eingefügt habe sind doch noch einige Sachen und Daten aus dem Export dazu gekommen.
Den Code mit dem Area und die Schleife habe ich verstanden und mich auch noch ein bißchen mehr mit VBA auseinandergesetzt und gelesen. Echt interessant und da kann man viel machen und lernen.
Nun zu meinen Sachen, die ich gerne lösen würde. Im Anhang habe ich mal eine Beispiel-Datei gelegt, weil es damit einfacher ist.
1) Gemerkt habe ich, dass es wenig Sinn macht anhand der Fahrzeit die Zeilen zu entfernen, sondern besser wäre es anhand Kilometer (Spalte G), mit der Schleifendefinition kleiner 1.0 km. Das Feld ist jedoch definiert mit Uhrzeit - was dem Export geschuldet ist. Frage: Kann man die Spalte eigentlich auch als decimal mit einer Nachkommastelle umkonvertieren? Dann kann ich damit später besser mit Formeln agieren. Und dann eben die Schleife, dass alles kleiner 1.0 gelöscht wird.
2) Die Datei hat x Tabellenblätter. Wie kann man drum herum noch eine Schleife basteln, dass alle Datenblätter angewandt werden? Das Makro soll auf jedem Blatt greifen.
3) Die Anzahl der Zeilen die aus Punkt 1 gelöscht wurden sollen in Zelle A2 unterhalb der Überschrift mit dem Text "Anzahl der gelöschten Zeilen: [variable Anzahl]" geschrieben werden. Darunter dann eine Leerzeile.
4) Letzter Punkt - Die Zeile "Täglich gesamt:" interessiert mich überhaupt nicht. In der Beispieldatei im Anhang habe ich hier auch nur Phantasiewerte stehen. Wie kann man diese, die mehrmals je Blatt vorkommen suchen und durch eine Leerzeile ersetzen?
Hoffe ich überfordere Eure Nerven und Zeit nicht. Ihr würdet mir sehr helfen und ich bin ein gelehriger Schüler und analysiere Euren Code und werde mich verbessern - versprochen.
Vielen, vielen Dank!
Grüsse MavMan
- Dateianhänge
-
- Beispiel-Tabelle.ods
- (16.14 KiB) 144-mal heruntergeladen
Re: Makro - Zeile löschen wenn WERT kleiner als
immer für ein neues Thema einen neuen Thread erstellen, siehe:
viewtopic.php?f=3&t=54568
viewtopic.php?f=3&t=54568
Re: Makro - Zeile löschen wenn WERT kleiner als
Hallo MayMan
deine km sind Text und keine Werte.
was ist denn nun richtig ?
Das siehst du ganz deutlich in G9 = 0,0 weil G5:G8 = Text
deine km sind Text und keine Werte.
was ist denn nun richtig ?
Das siehst du ganz deutlich in G9
Code: Alles auswählen
=SUMME(G5:G8)
Zuletzt geändert von clag am Di, 16.07.2019 13:08, insgesamt 1-mal geändert.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Makro - Zeile löschen wenn WERT kleiner als
ich fange mal an:
es ist jedoch nicht nötig x zu kennen oder vorzugeben, sondern man kann die Blattanzahl ermitteln lassen:
Gruß
Stephan
z.B.:1) ...
Code: Alles auswählen
Sub Main
Dim LocalSettings As New com.sun.star.lang.Locale
blatt = ThisComponent.CurrentController.ActiveSheet
cur = blatt.createCursor()
cur.GotoEndOfUsedArea(True)
letzte_zeile = cur.RangeAddress.EndRow
For i = 4 To letzte_zeile
With blatt.getCellByPosition(6, i)
.Value = .String
LocalSettings.Language = "de"
LocalSettings.Country = "DE"
nfs = ThisComponent.NumberFormats
nf = "#.###,0"
nfid = nfs.queryKey(nf, LocalSettings, True)
If nfif = - 1 Then
nfid = nfs.addNew(nf, LocalSettings)
End If
.NumberFormat = nfid
End With
Next i
End Sub
z.B.:2) ...
Code: Alles auswählen
Sub Main
For i = 0 To x-1
aktuelles_Blatt = ThisComponent.Sheets.getByIndex(i)
'... hier Dein weiterer Code
Next i
End Sub
Code: Alles auswählen
Sub Main
blattanzahl = ThisComponent.Sheets.Count
For i = 0 To blattanzahl-1
aktuelles_Blatt = ThisComponent.Sheets.getByIndex(i)
'... hier Dein weiterer Code
Next i
End Sub
Gruß
Stephan
Re: Makro - Zeile löschen wenn WERT kleiner als
Hallo MavMan,
aus allen bereits geposteten Codeschnipseln habe ich etwas hergenommen
von Stephan und mikeleb, habe noch etwas eigenes dazu gemischt
und das ganze auf Text angewendet wie in deiner Beispieltabelle vorgegeben.
Vielleicht kannst du das ja so gebrauchen?
Hier in deiner Beispieldatei per Button aufrufbar.
aus allen bereits geposteten Codeschnipseln habe ich etwas hergenommen
von Stephan und mikeleb, habe noch etwas eigenes dazu gemischt
und das ganze auf Text angewendet wie in deiner Beispieltabelle vorgegeben.
Code: Alles auswählen
Sub cleanup
blattanzahl = ThisComponent.Sheets.Count
For ix = 0 To blattanzahl-1
Blatt = ThisComponent.Sheets.getByIndex(ix)
cur = blatt.createCursor()
cur.GotoEndOfUsedArea(True)
letzte_zeile = cur.RangeAddress.EndRow
For i = letzte_zeile To 4 Step -1
If left(blatt.getCellByPosition(6, i).string, 2) = "0." Then
blatt.rows.removeByIndex(i, 1)
End If
Next i
Next ix
End Sub
Hier in deiner Beispieldatei per Button aufrufbar.
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Makro - Zeile löschen wenn WERT kleiner als
Hallo zusammen,
also ich lerne und hab das verstanden
Ich habe nun kein neues Topic erstellt, weil die Grundfragestellung ja noch nicht abschliessend gelöst ist.....hoffe das ist okay.
Habe seit gestern den Code von Stephan als Grundlage benutzt und das so zusammengebaut. Zuerst das Format wandeln und dann Aktionen darauf ausfuehren.
Punkt 4 habe ich durch den Codeschnipsel von Clag so lösen können und gelöst -> Löschen der Zeile wenn dort "Täglich gesamt steht"
Das ist der aktuelle Code:
a) Wenn ich das Makro ausführe, dann wird korrekt konvertiert von Uhrzeit nach Decimal - jedoch wenn eine Leerzeile dazwischen ist (und da sind welche) so wird diese mit einer Null "0" aufgefüllt. Wie kann man dies verhindern - also das die Zelle vorhanden und leer bleibt?
b) Punkt 1 wollte ich noch durch eine if-Schleife ergänzen, dass alle Zeilen entfernt werden, deren Wert kleiner 5 ist. Ich weiss aber nicht, wie ich die Schleife korrekt schreibe und den Value auslese.
Wenn möglich möchte ich immer noch, dass hier eine Zählvariable mitwirkt für den Punkt3 aus der Aufgabenliste...
P.S: @clag: Das ist ja geil! Du hast einen Button gemacht, der das Makro ausführen kann
also ich lerne und hab das verstanden
Ich habe nun kein neues Topic erstellt, weil die Grundfragestellung ja noch nicht abschliessend gelöst ist.....hoffe das ist okay.
Habe seit gestern den Code von Stephan als Grundlage benutzt und das so zusammengebaut. Zuerst das Format wandeln und dann Aktionen darauf ausfuehren.
Punkt 4 habe ich durch den Codeschnipsel von Clag so lösen können und gelöst -> Löschen der Zeile wenn dort "Täglich gesamt steht"
Das ist der aktuelle Code:
Code: Alles auswählen
Sub TESTCommunity
'Mit der Hilfe aus de.openoffice.info Community
'20190717 - Initiale Erstellung
blattanzahl = ThisComponent.Sheets.Count
For j = 0 To blattanzahl-1
aktuelles_Blatt = ThisComponent.Sheets.getByIndex(j)
'Start Schleifencode ueber alle Arbeitsblaetter
Dim LocalSettings As New com.sun.star.lang.Locale
'blatt = ThisComponent.CurrentController.ActiveSheet
cur = aktuelles_Blatt.createCursor()
cur.GotoEndOfUsedArea(True)
letzte_zeile = cur.RangeAddress.EndRow
For i = 4 To letzte_zeile
With aktuelles_Blatt.getCellByPosition(6, i)
.Value = .String
LocalSettings.Language = "de"
LocalSettings.Country = "DE"
nfs = ThisComponent.NumberFormats
nf = "#.###,0"
nfid = nfs.queryKey(nf, LocalSettings, True)
If nfif = - 1 Then
nfid = nfs.addNew(nf, LocalSettings)
End If
.NumberFormat = nfid
'Start - Alle kleiner als 5km - delete Zeile
'Frage: Der Cursor ist ja schon auf der richtigen Position, wie kann ich ihn direkt ansprechen? Brauche ja nur den aktuellen Value - Ich mach das hier defintiv falsch
'If aktuelles_Blatt.getCellByPosition(6, i).Value < (5.0) Then
'aktuelles_Blatt.rows.removeByIndex(i, 1)
'End If
'Ende - Alle kleiner als 5km - delete Zeile
'Start - Täglich gesamt - delete Zeile
If left(aktuelles_Blatt.getCellByPosition(0, i).string, 7) = "Täglich" Then
aktuelles_Blatt.rows.removeByIndex(i, 1)
End If
'Ende - - Täglich gesamt - delete Zeile
End With
Next i
Next j 'Ende Schleifencode ueber alle Arbeitsblaetter
MsgBox "Programmcode durchgelaufen."
End Sub
b) Punkt 1 wollte ich noch durch eine if-Schleife ergänzen, dass alle Zeilen entfernt werden, deren Wert kleiner 5 ist. Ich weiss aber nicht, wie ich die Schleife korrekt schreibe und den Value auslese.
Wenn möglich möchte ich immer noch, dass hier eine Zählvariable mitwirkt für den Punkt3 aus der Aufgabenliste...
Ich danke Euch und ich bin jetzt echt heiss darauf mehr zu lernen und machen....3) Die Anzahl der Zeilen die aus Punkt 1 gelöscht wurden sollen in Zelle A2 unterhalb der Überschrift mit dem Text "Anzahl der gelöschten Zeilen: [variable Anzahl]" geschrieben werden. Darunter dann eine Leerzeile.
P.S: @clag: Das ist ja geil! Du hast einen Button gemacht, der das Makro ausführen kann
Re: Makro - Zeile löschen wenn WERT kleiner als
Hallo MavMan,
deine intellektuelle Selbeinschätzung kennt scheinbar gar keine Höhenangst?
deine intellektuelle Selbeinschätzung kennt scheinbar gar keine Höhenangst?
dieser dein Kommentar, er lässt nur auf Fluguntauglichkeit schließen.P.S: @clag: Das ist ja geil! Du hast einen Button gemacht, der das Makro ausführen kann
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox