Autor
|
Thema: Zählen wenn / Häufigkeit (3101 mal gelesen)
|
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 07. Dez. 2010 17:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hab folgendes Problem: Ich würde gerne in Spalte C die Häufigkeit der jeweiligen Zahlen anzeigen lassen. So das es mir z.B Ausgibt, dass die Zahl 178 zweimal vorkommt. So in der Art wie in der kleinen Tabelle - Spalte D:E - an der rechten Seite des angefügten Bildes. Ich komm bisher auf noch kein nennenswertes Ergebnis bzw. Formel. Hat irgendjemand einen Lösungsvorschlag ? Ich arbeite mit Excel 2003
------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007
|
erstellt am: 07. Dez. 2010 17:47 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo Chris, eigentlich finde ich deinen "fehlenden" Einsatz etwas dürftig, um ehrlich zu sein. Wenn du auf kein vernünftiges Ergebnis kommst, dann poste doch wenigstens das, was du bis jetzt geschafft hast... Aber gut ich habe heute mal einen guten Tag und viel Arbeit war es definitiv nicht. Der folgende Code sollte für dich passen. Ich hoffe keinen Schreibfehler drin zu haben, da ich den eben schnell zusammengeschrieben habe... Code:
Dim ConsolidatedData() As StringSub Zahlen() Dim oColumn As Integer Dim i As Integer Dim oData As String Dim StartColumn As Integer ReDim ConsolidatedData(1, 0) oColumn = 3 StartColumn = oColumn + 2 For i = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row oData = Format(Cells(i, oColumn)) CompareData (oData) Next WriteBox (StartColumn) End Sub Public Sub CompareData(ByVal DataField As String) Dim i As Integer Dim ActCount As Integer Dim Found As Boolean Found = False ActCount = UBound(ConsolidatedData, 2) For i = 0 To ActCount If DataField = ConsolidatedData(0, i) Then ConsolidatedData(1, i) = ConsolidatedData(1, i) + 1 Found = True End If Next If Found = False Then ActCount = ActCount + 1 ReDim Preserve ConsolidatedData(1, ActCount) ConsolidatedData(0, ActCount) = DataField ConsolidatedData(1, ActCount) = 1 End If End Sub Public Sub WriteBox(ByVal StartColumn As Integer) Dim i As Integer For i = 1 To UBound(ConsolidatedData, 2) Cells(i, StartColumn).Value = ConsolidatedData(1, i) & "x" Cells(i, StartColumn + 1).Value = ConsolidatedData(0, i) Next End Sub
HTH Edit: Sry, habe jetzt erst gesehen, dass du wohl eher auf eine Formel aus warst. Das Programm sollte dir aber trotzdem weiterhelfen /Edit ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
[Diese Nachricht wurde von RSchulz am 07. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 07. Dez. 2010 18:28 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
Schmidi01 Mitglied Dipl. Ing. Verfahrenstechnik, Selbständig
Beiträge: 71 Registriert: 31.10.2006
|
erstellt am: 08. Dez. 2010 08:28 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo @Runkelrübe Ich glaube, Chris möchte eher sowas wie ne Stückliste. Mit dem Zählenwenn musst du entweder den zu zählenden Wert von Hand eintragen oder die Formel über die ganze Spalte kopieren und dann steht da viel doppelt bzw. mehrfach. @Rick Ist wohl etwas aufwändig. und @Chris Schau mal unter "Daten" nach PivotTable. Ist zwar im ersten Moment etwas unübersichtlich aber damit kannst du mit wenigen Knopfdrücken tolle Stücklisten erzeugen und abtualisieren. Gruss Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 08. Dez. 2010 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
@Schmidi OK, kann gut sein, so genau hat er sich ja noch nicht geäußert Aber selbst wenn, könnte er die Daten dann noch via erweitertem Filter ohne Duplikate hinkopieren. Wär mir persönlich lieber als Pivot, aber das liegt nur daran, dass ich Pivot immer noch auf der "Mal irgendwann anschauen-Liste" stehen hab ;-) Schauen wir mal, Pivot war jedenfalls ein guter Einwurf, ich denke, es wird jetzt für den Threaderöffner etwas dabei sein ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007
|
erstellt am: 08. Dez. 2010 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 08. Dez. 2010 09:06 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen zusammen, @ Thomas PivotTable sagt mir im Moment gar nichts, aber ich werde es mir gleich anschauen. Und ja, es soll eine Stückliste sein, allerdings wird die Stückliste durch ein externes Programm befüllt. Jetzt will ich nur eine Ausgabe/Liste wie oft die jeweilige Höhe in der Stückliste vorkommen. @runkelrübe Die ZahlenWenn Formel funtioniert für mein vorhaben leider nicht. Hab deine Formel gerade nochmal getetstet. Hier wird ja nur "ein" Wert überprüft und ich muss alle Werte miteinader Vergleichen und aus diesen Werten eine Ausgabe machen wie oft ein Wert vorhanden ist. z.B 178 kommt zweimal vor, 208 einmal, 320 zweimal usw. @Rick Danke für das Macro, werde es heute noch testen. Wollte aber wie Du gemerkt hast, wenn möglich ohne Macro auskommen. ------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schmidi01 Mitglied Dipl. Ing. Verfahrenstechnik, Selbständig
Beiträge: 71 Registriert: 31.10.2006
|
erstellt am: 08. Dez. 2010 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Zitat: Original erstellt von runkelruebe: Wär mir persönlich lieber als Pivot, aber das liegt nur daran, dass ich Pivot immer noch auf der "Mal irgendwann anschauen-Liste" stehen hab ;-)[/i]
Hallo Runkelrübe es lohnt sich auf jeden Fall, sich mit Pivot zu beschäftigen, wenn man grössere Datenmengen "büscheln" oder sonstwie zusammenfassen muss, z.B. für einen Materialauszug. Ich habe mich auch lange dagegen gewehrt und fleissig Makros geschrieben, die dann eine Liste 5 Minuten durchsucht haben und aus einer Armaturenlisteliste mit 8000 Einträgen dann z.B. einen Materialauszug gemacht haben. Da bleibt einem Zeit mal einen Kaffee zu holen. Nachdem ich das mit Pivot mal angeschaut hatte, war ich erstaunt, dass die gleiche Funktionalität jetzt mit Pivot erstellen ca. 30 sec. benötigt und wenn die Pivot Tabelle mal erstellt ist, geht die Aktualisierung innerhalb eines Augenblicks. Da hast du nichtmal mehr Zeit, die Tasse zum Mund zu führen. Gruss Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 08. Dez. 2010 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
>> aus diesen Werten eine Ausgabe machen wie oft ein Wert vorhanden ist. z.B 178 kommt zweimal vor, 208 einmal, 320 zweimal usw.Ääh, ja. Geht genau so. Wenn Du so etwas wie auf Deinem Bild rechts unten haben möchtest, kommt diese Formel in eine Zeile und dann kopierst Du die runter, so dass dort dann die anderen Werte abgefragt werden. System: 'Such in der Matrix nach dem Wert, der rechts neben mir steht'. Lad ne Mappe hoch, wenn Du meinst, dass ich es nicht verstanden hab, ich erspare uns beiden den screenshot, der Dein Bild kopiert darstellt [rredit] aber der Thomas hat schon Recht -> schau mal Pivot an, nimm ein snickers mit [/rredit] ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 08. Dez. 2010 12:58 <-- editieren / zitieren --> Unities abgeben:
@Thomas Ich hab mir das Thema Pivot mal angeschaut, ist ein sehr interessantes Thema. Hatte heute morgen aber nicht die Zeit um mich näher damit zu beschäftigen. @runkelrübe Ich habe mit meiner Aussage nicht gemeint, dass Du es nicht verstanden hast und wurde dies auch nie zum Ausdruck bringen. Ich bin Dankbar dafür das es dieses Forum gibt und das jeder die Möglichkeit hat, auf Fragen eines anderen zu antworten und Zeit investierst. Dein Lösungansatz ist vollkommen richtig, allerdings wollte ich nicht jeden Wert einzeln überprüfen. In Summe sind es 30 Werte die zu betrachten sind. Deshalb hätte ich gerne eine Überprüfung, in der alle Werte überprüft werden und danach eine Ausgabe erfolgt wie oft der jeweilige Wert vorkommt, es sollen aber nur die Werte in die Tabelle eingetragen werden die auch wirklich in der Tabelle stehen und nicht die, die vorkommen könnten. Mit deinem Lösungsansatz würde ich dann wie folgt vorgehen: Die Formel ZählenWenn 30mal kopieren und die leeren Zellen dann über einen Filter ausblenden. Mit der Formel ZählenWenn wäre ich auch vorgegangen, wollte aber wenn möglich diese nicht 30mal kopieren. Deshalb hätte ich gerne einen schöneren Lösungsansatz gehabt.
------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007
|
erstellt am: 08. Dez. 2010 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 08. Dez. 2010 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hi Chris, ich hab's auch nicht böse gemeint! Es hätte ja durchaus sein können, dass ich Dich falsch verstanden hab, ist halt nur mit Worten und ohne Datei nicht immer so ganz einfach. Und die Einschränkung mit nicht vorkommenden Werte gab es bislang noch nicht ;-) Sind halt einfachste Bordmittel mit den Formeln und Filtern, reicht aus, wenn man's nicht täglich 3x machen muß. Für Komfort bleiben Pivot, VBA, eine Kombination aus Formel und aufgezeichnetem Makro oder es kommt noch wer mit der Monsterformellösung. Ich drück Däumchen dafür, ich selber werde wohl keine solche Formel liefern können, sorry. Ich freue mich auf die Lösung, die Du am Ende wählst und uns präsentierst, das wird sicherlich noch wer brauchen können ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 10. Dez. 2010 07:23 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von RSchulz:Public Sub CompareData(ByVal DataField As String) Dim i As Integer Dim ActCount As Integer Dim Found As Boolean Found = False ActCount = UBound(ConsolidatedData, 2) For i = 0 To ActCount If DataField = ConsolidatedData(0, i) Then ConsolidatedData(1, i) = ConsolidatedData(1, i) + 1 Found = True End If Next If Found = False Then ActCount = ActCount + 1 ReDim Preserve ConsolidatedData(1, ActCount) ConsolidatedData(0, ActCount) = DataField ConsolidatedData(1, ActCount) = 1 End If End Sub
Guten Morgen Rick, erstmal vielen Dank für den Code. Allerdings bleibt der Code an der Fett markierten Stelle stehen. Und gibt mir die Fehlermeldung, das die Typen unverträglich sind, aus. Kannst Du mir sagen warum ? ------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 10. Dez. 2010 12:55 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe den Code noch etwas abgeändert und jetzt läuft er. Herzlichen Dank Rick! Die 10U´ sind unterwegs. Meine Änderung des Codes war einfach die String Variablen in Integer Variablen umzuschreiben und das Programm läuft. Nochmal Vielen Dank. Anbei der Code Code: Dim ConsolidatedData() As Integer Sub Zahlen() Dim oColumn As Integer Dim i As Integer Dim oData As Integer Dim StartColumn As Integer ReDim ConsolidatedData(1, 0) oColumn = 3 StartColumn = oColumn + 2 For i = 4 To Cells.SpecialCells(xlCellTypeLastCell).Row 'MsgBox Format(Cells(i, oColumn)) oData = Cells(i, oColumn).Value CompareData (oData) Next WriteBox (StartColumn) End SubPublic Sub CompareData(ByVal DataField As Integer) Dim i As Integer Dim ActCount As Integer Dim Found As Boolean Found = False ActCount = UBound(ConsolidatedData, 2) For i = 0 To ActCount If DataField = ConsolidatedData(0, i) Then ConsolidatedData(1, i) = ConsolidatedData(1, i) + 1 Found = True End If Next If Found = False Then ActCount = ActCount + 1 ReDim Preserve ConsolidatedData(1, ActCount) ConsolidatedData(0, ActCount) = DataField ConsolidatedData(1, ActCount) = 1 End If End Sub Public Sub WriteBox(ByVal StartColumn As Integer) Dim i As Integer For i = 1 To UBound(ConsolidatedData, 2) Cells(i, StartColumn).Value = ConsolidatedData(1, i) & "x" Cells(i, StartColumn + 1).Value = ConsolidatedData(0, i) Next End Sub
------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 10. Dez. 2010 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
Schmidi01 Mitglied Dipl. Ing. Verfahrenstechnik, Selbständig
Beiträge: 71 Registriert: 31.10.2006
|
erstellt am: 14. Dez. 2010 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 14. Dez. 2010 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo Thomas, Jap, so hatte ich es auch in Erinnerung, das man den Wert in 2 Bereiche ziehen kann -unter XL03, aber unter 07 habe ich die Möglichkeit irgendwie nicht gesehen... Habe gerade versucht die mit XL07 erstellte und in XL 2003 konv. Mappe in einzulesen....irgendwie ist die Mappe Schrott... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Praktikant / Werkstudent (m/w/d) als Assistenz der Bauleitung | GOLDBECK?realisiert zukunftsweisende Immobilien in Europa. Wir verstehen Gebäude als Produkte und bieten alle Leistungen aus einer Hand: vom Design über den Bau bis zu Services im Betrieb. Aktuell beschäftigt unser Familienunternehmen mehr als 12.000 Mitarbeitende an über 100 Standorten bei einer?Gesamtleistung von über 6 Mrd. Euro. Unser Anspruch ?building?excellence? steht dabei für Spitzenleistungen ... | Anzeige ansehen | Assistenz, Sekretariat |
|
Schmidi01 Mitglied Dipl. Ing. Verfahrenstechnik, Selbständig
Beiträge: 71 Registriert: 31.10.2006
|
erstellt am: 14. Dez. 2010 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Ich bin auch die 2003er Version gewohnt und musste bei der 2007 erst mal suchen wo alles versteckt ist. Wenn du auf die Pivottabelle rechtsklickst kannst du ganz unten eine "Feldliste" einblenden. Dort kannst du die "Wertefeldeinstellungen" auf Anzahl ändern. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|