Funktion "VERKETTENWENN"
Moderator: Moderatoren
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Funktion "VERKETTENWENN"
Ich habe bereits die Calc-Funktionen ZÄHLENWENN und SUMMEWENN kennen gelernt, aber ich suche nach einer Funktion, die die Zellen einer Linie verkettet und durch ein bestimmtes Zeichen (z.B. Komma) trennt, wenn ein bestimmtes Kriterium erfüllt wird.
Existiert sowas schon oder gibt es jemanden, der in der Lage ist, diese Funktion zu schreiben? Ich selbst bin nämlich blutiger Anfänger in solchen Dingen.
Vielen Dank für eure Hilfe...
Existiert sowas schon oder gibt es jemanden, der in der Lage ist, diese Funktion zu schreiben? Ich selbst bin nämlich blutiger Anfänger in solchen Dingen.
Vielen Dank für eure Hilfe...
Re: Funktion "VERKETTENWENN"
Hallo Herbstkatze,
muss es eine Benutzerdefenierte Funktion (Makro) sein, oder geht auch eine Formellösung?
Wenn ja, dann denke ich mir (sinngemäß gesprochen) so was in der Art von
Gruß
balu
muss es eine Benutzerdefenierte Funktion (Makro) sein, oder geht auch eine Formellösung?
Meinst Du mit Linie eine Zeile?die die Zellen einer Linie verkettet
Wenn ja, dann denke ich mir (sinngemäß gesprochen) so was in der Art von
Code: Alles auswählen
=WENN(Kriterium=Bedingung;Zelle1&","&Zelle2;Zelle0)
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
So habe ich es auch versucht, aber ich habe ca. 100 Spalten und da schleichen sich einfach zu viele Fehler ein.
Deswegen wäre wohl ein solches Makro am sinnvollsten. Weiss jemand, wie ich das anstelle?
Und natürlich meine ich Zeile und nicht Linie
Deswegen wäre wohl ein solches Makro am sinnvollsten. Weiss jemand, wie ich das anstelle?
Und natürlich meine ich Zeile und nicht Linie

Re: Funktion "VERKETTENWENN"
Hallo
Als Function ist das nicht ganz einfach umzusetzen, würde dir eine Sub reichen die alle Zeilen eines definierten Bereichs (oder einer Selektion) nach der Bedingung verketten und in eine Nachbarspalte schreibt?
Wie lautet die Bedingung? Wird sie in der zu verkettenden Zeile selbst angewand?
Gruß Karo
Als Function ist das nicht ganz einfach umzusetzen, würde dir eine Sub reichen die alle Zeilen eines definierten Bereichs (oder einer Selektion) nach der Bedingung verketten und in eine Nachbarspalte schreibt?
Wie lautet die Bedingung? Wird sie in der zu verkettenden Zeile selbst angewand?
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
Ich denke schon, dass das funktionieren könnte... Meine Spalten G bis BZ (könnte noch mehr werden...) enthalten alle die Funktion (die Bezugszellen ändern sich...) und spucken dadurch alle eine natürliche Zahl oder 0 aus.
In den Spalten D bis F würde ich gerne die Werte aus verschiedenen Bereichen der Zeile verknüpfen, wenn sie ungleich 0 sind, und zwar immer durch ein einfaches Komma getrennt.
Meint ihr, das ist möglich? Und wenn ja, wie stelle ich das an?
Danke für eure Hilfe
Code: Alles auswählen
=IF(SUMPRODUCT($Synthèse.$C$3:$C$150=$B5;$Synthèse.$I$3:$I$150=G$2);G2;0)
In den Spalten D bis F würde ich gerne die Werte aus verschiedenen Bereichen der Zeile verknüpfen, wenn sie ungleich 0 sind, und zwar immer durch ein einfaches Komma getrennt.
Meint ihr, das ist möglich? Und wenn ja, wie stelle ich das an?
Danke für eure Hilfe

