Funktion Zellbereich übergeben

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Funktion Zellbereich übergeben

Beitrag von Shirkan »

Liebe Leute,
kann mir jemand einen Tipp geben wie ich einer benutzerdefinierten Funktion am geschicktesten einen Zellbereich übergebe und ich diesen innerhalb der Funktion einzeln durchlaufe?
(ich bin Umsteigern von Excel auf Calc). Vorab Danke für die Hilfe
Danke Markus
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Funktion Zellbereich übergeben

Beitrag von komma4 »

Am Besten über die Angabe der Zellbereichs-Adressnamen:

=MeineFunktion( "A1:D99" ; "Tabelle1" )

Code: Alles auswählen

Function MeineFunktion( sBereichsAdr, sTabName ) 

oBereich = ThisComponent.Sheets().getByName( sTabName ).getCellRangeByName( sBereichsAdr ) 
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Re: Funktion Zellbereich übergeben

Beitrag von Shirkan »

Winfried,
kannst Du mir noch sagen wie die Schleife aussieht mit der ich auf die Elemente des übergebenen Bereichs durchlaufen kann um sie z.B. alle zu addieren.
Gruß Markus
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Funktion Zellbereich übergeben

Beitrag von komma4 »

Wie man an die Zellen, bzw. Inhalte gelangt ist immer eine Sache des Ziels und der Bereichs-Grösse.

Bspw. geht die Bearbeitung mit einem DatenArray schnell (auch bei grossen Bereichen)

Code: Alles auswählen

lSumme = 0 
oDaten = oBereich.getDataArray()
' die Zeilen des Bereichs
' zz: ZählerZeilen
for zz = _
	LBound( oDaten() ) to _
	UBound( oDaten() )

	oDatenZeile() = oDaten( zz )
	' zz: ZählerZeilen

	' pro Zeile die cells/Zellen
	' zc: ZählerCells
	for zc = _
		LBound( oDatenZeile() ) to _
		UBound( oDatenZeile() )

		lSumme = lSumme + oDatenZeile( zc )
	next ' Zellen
next ' nächste Datenzeile

print lSumme

Der Code funktioniert auch, wenn Zellen leer oder mit Zeichenketten gefüllt sind
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Funktion Zellbereich übergeben

Beitrag von Stephan »

kann mir jemand einen Tipp geben wie ich einer benutzerdefinierten Funktion am geschicktesten einen Zellbereich übergebe
Am Zweckmäßigsten indem Du diesen direkt als Bereich übergibst, z.B. wie in http://www.calc-info.de/files/Calc_StarBasic.pdf beschrieben:

Code: Alles auswählen

Function summenTest ( vArgument as Variant )
' ist das argument ein Array (Zellbereich)
if Not IsArray(vArgument) then
' ist der einzelne Wert numerisch
if IsNumeric( vArgument ) then
' Rückgabewert ist gleich Eingabewert
summenTest = vArgument
else
' Summe ist gleich 0 wenn kein numerischer Wert
' übergeben wurde
summenTest = 0
end if
' funktion beenden
exit function
End If
Dim nSumme as Long
Dim i as Integer
Dim j as Integer
' der spätere Rückgabewert
nSumme = 0
' Schleife durch 1 Dimension (Zeilen)
for i=1 to UBound(vArgument,1)
' Schleife durch zweite Dimension (Spalten)
for j=1 to UBound(vArgument,2)
' numerisch?
if IsNumeric( vArgument(i,j) ) then
' Wert dazuzählen
nSumme = nSumme + vArgument(i,j)
end if
next j
next i
' Rückagbewert in Zelle
summenTest = nSumme
End Function
und aufrufen mit z.B.:

=SUMMENTEST(A1:B20)



Gruß
Stephan
Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Re: Funktion Zellbereich übergeben

Beitrag von Shirkan »

Wilfried, wenn ich das richtig sehe müsste die Funktion vollständig jetzt wie folgt aussehen:

Code: Alles auswählen

Function MeineFunktion( sBereichsAdr, sTabName )

Dim oBereich 
Dim oDaten
Dim oDatenZeile
Dim lSumme
Dim zz 		'ZählerZeilen
Dim zc 		'ZählerCells

oBereich = ThisComponent.Sheets().getByName( sTabName ).getCellRangeByName( sBereichsAdr ) 
lSumme = 0
oDaten = oBereich.getDataArray()

	'die Zeilen des Bereichs durchlaufen
	for zz = LBound( oDaten() ) to UBound( oDaten() )
		oDatenZeile() = oDaten( zz )

		'die Zellen der Zeilen durchlaufen
		for zc = LBound( oDatenZeile() ) to UBound( oDatenZeile() )
			lSumme = lSumme + oDatenZeile( zc )
		next ' Zellen
	next ' nächste Datenzeile

	'print lSumme
        MeineFunktion = lSumme 

End Function
Jedenfalls vielen Dank, ich werde es heute abend ausführlich testen.
Gruß Markus
Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Re: Funktion Zellbereich übergeben

Beitrag von Shirkan »

Ok, ich hatte Deine Funktion nicht vollständig gesehen, weil in dem sichbaren Fenster die letzte Zeile >Exit Funktion< war und ich dachte hier ist es beendet. Tatsächlich handelte es sich aber nur um einen vorzeitigen Funktionsaausstieg. Die so nicht vollständige Funktion konnte natürlich nicht gehen. Sorry, der Fehler lag auf meiner Seite.
Gruß Markus

P.S. Der Threat kann geschlossen werden.
Antworten