Seite 1 von 1

Zählen in einer Matrix, ohne Skript

Verfasst: Sa, 28.03.2015 22:26
von Stefan HE
Guten Abend,
ich schlage mich derzeit mit einem Männer/Frauen/Problem herum:
Eine Zahlenfolge z.B. 1100 1110 0011 steht z.B. für nebeneinandersitzende Menschen, wobei die verschiedenen Zahlen Mann bzw. Frau repräsentieren würden.
Diese Zahlen stehen zum Austesten derzeit noch jeweils einzeln untereinander und sind aus Matrixformeln hervorgegangen, am Ende soll die Formel auch nur in einer Zelle stehen.
Ich möchte nun ermittelt bekommen, wie oft die "1" hintereinander kommt. Das sind hier 3 (nicht 4, also kein Kreis).
Meine Idee ist, dass eine weitere Matrixformel eine zweite Spalte wie folgt liefert
1 1
1 2
0 0
0 0
1 1
1 2
1 3
0 0
0 0
0 0
1 1
1 2

Dann könnte ich mit {=MAX(spalte1*spalte2)} mir die 3 ausgeben lassen.
Ja, so wie es da steht, kann auch eine einfache Hilfsspalte mit Wenn-Funktion helfen, aber weil das ganze in Matrixformeln eingebettet ist, geht das nicht wegen des Selbstbezugs.

Wer kann helfen oder hat eine andere Idee?

Danke und Gruß,
Stefan

libre office 4.1.6.2

Re: Zählen in einer Matrix, ohne Skript

Verfasst: Sa, 28.03.2015 23:07
von Karolus
Ich würde eine Zelle mit 110011100011 per →Daten→Text in Spalten→Trennzeichen `0` [x]Trennzeichen zusammenfassen auf mehrere aufteilen und dann:

Code: Alles auswählen

=MAX(LÄNGE(A1:K1))
als Matrixformel benutzen.

Karolus

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 07:47
von clag
Hallo Stephan HE,

wie wäre es denn mit einer eigenen Funktion?
Ist zwar doch "skript" wird aber wie eine Formel eingesetzt.
Angenommen deine zu auszuwertende Zahlenreihe "1100 1110 0011" steht in C3,
dann ist die Anwendung dieser Funktion wie folgt

MAXSIGNINROW(C3;"1")

und das Ergebnis obiger Formel ist 3

Code: Alles auswählen

Function MAXSIGNINROW(sToCheck as string, sSign as string)
	for i = 1 to len(sToCheck)
		if mid(sToCheck,i,1) <> sSign then 
		nCnt = 0
		else
		nCnt = nCnt +1
		if nCnt > nMax then nMax = nCnt 
		end if
		next
	MAXSIGNINROW = nMax
End Function
das ist doch erheblich komfortabler als dein jetziger Ansatz finde ich jedenfalls ;)

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 08:50
von F3K Total
Hi,
angenommen deine Binärreihe steht in Zelle A1, dann versuche mal diese Matrixformel

Code: Alles auswählen

