Funktion Zellbereich übergeben
Moderator: Moderatoren
Funktion Zellbereich übergeben
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
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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Funktion Zellbereich übergeben
Am Besten über die Angabe der Zellbereichs-Adressnamen:
=MeineFunktion( "A1:D99" ; "Tabelle1" )
=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)
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)
Re: Funktion Zellbereich übergeben
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
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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Funktion Zellbereich übergeben
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)
Der Code funktioniert auch, wenn Zellen leer oder mit Zeichenketten gefüllt sind
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)
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)
Re: Funktion Zellbereich übergeben
Am Zweckmäßigsten indem Du diesen direkt als Bereich übergibst, z.B. wie in http://www.calc-info.de/files/Calc_StarBasic.pdf beschrieben:kann mir jemand einen Tipp geben wie ich einer benutzerdefinierten Funktion am geschicktesten einen Zellbereich übergebe
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
=SUMMENTEST(A1:B20)
Gruß
Stephan
Re: Funktion Zellbereich übergeben
Wilfried, wenn ich das richtig sehe müsste die Funktion vollständig jetzt wie folgt aussehen:
Jedenfalls vielen Dank, ich werde es heute abend ausführlich testen.
Gruß Markus
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
Gruß Markus
Re: Funktion Zellbereich übergeben
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.
Gruß Markus
P.S. Der Threat kann geschlossen werden.