Funktion Zellbereich übergeben

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: Funktion Zellbereich übergeben

Re: Funktion Zellbereich übergeben

von Shirkan » Mi, 28.09.2011 09:21

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.

Re: Funktion Zellbereich übergeben

von Shirkan » Mo, 26.09.2011 10:39

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

Re: Funktion Zellbereich übergeben

von Stephan » Mo, 26.09.2011 10:25

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

Re: Funktion Zellbereich übergeben

von komma4 » Mo, 26.09.2011 10:08

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

Re: Funktion Zellbereich übergeben

von Shirkan » Mo, 26.09.2011 09:42

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

Re: Funktion Zellbereich übergeben

von komma4 » Mo, 26.09.2011 09:31

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 ) 

Funktion Zellbereich übergeben

von Shirkan » Mo, 26.09.2011 09:19

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

Nach oben