Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anzahl gleicher Begriffe im Array

Anzahl gleicher Begriffe im Array
11.05.2022 10:25:20
Andi
Guten Morgen zusammen,
ich stehe vor einem kleinen Problem, bei dem ich nicht weiter komme.
Ich habe 4 dynamische Arrays, welche jeweils mit verschiedenen Aufgaben Begriffen gefüllt werden z.B. Fräsen, Drehen, Schleifen usw.. Begriffe kommen in diesen Arrays mehrfach vor. Mein Ziel ist es, den Inhalt für jedes Array grafisch als Kreisdiagram auszugeben damit die Aufgabenverteilung ersichtlich wird.
Wie kann ich hier nun die Anzahl der gleichen Aufgaben ermitteln und gleichzeitig noch die Bezeichnung der Aufgabe für das Diagramm weitergeben?
Liebe Grüße
Andi

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl gleicher Begriffe im Array
11.05.2022 10:57:57
Oberschlumpf
Hi,
vielleicht ist es hilfreich, wenn du uns bitte per Upload eine Bsp-Datei zeigst mit Bsp-Daten, mit deinem Code, wie du die Arrays bildest.
oder...ohne Datei zum Testen:
1. erstell eine weitere Array-Variable mit 2 Dimensionen, z Bsp larNeu(0,x)
0 = hier wird die Anzahl jeden Eintrags summiert
x = Anzahl an Zeilen für vorhandene Einträge; muss mit ReDim Preserve... nach Hinzufügen von neuem Eintrag vergrößert werden
2. jetzt liest du z Bsp in For/Next1 dein 1. dyn. Array Zeile für Zeile ein
Mit For/Next2 prüfst du, ob Eintrag aus For/Next1 schon in larNeu vorhanden ist
ja = vorhandene Summe um 1 erhöhen
nein = neuer Eintrag in larNeu; mit Redim Preserve... erweitern
Ciao
Thorsten
Anzeige
AW: Anzahl gleicher Begriffe im Array
11.05.2022 13:49:09
Andi
Hi,
danke, das muss ich so mal versuchen.
Gruß Andi
AW: Anzahl gleicher Begriffe im Array
11.05.2022 14:46:04
Andi
Ich steh grad etwas auf dem Schlauch, sollte vielleicht mal Feierabend machen :D
Könntest du mir evtl. ein Beispiel machen, wie du den Code mit dem ReDim Preserve aufbaust? Das wäre echt super, ich habe die Funktion noch nie verwendet.
Im folgenden findest du meinen Code, wie ich meine Arrays befülle:
Dim strEmp01 As String ' Variable Mitarbeiter 1
Dim strEmp02 As String ' Variable Mitarbeiter 2
Dim strEmp03 As String ' Variable Mitarbeiter 3
Dim strEmp04 As String ' Variable Mitarbeiter 4
Dim varGetWork01() As Variant 'Array Mitarbeiter 1
Dim varGetWork02() As Variant 'Array Mitarbeiter 2
Dim varGetWork03() As Variant 'Array Mitarbeiter 3
Dim varGetWork04() As Variant 'Array Mitarbeiter 4
Dim intCountRow As Integer ' Zähler Reihe
Dim intColEmp As Integer ' Spalte Bearbeiter
Dim intRowTask As Integer ' Spalte Aufgabenbezeichnung
Dim intSizeArr01 As Integer ' ArraySize Aufgaben M1
Dim intSizeArr02 As Integer ' ArraySize Aufgaben M2
Dim intSizeArr03 As Integer ' ArraySize Aufgaben M3
Dim intSizeArr04 As Integer ' ArraySize Aufgaben M4
Dim adrName As Range ' Definition Range für Suche
Dim intFullRow As Integer 'Anzahl beschriebener Zeilen
Dim a, b, c, d As Integer 'Zähler für die Arrays
Worksheets("Archiv").Activate
Set adrName = Worksheets("Archiv").Range("F:F")
strEmp01 = "Mitarbeiter1"
strEmp02 = "Mitarbeiter2"
strEmp03 = "Mitarbeiter3"
strEmp04 = "Mitarbeiter4"
intCountRow = 5 ' Startzeile
intColEmp = 6 ' Reihe Mitarbeitername
intRowTask = 1 ' Zeile der Aufgabe
a = 0
b = 0
c = 0
d = 0
intSizeArr01 = Application.WorksheetFunction.CountIf(adrName, strEmp01) - 1 ' Arraygröße Employee01 festlegen
intSizeArr02 = Application.WorksheetFunction.CountIf(adrName, strEmp02) - 1 ' Arraygröße Employee02 festlegen
intSizeArr03 = Application.WorksheetFunction.CountIf(adrName, strEmp03) - 1 ' Arraygröße Employee03 festlegen
intSizeArr04 = Application.WorksheetFunction.CountIf(adrName, strEmp04) - 1 ' Arraygröße Employee04 festlegen
intFullRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ReDim varGetWork01(intSizeArr01)
ReDim varGetWork02(intSizeArr02)
ReDim varGetWork03(intSizeArr03)
ReDim varGetWork04(intSizeArr04)
For intCountRow = 5 To intFullRow
If Cells(intCountRow, intColEmp).Value = strEmp01 Then
'Array1 füllen
varGetWork01(a) = Cells(intCountRow, 1).Value
a = a + 1
ElseIf Cells(intCountRow, intColEmp).Value = strEmp02 Then
'Array2 füllen
varGetWork02(b) = Cells(intCountRow, 1).Value
b = b + 1
ElseIf Cells(intCountRow, intColEmp).Value = strEmp03 Then
'Array3 füllen
varGetWork03(c) = Cells(intCountRow, 1).Value
c = c + 1
ElseIf Cells(intCountRow, intColEmp).Value = strEmp04 Then
'Array4 füllen
varGetWork04(d) = Cells(intCountRow, 1).Value
d = d + 1
End If
Next
End Sub
Gruß Andi
Anzeige
AW: Anzahl gleicher Begriffe im Array
11.05.2022 14:48:52
Oberschlumpf
und ich steh aufm Schlauch, wenn ich - nur - deinen Code sehe
wo ist denn bitte die Bsp-Datei mit Bsp-Daten?
ich mag nicht mehr - wer anders bitte
12.05.2022 10:41:08
Oberschlumpf
Hi Andi,
echt jetzt?!
Dein Makro TaskDistribution, in dem deine dynamischen Arrays gebildet werden, funktioniert nur...
...wenn in Tabelle "Archiv", in Spalte F, Einträge (MA-Namen) vorhanden sind
In deiner Bsp-Datei, in "Archiv", ist Spalte F = LEER!
Spalte F wurde mit einer Datengültigkeitsliste belegt; Quelle = Archiv!$M$4:$M$8
...aber diese Zellen, $M$4:$M$8, sind auch...LEER!
Ok, ich hab nun...
a) in $M$4:$M$8 = M1 bis M5 eingetragen
b) in "Archiv", Spalte F,in den Zeilen 5 - 13 wahlfreie Einträge von M1 bis M4 manuell eingetragen
Jetzt starte ich dein Makro TaskDistribution
Das Makro läuft durch bis zur Zeile