{=MAX(NICHT(ISTFEHLER(FINDEN(WIEDERHOLEN(1;ZEILE($A$1:$A$12));A1;1)))*ZEILE($A$1:$A$12))}
Gruß R

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 09:23
von Karolus
Hallo
@F3K Total:
Genial!
Ich hab noch WENNFEHLER eingebaut (verfügbar in LibreOffice

Code: Alles auswählen

=MAX( WENNFEHLER(FINDEN(WIEDERHOLEN(1;ZEILE(A1:A12)) ; A1 )>0;0) * ZEILE(A1:A12) )

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 10:31
von Stefan HE
Ja, ich kann mit diesem Board noch nicht richtig umgehen Entschuldigt bitte:



Guten Morgen,
vielen Dank für alle Antworten, ich benutze nun folgende Formel, sie bezieht sich auf das binäre Wort in Zelle C7:

Code: Alles auswählen

=SUMMENPRODUKT(MAX(NICHT(ISTFEHLER(FINDEN(WIEDERHOLEN(1;ZEILE($A$1:INDEX(A$1:A$1048576;LÄNGE(C7))));C7;1)))*ZEILE($A$1:INDEX(A$1:A$1048576;LÄNGE(C7)))))

Das ist die Formel von F3 Total, allerdings ist der Teil Zeile erweitert, sodass immer die Länge des Wortes berücksichtigt wird. Das macht

Code: Alles auswählen

ZEILE($A$1:INDEX(A$1:A$1048576;LÄNGE(C7)))
.

Ohne das Summenprodukt vorneweg erhält man die einspaltige Matrix mit der richtigen Maximalzahl, Summenprodukt dampft es in eine Zelle ein.

DANKE NOCHMALS!

Schöne Grüße,
Stefan

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 10:43
von Karolus
Hallo

Code: Alles auswählen

ZEILE($A$1:INDEX(A$1:A$1048576;LÄNGE(C7)))
besser vielleicht die Kirche im Dorf lassen und:

Code: Alles auswählen

ZEILE(VERSCHIEBUNG($A$1;0;0;LÄNGE(C7))

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 11:28
von F3K Total
Moinsen,
Stefan HE hat geschrieben:... Summenprodukt dampft es in eine Zelle ein.
auf das Summenprodukt kannst Du verzichten.
Wenn ich alte Matrixformelreste entferne* und in einer Zelle die folgende Formel (Danke Karolus, für die "Verschiebung") mit STRG+SHIFT+ENTER abschliesse, steht das Ergebnis in nur dieser einen Zelle.

Code: Alles auswählen

{=MAX(NICHT(ISTFEHLER(FINDEN(WIEDERHOLEN(1;ZEILE(VERSCHIEBUNG($A$1;0;0;LÄNGE(C7))));C7;1)))*ZEILE(VERSCHIEBUNG($A$1;0;0;LÄNGE(C7))))
Gruß R

Info:
Matrixformeln passen ihren, von der Ersteingabe herrührenden, Ausgabe-Zellbereich bei Änderungen nicht automatisch an.
Dieses Verhalten wird der Grund dafür sein, dass du eine einspaltige Matrix erhalten hast.
Beispiel: Gib die Formel

Code: Alles auswählen

{=ZEILE(A1:A10)}
als Matrixformel ein. Ändere sie dann auf

Code: Alles auswählen

{=ZEILE(A1:A8)}
-> du erhältst einen NV-Fehler in den Zellen 9 und 10. Ändere sie nun auf

Code: Alles auswählen

{=ZEILE(A1:A12)}
-> die Zeilen 11 und 12 fehlen
Nur Löschen und Neueingabe funktioniert.
F1 Hilfe hat geschrieben:*
Bearbeiten von Matrixformeln
1. Wählen Sie den Zellbereich oder die Matrix aus, die die Matrix enthält. Um die ganze Matrix auszuwählen, positionieren sie den Cursor innerhalb der Matrix und drücken Strg+ / , wobei / das Divisionszeichen auf der nummerischen Tastatur ist.
Nach dem Selektieren mit Strg+ / kann der ganze Matrixformelbereich gelöscht werden.

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 13:30
von Stefan HE
Hallo,
R: Stimmt, eigentlich brauche ich das Summenprodukt nicht.
Wenn ich es jedoch weglasse und diese Formel dann in andere Zeilen weiterziehe, zeigt es während des Ziehens neben dem Mauszeiger in einem kleinen Infotext z.B. "Matrixformel 2 Z x 1 S" an. Beim Loslassen habe ich dann nur #NAME? in den einzelnen Zellen stehen.

Auch die Verschiebung klappt. Die andere Variante ist halt seit einiger Zeit in meinem "Baukasten".


Gruß,
Stefan

Re: Zählen in einer Matrix, ohne Skript

Verfasst: So, 29.03.2015 22:14
von F3K Total

Re: Zählen in einer Matrix, ohne Skript

Verfasst: Mo, 30.03.2015 08:51
von Stefan HE
Danke : )