Seite 1 von 2
Excel Frage
Verfasst: Mo 27. Mär 2006, 21:51
von zafi9
Hallo
Ich bin kein Programmierer ,bastel aber doch gerne mit Excel herum , jetzt hab ich aber ein Problem
bei denen die mir bekannten Funktion nicht anwendbar sind !
Ich möchte aus mehreren Zahlen ,die Anzahl der verschiedenen Zahlen herausfinden ! (mehrere gleiche Zahlen zählen als eine Zahl)
Wie geht das ?
Beispiel
Zahlen 2 /76/ 45 /2 /49/2 /76
Es sollte dann 4 rauskommen (weil 4 verschiedene Zahlen)
Danke
mfG Manfred
Verfasst: Mo 27. Mär 2006, 23:25
von DukE[2k3]
Hi!
Wenn's ein Makro sein darf:
Initialisiere Vektor v der Länge n mit 0 // n max. Wert der vorkommen darf
Durchlaufe mit i die Liste komplett und setze v
++
Setze c=0
Durchlaufe v mit i und setze c++ sobald v>0
danach hat c den Wert der Anzahl unterschiedlicher Elemente ...
.... so mal schnell aus der Hüfte geschossen ...
Cheers
der DukE
PS: Da ich kein VBA kann - muss der obige Pseudo-Code leider reichen
Verfasst: Mo 27. Mär 2006, 23:31
von JensII
M;an kann auch über New York von Köln nach Düsseldorf kommen, einfach ist aber die A3
Mit dem Befehl
hast du das auch! Mit Fläche ist jetzt z.B. "A3:B7" gemeint![/quote]
Verfasst: Mo 27. Mär 2006, 23:35
von DukE[2k3]
Ist natürlich elegant!
Aber nach Zafi9's Aussage, gab's doch keine
Funktion, die das kann ... also selber basteln ...
Ist eh viel schöner !
Cheers
PS: Ist die A3 nicht immer voll?!?!
Verfasst: Di 28. Mär 2006, 00:03
von Koala
JensII hat geschrieben:M;an kann auch über New York von Köln nach Düsseldorf kommen, einfach ist aber die A3
Mit dem Befehl
hast du das auch! Mit Fläche ist jetzt z.B. "A3:B7" gemeint!
Gesucht ist das Equivalent zu COUNT(DISTINCT foo) in SQL, Anzahl() hingegen entspricht COUNT(foo)...
greetings, Keita
Verfasst: Di 28. Mär 2006, 00:12
von Gunar
Ganz recht... mit anderen Worten: Es gibt - wie schon festgestellt - keine Excelfunktion die das leistet.
Um das Script kommt man da nicht herum...
Nun muss man wissen, um was fuer Eingangsdaten es sich handelt. Ganzzahlen in einem bestimmten Wertebereich wahrscheinlich, wenn der nicht zu gross wird, ist die obige Loesung schon optimal.
Wenn nicht, muesste man erst mal eine Ordnung in die Eingangsmenge bringen, das heisst hier Sortieren.
Da sind der Phantasie keine Grenzen gesetzt, nur 'bucketsort' faellt raus, das entspricht dem obigen Algorithmus...
Verfasst: Di 28. Mär 2006, 01:01
von zafi9
Hallo
"Anzahl" hilft in meinem Fall ja nicht ! (hatte ich natürlich auch schon versucht)
Ich kann kein VB programmieren ,zeichne höchstens ein Makro auf und leg dieses auf eine Schaltfläche !
Verstehe deshalb das Programmierchinesisch nicht
Die(ganzen) Zahlen können von 0 bis 90 gehen ! (Winkel) ,die Anzahl der Zahlen ist verschieden . (bis ca. 120 Zahlen)
Ich dachte nur ,das es ev. mit Verkettung von mehreren Funktionen eine einfache Lösung gibt !
Danke für eure Mühe
mfG Manfred
Verfasst: Di 28. Mär 2006, 10:31
von eyeball
Spiel mal mit der HÄUFIGKEIT-Funktion rum.
Verfasst: Di 28. Mär 2006, 11:02
von DukE[2k3]
Code: Alles auswählen
Sub Zafi9()
Dim cells()
For x = 1 To 7
ReDim Preserve cells(x)
cells(x) = Range("A" & x)
Next x
Dim v()
For x = 1 To 76
ReDim Preserve v(x)
v(x) = 0
Next x
For x = 1 To 7
v(cells(x)) = v(cells(x)) + 1
If (v(cells(x)) = 1) Then c = c + 1
Next x
MsgBox (c)
End Sub
Wie gesagt - VBA kann ich eigentlich gar nicht - nur mal schnell gegoogelt, wie
so die grundlegenden Strukturen sind und obiges ist dabei herausgekommen.
Erste For - liefert dir in handlicher Form die Zellen A1:A7 zur Weiterverarbeitung
Zweite For - liefert dir den Null-Vektor - quasi die "buckets"
Dritte For - legt jetzt Wert Z in Bucket Z ab
Wenn ein Bucket das 1. Mal einen Eintrag erhält, wird der Zähler erhöht, an dessen
Wert du final interessiert bist.
Cheers
der DukE
NACHTRAG: das obige Beispiel bezieht sich strikt auf dein genanntes Beispiel. "7" Werte , "76"
der max. Wert.
Verfasst: Di 28. Mär 2006, 11:26
von BlackJoker
Hi,
probier mal folgendes:
B1: =WENN(ZÄHLENWENN(A$1:A1;A1)>1;"";A1)
C1: =ANZAHL(B1:BX)
Gruß Stephan