For intCountRow = 5 To intFullRow
alles, was zwischen For + Next ist, wird nicht durchgeführt!
Denn intFullRow ergibt sich aus

intFullRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
aber aber aber!!!!...wer ahnt es schon?...Tabelle "Archiv", Bereich A5:B32 IST LEER!!!!...(außer meine 5 manuellen Einträge in Spalte F)
Sorry Andi, aber ich kanns nich anders formulieren:
Denk mit! Und sei nicht so faul, dass du nur die vielleicht originalen Zellinhalte löschst - füll die Tabelle auch wieder mit genügend Bsp-Werten auf!
Viel Spaß + Erfolg für den nächsten Helfer...ich mag nich mehr.
Ciao
Thorsten
Anzeige
AW: ich mag nicht mehr - wer anders bitte
13.05.2022 08:34:42
Andi
Sorry, ich hab vergessen die Daten, die ich aus Datenschutzgründen gelöscht habe, wieder an die richtige Stelle einzutragen. Die Daten in der Übersicht sind die, die ins Archiv übertragen werden.
Musst ja nicht gleich auf beleidigte Leberwurst machen, den Hinweis kann man auch in nem passenderen Ton geben.
AW: ich mag nicht mehr - wer anders bitte
13.05.2022 12:24:48
Oberschlumpf
und ich werde noch immer nicht deine Tabelle nachbauen.
anstelle mich darüber zu informieren, welche Daten wohin sollen, hättest du das ja tun können, und eben als neue Bsp-Datei hier zeigen
haste nich...wieso, versteh ich nich....is aber nich schlimm...ich wollt ja nich weiterhelfen...und das will ich auch weiterhin...nicht mehr
ja, n anderer Ton wäre sicherlich freundlicher rübergekommen - aber eben auch "mitdenken" oder etwas - nicht - vergessen...wäre hilfreicher gewesen
ja, ich weiß, vergessen kann passieren, weil du bist auch nur n Mensch, aber dann kann auch "so ein Ton" passieren, weil...ich bin ja auch nur....ein Mensch ;-)
so, ich hol mir jetzt n Kaffee - hofftl vergess ich Milch + Zucker nich :-))
Anzeige
AW: Anzahl gleicher Begriffe im Array
11.05.2022 11:04:10
UweD
Hallo
bei deiner excelVersion evtl. so?

