Zeile einer Zelle unter Abhängigkeit des Inhalts ermitteln

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

LeverAction
*
Beiträge: 17
Registriert: Di, 05.12.2006 22:26
Wohnort: Schiffdorf

Zeile einer Zelle unter Abhängigkeit des Inhalts ermitteln

Beitrag von LeverAction »

Hallo,
ich bin Neu-Umsteiger von Excel und baue gerade eine Datei um, allerdings bekomme ich folgende Funktionalität nicht hin:
Ich habe eine Auflistung von Kosten für ein Mietshaus, und gewisse Positionen kann ich auf die Mieter umlegen. Für die Abrechnung habe ich in der letzten Spalte einfach Pos1 bis Pos8 diesen Positionen entsprechend zugeordnet und dann wurden die Zeilen per Makro für die Abrechnung in die Tabellen der Mieter kopiert.
Wie kann ich in Calc die Zeile bestimmen in der ein bestimmter Text steht, wie z.B. Pos4?
Vielen Dank schon mal.
Gruß
Matthias
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Wie kann ich in Calc die Zeile bestimmen in der ein bestimmter Text steht, wie z.B. Pos4?


Wenn der Name des Tabelenblattes, auf dem gesucht werden soll, "Tabelle1" wäre, dann beispielsweise so:

Code: Alles auswählen

sub Zelle_suchen()
oSheet = ThisComponent.Sheets("Tabelle1")
oCellCursor = oSheet.createCursor() 
oCellCursor.GotoEndOfUsedArea(True) 
k = 0
For i = 0 to oCellCursor.getRangeAddress.EndColumn
	For j = 0 to oCellCursor.getRangeAddress.EndRow
		If oSheet.getCellByPosition(i, j).String = "Pos4" Then
			k = 1
			Exit For
		End if
	Next j
	If k = 1 Then
		Exit For
	End If
Next i
Msgbox "Wert gefunden, Zeile ist " & j+1
end sub
Es würde die Suche jedoch u.U. erheblich beschleunigen wenn die konkrete Spalte bekannt wäre, da obenstehendes Makro alle Spalten im 'Inhaltsbereich' durchsucht, was relativ lange dauert wenn dieser viele Zellen umfasst.




Gruß
Stephan
LeverAction
*
Beiträge: 17
Registriert: Di, 05.12.2006 22:26
Wohnort: Schiffdorf

Wie kann ich in Calc die Zeile bestimmen in der ein bestimmt

Beitrag von LeverAction »

Hallo Stephan,
Danke für die schnelle Antwort.
Ich hätte allerdings mein Vorhaben etwas detaillierter Beschreiben können, sorry!
Ja, der Bereich der durchsucht werden soll beschränkt sich auf eine bestimmte Spalte, von diesen auch nur ca 50 bis 60 Zeilen. Die "Range" kann also klar definiert werden.
In Excel sah es so aus:

Code: Alles auswählen

With Worksheets("Aufwendungen").Range("F2:F256")
        Set C = .Find(Pos(p), LookIn:=xlValues)
        If Not C Is Nothing Then
            firstAddress = C.Address
            Zeile = Range(firstAddress).Row
        Else
            Message = "Wert " & Pos(p) & " kann nicht gefunden werden"
            MsgBox (Message)
            End
        End If
    End With
Etwas vergleichbares wie das LookIn gibt es wohl in StarBasic nicht, oder?

Gruß
Matthias
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Etwas vergleichbares wie das LookIn gibt es wohl in StarBasic nicht, oder?
Das wäre doch wohl ziemlich unwahrscheinlich, wie sollte sonst eine Unterscheidung was gesucht wird innerhalb der Suche stattfinden?

Das Äquivalent zu LookIn ist die Eigenschaft SearchType des Such-Descriptors (com.sun.star.util.SearchDescriptor)

Code: Alles auswählen

Sub suchen
bereich = ThisComponent.Sheets("Tabelle1").getCellRangeByName("F2:F256")
suche = bereich.createSearchDescriptor()
With suche
	.SearchString = "Pos4"
	.SearchType = 1 '0=Formel; 1=Wert; 2=Notiz
	.SearchWords = True
	C = bereich.findFirst(suche)
	If Not IsNull(C) Then 
			firstAddress = C.getCellAddress
			Zeile = firstAddress.Row 
		Else 
			Message = "Wert " & suche.SearchString & " kann nicht gefunden werden" 
			MsgBox (Message) 
			End 
	End If 
End With
End Sub


Gruß
Stephan
LeverAction
*
Beiträge: 17
Registriert: Di, 05.12.2006 22:26
Wohnort: Schiffdorf

Merci

Beitrag von LeverAction »

Hallo Stephan,
ich bin im Moment etwas sprachlos, zum Einen weil ich mich über die Uhrzeit gewundert habe, wann Du meine erste Anfrage beantwortet hast und zum Anderen über die perfekte Lösung, die Du mir so aus dem Ärmel schüttelst.
Habe es gerade eingebaut und es funktioniert, DANKE. :D
Die kleine Hilfe, welche ich mir zusammengefummelt habe, reicht für eine einfache Nebenkostenabrechnung, solange kein Mieterwechsel stattgefunden hat. Die Erweiterung dafür ist nun meine nächste Herausforderung, gut das die Abende im Moment etwas länger sind. Ja, es gibt zwar fertige Software, aber die platzt meistens vor lauter "Features", und außerdem trainiert man damit nicht seine grauen Zellen.
Also, noch einmal recht herzlichen Dank und schöne Festtage und...
Gruß
Matthias
Antworten