Re: Funktion "VERKETTENWENN"
Hallo
Ich versuchs mal als Function():
Die Syntax in der Zielzelle ist erklärungsbedürftig:
=zverketten(von;bis;Quelltabelle;zeile)
von = die Nr der ersten Spalte zb. 1 oder SPALTE(A1)
bis = die Nr der letzten Spalte z.B. 8 oder SPALTE(H1)
Quelltabelle = die Blattnr. des Quellbereiches z.B. 1
zeile = die Zeilennr die du verketten willst , praktisch ist es hier zb. ZEILE(A3) zu verwenden.
Gruß Karo
Ich versuchs mal als Function():
Code: Alles auswählen
function zverketten(von , bis, tab ,zzeile )as string
osheet = thisComponent.sheets( tab -1 )
srow = zzeile -1
scol = von-1
ecol = bis-1
adat() = osheet.getcellrangebyposition(scol,srow,ecol,srow).getdataarray
dim outlist(ubound(adat(0)))
c = 0
for i = scol to ecol
if val(adat(0)(i)) = 0 then
goto weiter:
end if
if isnumeric(adat(0)(i)) then
outlist(c)= adat(0)(i)
c = c+1
end if
weiter:
next i
if c > 0 then
redim preserve outlist(c-1)
zverketten = join(outlist(),",")
else
zverketten ="###"
end if
End function
=zverketten(von;bis;Quelltabelle;zeile)
von = die Nr der ersten Spalte zb. 1 oder SPALTE(A1)
bis = die Nr der letzten Spalte z.B. 8 oder SPALTE(H1)
Quelltabelle = die Blattnr. des Quellbereiches z.B. 1
zeile = die Zeilennr die du verketten willst , praktisch ist es hier zb. ZEILE(A3) zu verwenden.
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
Danke dafür schon mal... Allerdings läuft es noch nicht fehlerfrei.
Ich habe die Function angelegt und die Funktion in meine Zelle eingefügt.
Dabei gibt es mir sofort die Fehlermeldung "Inadmissible value or data type. Index out of defined range." Und es öffnet sich der Code mit der Markierung auf
Was ist zu tun bzw. was habe ich diesmal übersehen?
Ich habe die Function angelegt und die Funktion
Code: Alles auswählen
=ZVERKETTEN(COLUMN(F5);COLUMN(BX5);1;ROW(B5))
Dabei gibt es mir sofort die Fehlermeldung "Inadmissible value or data type. Index out of defined range." Und es öffnet sich der Code mit der Markierung auf
Code: Alles auswählen
if val(adat(0)(i)) = 0 then
Re: Funktion "VERKETTENWENN"
Hallo
Vmtl. kommt deine OOoversion ? noch nicht mit 2dimensionalen Arrays zurecht, ich habs mal umgeschrieben auf Prüfung der einzelnen Zellwerte:
Gruß Karo
Vmtl. kommt deine OOoversion ? noch nicht mit 2dimensionalen Arrays zurecht, ich habs mal umgeschrieben auf Prüfung der einzelnen Zellwerte:
Code: Alles auswählen
function zverketten(von , bis, tab ,zzeile )as string
osheet = thisComponent.sheets( tab -1 )
srow = zzeile -1
scol = von-1
ecol = bis-1
'adat() = osheet.getcellrangebyposition(scol,srow,ecol,srow).getdataarray
dim outlist(ecol-scol)
c = 0
for i = scol to ecol
if osheet.getcellbyposition(i,srow).value = 0 then
goto weiter:
end if
if isnumeric(osheet.getcellbyposition(i,srow).value) then
outlist(c) = osheet.getcellbyposition(i,srow).string
c = c+1
end if
weiter:
next i
if c > 0 then
redim preserve outlist(c-1)
zverketten = join(outlist(),",")
else
zverketten ="###"
end if
End function
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
Jetzt klappts... Wunderschön! Vielen Dank dafür, Karo!
Nachtrag: Wirst du böse, wenn ich jetzt auch Zellen verknüpfen will, die nicht nur Zahlen, sondern auch Text enthalten? In der Function steht ja was von Integer. Muss man das einfach durch einen anderen Begriff ersetzen?
Nachtrag: Wirst du böse, wenn ich jetzt auch Zellen verknüpfen will, die nicht nur Zahlen, sondern auch Text enthalten? In der Function steht ja was von Integer. Muss man das einfach durch einen anderen Begriff ersetzen?
Re: Funktion "VERKETTENWENN"
Hallo
Ändere wie hier:
Gruß Karo
Ändere wie hier:
Code: Alles auswählen
...
if osheet.getcellbyposition(i,srow).string = "" then '!!passe diese Zeile an
goto weiter:
end if
' if isnumeric(osheet.getcellbyposition(i,srow).value) then 'auskommentieren
outlist(c) = osheet.getcellbyposition(i,srow).string
c = c+1
' end if 'auskommentieren
weiter:
next i
...
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
Vielen Dank Karo! Jetzt klappts. Ich lade noch mal eine funktionierende Beispieldatei hoch, für den Fall, dass irgendwann noch mal jemand die gleiche Frage haben könnte 

- Dateianhänge
-
- Zverketten.ods
- (20.26 KiB) 117-mal heruntergeladen
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
So eine letzte Frage habe ich noch:
Die Funktion kann man doch auch bestimmt so umformulieren, dass sie auch für Spalten funktioniert, also zum Beispiel die Zellen A1 bis A10 verknüpft.
Kannst du mir noch mal weiterhelfen?
Vielen, vielen Dank!
Die Funktion kann man doch auch bestimmt so umformulieren, dass sie auch für Spalten funktioniert, also zum Beispiel die Zellen A1 bis A10 verknüpft.
Kannst du mir noch mal weiterhelfen?
Vielen, vielen Dank!
Re: Funktion "VERKETTENWENN"
Hallo
Gruß Karo
Ja, aber auf die notwendigen Änderungen wärst du nach 15 Minuten Code lesen und nachdenken auch gekommen.Herbstkatze hat geschrieben:So eine letzte Frage habe ich noch:
Die Funktion kann man doch auch bestimmt so umformulieren, dass sie auch für Spalten funktioniert, also zum Beispiel die Zellen A1 bis A10 verknüpft.
Code: Alles auswählen
function sverketten(von , bis, tab ,sspalte )as string
osheet = thisComponent.sheets( tab -1 )
scol = sspalte -1
srow = von-1
erow = bis-1
dim outlist(erow-srow)
c = 0
for i = srow to erow
if osheet.getcellbyposition(i,scol).string = 0 then
goto weiter:
end if
if isnumeric(osheet.getcellbyposition(scol,i).value) then
outlist(c) = osheet.getcellbyposition(scol,i).string
c = c+1
end if
weiter:
next i
if c > 0 then
redim preserve outlist(c-1)
sverketten = join(outlist(),",")
else
sverketten ="###"
end if
End function
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- ***
- Beiträge: 51
- Registriert: Mi, 15.04.2009 10:52
Re: Funktion "VERKETTENWENN"
Du hast Recht...
Wie kommt es dazu, dass es Zellen mit dem Wert 0 doch des Öfteren verkettet, obwohl die doch laut Function eigentlich ignoriert werden sollen?
Die 0 entsteht immer durch eine Wenn-Dann-Funktion...
Wie kommt es dazu, dass es Zellen mit dem Wert 0 doch des Öfteren verkettet, obwohl die doch laut Function eigentlich ignoriert werden sollen?
Die 0 entsteht immer durch eine Wenn-Dann-Funktion...
Re: Funktion "VERKETTENWENN"
Hallo
Ich hab noch gefunden wie man Addressbereiche in der normalen Formelsyntax verarbeitet:
Diese kannst du aufrufen mit:
=RVERKETTEN(A1:K1)
oder
=RVERKETTEN(A1:A11)
oder
=RVERKETTEN(A1:D5)
Null-werte, leere Zellen und Zellen mit einzelnen Leerzeichen werden nicht verkettet.
Gruß Karo
Ich hab noch gefunden wie man Addressbereiche in der normalen Formelsyntax verarbeitet:
Code: Alles auswählen
function rverketten(range() as variant )as string
if isarray(range()) then
z = ubound(range,1)
s = ubound(range,2)
dim outlist(z*s)
for i = 1 to z 'Zeilenindex
For ii = 1 to s 'Spaltenindex
if range(i,ii) <> "" and range(i,ii) <> 0 and range(i,ii) <> " " then
outlist(c)= range(i,ii)
c = c+1
end if
next ii
next i
if c > 0 then
redim preserve outlist(c-1)
rverketten = join(outlist(),",")
else
rverketten = "# #"
end if
else
rverketten = "# #"
end if
End function
=RVERKETTEN(A1:K1)
oder
=RVERKETTEN(A1:A11)
oder
=RVERKETTEN(A1:D5)
Null-werte, leere Zellen und Zellen mit einzelnen Leerzeichen werden nicht verkettet.
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)