Dim ArrA, ArrB, WF
ArrA = Array("AAA", "BBB", "AAA", "CCC")
Set WF = WorksheetFunction
ArrB = WF.Transpose(WF.Unique(WF.Transpose(ArrA)))
'oder
Cells(1, 1).Resize(UBound(ArrA)) = WF.Unique(WF.Transpose(ArrA))
LG UweD
AW: Anzahl gleicher Begriffe im Array
11.05.2022 13:51:45
Andi
Hi,
danke.
Mit Ubound hole ich mir ja die Große des Arrays aber --> WF.Unique(WF.Transpose(ArrA)) Gruß Andi
AW: Anzahl gleicher Begriffe im Array
11.05.2022 14:03:02
UweD
Hallo
seit Excel 365 gibt es die Funktion =Eindeutig(), Diese listet in einer Zelle (Bereich) die untereinander stehenden Werte aus der Quelle auf und lässt Doppelte direkt weg.
Das kann man auch in VBA mit Worksheetfunction nutzen.
Da das Array die Werte aber "nebeneinander" bereitstellt, wird vorher noch die Transponieren- Funktion verwendet und aus waagerecht wird senkrecht.
LG UweD
Anzeige
AW: Anzahl gleicher Begriffe im Array
13.05.2022 08:36:12
Andi
Ok, danke für die Hilfe. Ich werd mir das man anschauen.
Schönes Wochenende :)
AW: Anzahl gleicher Begriffe im Array
11.05.2022 11:06:30
Daniel
HI
du könntest jedes Array 2x in eine Spalte schreiben.
bei der zweiten Spalte wendest du das Duplikate-Entfernen an (bei Excel-gut sollte das bekannt sein) und schriebst dann die ZählenWenn-Funktion dahinter, mit der zu zählst wie oft jeder Begriff in der ersten Spalte vorkommt. Dann hast du gleich auch deine Tabelle fürs Diagramm.
Bei Excel-Gut VBA-Gut gehe ich davon aus, dass du diese Schritte selbst in VBA umsetzen kannst.
Wenn man das ohne diesen Umweg nur in VBA programmieren will, müsstest du das Dictionary-Objekt verwenden, kennst du das?
Gruß Daniel
Anzeige
AW: Anzahl gleicher Begriffe im Array
11.05.2022 13:53:57
Andi
Hi,
danke, das klingt auch nicht schlecht.
Das dictionary Objekt sagt mir leider nichts. Könntest du das näher erläutern?
Gruß Andi
hast du kein Google? owT
11.05.2022 15:31:40
Rudi
AW: Anzahl gleicher Begriffe im Array
11.05.2022 16:24:43
Daniel
Hi
ein Dictionary ist im Prinzip ein eindimensionales Array mit einem Freitext-Index.
dh man muss sich nicht darum kümmern, wieviele Indizes das Array braucht sondern kann einfach einen Text als Index einsetzen.
ist der Datenpunkt nicht vorhanden, wird er neu angelegt, ist er vorhanden, wird dieser verwendet, dh innerhalb dieser Indizes herrscht immer Eindeutigkeit.
die Einfachste Anwendung wäre die Programmierung eines ZählenWenns über alle Elemente, ähnlich einer Pivot-Auswertung, hier mal ein Beispiel für Spalte A

dim dic as Dictionary
dim Zelle as Range
set dic = Createobject("Scripting.Dictionary")
For Each Zelle in Cells(1, 1).CurrentRegion.Columns(1)
dic(Zelle.Value) = dic(Zelle.Value)
next
Cells(1, 2).Resize(dic.Count) = Worksheetfunction.Transpose(dic.Keys)
Cells(1, 3).Resize(dic.Count) = Worksheetfunction.Transpose(dic.Items)
der andere von mir beschriebene Weg würde so aussehen:

Columns(1).Copy Destination:=Cells(1, 2)
Columns(2).RemoveDuplicates 1, xlno
with Range(Cells(1, 3), Cells(Rows.count, 3).end(xlup)
.FormulaR1C1 = "=CountIf(C1,RC2)"
.Formula = .value
End with
das erste spricht halt mehr den Programmierer an, das zweite den Excelanwender
Gruß Daniel
Anzeige
da fehlt +1
11.05.2022 19:14:48
Rudi

For Each Zelle in Cells(1, 1).CurrentRegion.Columns(1)
dic(Zelle.Value) = dic(Zelle.Value) +1
next
Gruß
Rudi
stimmt, danke owt
12.05.2022 14:35:16
Daniel
AW: Anzahl gleicher Begriffe im Array
13.05.2022 08:40:24
Andi
Vielen Dank, ich werde das mal versuchen.
Schönes Wochenende:)
AW: Anzahl gleicher Begriffe im Array
11.05.2022 11:39:35
ChrisL
Hi Andi
Zu Arrays hast du ja bereits Hilfe. Aber hast du auch an die Möglichkeit einer Standard Pivot-Chart gedacht?
cu
Chris
AW: Anzahl gleicher Begriffe im Array
11.05.2022 13:55:29
Andi
Hi,
ne, das habe ich nicht. Das Standard Pivot-Chart ist mir gänzlich unbekannt, da muss ich mich mal informieren.
Gruß Andi
AW: Anzahl gleicher Begriffe im Array
11.05.2022 14:10:57
ChrisL
Hi Andi
https://www.herber.de/bbs/user/153007.xlsx
Klingt komplizierter wie es ist. Pivot-Auswertung markieren, Einfügen, Pivot-Chart.
cu
Chris
Anzeige
AW: Anzahl gleicher Begriffe im Array
13.05.2022 08:41:55
Andi
Vielen Dank, genau so eine Auswertung benötige ich.
Schönes Wochenende:)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige