Suche Wert in Spalte, lösche Zeile

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Suche Wert in Spalte, lösche Zeile

Re: Suche Wert in Spalte, lösche Zeile

von Karolus » Fr, 08.02.2013 09:50

Hallo
Das ist ein gutes Beispiel wie man es nicht machen sollte

Zuerst definierst du das Tabellenblatt fix über den Index.
Dann blendest du zunächst nur die Zeilen aus für die deine Bedingung zutrifft

Jetzt beginnst du nochmal von vorne mit neuen Variablenzuweisungen ( völlig sinnfrei )
im Falle von ...ActiveSheet wechselst du uU. sogar das Tabellenblatt !!! ( →evtl. Datenverlust )

um danach nochmal über die Bedingung 'not Row.isvisible' die Zeilen tatsächlich zu löschen.
umständlicher gehts nicht

Überarbeitet:

Code: Alles auswählen

Sub LOESCHEN


Dok = ThisComponent
sheet = Dok.CurrentSelection.Spreadsheet
startrow = 20


refstring = sheet.getCellByPosition(3,0).String 'inhalt aus D1

Cursor = sheet.createCursor()
Cursor.goToEndOfUsedArea(false)
endrow = Cursor.getRangeAddress().Endrow
if startrow >= endrow then exit sub 'Vermeidung einer Endlosschleife

For rowindex = endrow to startrow step -1 'rückwärts iterieren

If sheet.getCellByPosition(0, rowindex ).String = refstring then
    sheet.rows.removeByIndex( rowindex, 1)
endif
next

msgbox ("Offerte - " & refString & " - wurde gelöscht")

end sub
Edit: Bernd war schneller

Re: Suche Wert in Spalte, lösche Zeile

von bst » Fr, 08.02.2013 09:39

Auch Hallo,

löschen solltest Du M.E. von Unten nach Oben. Auch kannst Du Dir das Markieren via 'Visible' sparen.

Oder greifst Du da etwa auf zwei unterschiedliche Blätter zu??

cu, Bernd
--

Code: Alles auswählen

Option Explicit

Sub Main
	dim oSheet, oUsedCells, iMax As Integer, i As Integer, sSearch as String

	oSheet = ThisComponent.currentController.ActiveSheet
	oUsedCells = oSheet.Columns(0).queryContentCells(23)
	iMax = oUsedCells.RangeAddresses(oUsedCells.Count-1).endRow

	sSearch = oSheet.getCellRangeByName("C4").String
	for i = iMax To 0 Step -1
		if oSheet.getCellByPosition(0,i).String = sSearch then
			oSheet.getRows.removeByIndex(i,1)
		endif
	next
End Sub

Re: Suche Wert in Spalte, lösche Zeile

von juetho » Fr, 08.02.2013 09:12

Nur zwei kleine Anmerkungen.

Elemente, die mehrfach verwendet werden, sollten als eigene Variable deklariert werden. Das gilt dafür:

Code: Alles auswählen

DIM oSheet AS Object
oSheet = thisComponent.Sheets.GetByName("Offerten")
Der folgende Abschnitt ist in zweifacher Hinsicht "schlecht" definiert:
finger12 hat geschrieben:

Code: Alles auswählen

     If ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = False Then
       ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = True
     Else
       ThisComponent.Sheets.GetByName("Offerten").Rows(x).isVisible = False
     End if
Statt "if = false" ist besser "if not" zu schreiben. Warum sollte ein logischer Wert erst noch verglichen werden, wenn sowieso dieser Wert genommen wird? Aber es geht sowieso einfacher und kürzer (unter Berücksichtigung der ersten Anmerkung):

Code: Alles auswählen

oSheet.Rows(x).isVisible = NOT oSheet.Rows(x).isVisible
Wenn ein logischer Wert "umgekehrt" werden soll, ist das immer das sinnvollste Verfahren.

Gruß Jürgen

Re: Suche Wert in Spalte, lösche Zeile

von lorbass » Do, 07.02.2013 17:25

finger12 hat geschrieben:Hab mir was zusammengeschuster was funktionert
Lässt du uns und zukünftige Leser an deiner Schuster-Lösung teilhaben?

Gruß
lorbass

Re: Suche Wert in Spalte, lösche Zeile

von Karolus » Mi, 06.02.2013 17:19

Hallo
finger12 hat geschrieben:Danke Karolus

Suche dennoch nach einem Makro, zwecks weiterführender Makros.
http://www.dannenhoefer.de/faqstarbasic/index.html

Karolus

Re: Suche Wert in Spalte, lösche Zeile

von Karolus » Mi, 06.02.2013 16:56

Hallo
'Stosse' besser auf →Daten→Filter→Standardfilter:
SpalteA <> <trag hier den Inhalt aus C4 ein

mit [x]Ausgabe <in andere Tabelle.A1>
drück die OK-taste und entferne die Ausgangstabelle

____
Warum werden hier eigentlich ständig Übersetzunghelfer für VBA-krimskrams gesucht - obwohl die Aufgabenstellung in einer Minute mit den 'Bordmitteln' jeder Tabellenkalkulation lösbar ist??

Nach oben