Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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

Spezielles Problem mit "fehlenden Daten"

Spezielles Problem mit "fehlenden Daten"
04.12.2020 22:35:43
Oliver
Hallo!
Habe ein ganz spezielles Problem. Ich habe eine riesige Datenmenge einer Statistikseite, aus der ich Daten grafisch aufbereiten will.
Die Tabelle ist wie folget aufgebaut:
Spalte 1: Kalenderwochen seit dem Jahr 2000 (Format: KALW-JJJJWW)
Spalte 2: Bundesländercode für 9 verschiedene Bundesländer (Format: B00-X; X steht für 1 bis 9)
Spalte 3: Altercode für 20 Altersgruppen (Format: ALTER5-X; X steht für 1 bis 20)
Spalte 4: Geschlechtscode für männlich und weiblich (Format: C11-X; X steht für 1 (männlich) oder 2 (weiblich)
Spalte 5: ein Wert (Zahl zwischen 1 und maximal 90)
Mein Problem: Die Daten sind so gemacht, dass nur für die Gruppen eine Zeile angelegt ist, bei denen ein Wert der über 0 vorhanden ist. Theoretisch müsste es pro alenderwoche und Bundesland 40 (20 Altersgruppen mal zwei Geschlechter) Zeilen geben.
Um Grafiken zu erstellen, brauche ich auch für jede einzelne dieser Alters- und Geschlechtergruppen eine Zeile.
Mir fehlen aber ganz viele Zeilen, weil ganz oft in einzelnen Altersbereichen oder auch manchmal nur bei einem geschlecht davon die Zeile fehlt, da es eine mit dem Wert "0" wäre.
Kann ich das irgendwie beheben? Derzeit sind das Ganze 234.560 Zeilen - es fehlen also ganz ganz viele, da es insgesamt über 374.000 sein müssten (52 Wochen mal 9 mal 20 mal 2, dazu kommen noch einige wenige Jahre mit 53 Kalenderwochen).
Freu mich über Hilfen - ich kann, wenn es das vereinfacht, die einzelnen Bundesländer auch gleich in einzelnen Tabellenblättern anlegen, da ich sie nicht zusammen brauche sondern einzeln.
Hoffe, das war verständlich so...
P.S.: Verwende die neueste Excel 365 Version Version 16.0.13426.20270...

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

Betreff
Datum
Anwender
Anzeige
AW: Ansatz
04.12.2020 23:35:49
Fennek
Hallo,
eine Idee:
- eine Schleife über all KW der Periode
- Prüfung, ob ein Datensatz existiert
- falls nicht, einen neuen, leeren Datensatz einfügen
Hilfreich wäre die Information in welchen Spalte die genannten Variablen liegen.
mfg
AW: Ansatz
05.12.2020 00:33:41
Oliver
Hallo Fennek!
Sorry, habe Spalte 1, 2, 3, 4 und 5 geschrieben
Damit ist natürlich A B C D und E gemeint
Was mit "Schleife" gemeint ist, ist mir nicht ganz klar...
habe noch eine Datei hochgeladen mit den ersten KW des Jahres 2000 zur Veranschaulichung...
AW: Schleifen
05.12.2020 09:13:32
Fennek
Hallo,
aus der Datei kann man mit
=RECHTS(A13;6)&RECHTS(B13;1)&RECHTS(C13;2)&RECHTS(D13;1)
einen Index kontruieren. Für die Zeile 13 ist das
2000011161
Mit dieser Schleife kann man alle möglichen Varianten erzeugen:

for Y = 2000 to 2020
for KW = 1 to 52
for BL = 1 to 9
for Alt = 1 to 20
for Gn = 1 to 2
Damit es bei diesen Daten relativ schnell geht, sollte alles in Arrays und Dictionaries berechnet werden.
Ich hoffe, Du hast genügend Erfahrung in VBA, um Code hier aus dem Forum in der Kopie einer Datei einzufügen und zum Laufen zu bringen. Ansonsten frage einen Freund/Kollegen.
mfg
Anzeige
AW: Schleifen
05.12.2020 09:38:11
Oliver
Danke Fennek - muss gestehen, bis dato verstehe ich nur "Schleife" (=Bahnhof) :)
Aber ich schau mal, was ich mit der Formel machen kann...
VBA ist quasi ein weißes Tuch für mich - bin schon froh, dass ich es da einmal geschafft habe, eine Landkarte mit verschiedenen Teilen nach Zahlenvorgaben einzufärben...
Sg
Oliver
AW: Spezielles Problem mit "fehlenden Daten"
05.12.2020 10:12:49
günther
Moin,
ich kann mir vorstellen, dass das mit PQ lösbar ist. Aber ohne (eine kleine) Muster-xlsx mit einer händischen Lösung denke ich nicht darüber nach.
AW: Spezielles Problem mit "fehlenden Daten"
05.12.2020 10:27:14
Oliver
Hallo Günther!
Habe ja eine XLSX-Datei hochgeladen gestern - hab ich da was verbockt? Oder meinst du was anderes?
Sg
Oliver
Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
05.12.2020 16:13:08
Günther
So Oliver, meine Alternative zu VBA;
ich habe mich einmal auf die Daten (in Sachen KW und Bundesländer) beschränkt, welche du in der *.xlsx geliefert hast. Wie "angedroht", habe ich das mit Power Query gelöst. => https://my.hidrive.com/lnk/cmAGDQd7 ABER: Keine Ahnung, ob es das ist, was du willst…
 
Gruß
Günther  |  mein Excel-Blog
-.-.-.-

Da ich mich nicht mehr über den "eigenwilligen" Hindernislauf beim Foren-Upload ärgern will, stelle ich meine Uploads hier nur noch in meiner DE-Cloud zur Verfügung. Den Link findest du im Beitrags-Text. Abrufe sind natürlich freiwillig und werden selbstredend nicht ausgewertet.


Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
06.12.2020 10:03:51
Oliver
Hallo Günther!
Wenn ich deine Datei öffne, sehe ich etwas ganz anderes, als ich brauche - oder ich versteh da was falsch...
Ich brauche zB für die KALW-200001
- die fehlenden Zeilen der Altersgruppen 1 bis 7, jeweils männlich und weiblich (C11-1 und C11-2)
- danach von den anderen Altersgruppen, wo das nicht so ist, die fehlenden Zeilen für die Altersgruppen mit dem Geschlecht, das fehlt.
Und das brauche ich dann quasi im Originaldokument bis rauf zur KAW-202048 für jede Woche...
hab ich das verständlich ausgedrückt?
Ich brauche quasi pro Kalenderwoche 2 (geschlecht) x 9 (Bundesländer x 20 (Altersgruppen) Zeilen, also 360 Zeilen...
Sg
Oliver
Anzeige
I think, message understood…
06.12.2020 12:46:55
Günther
das hoffe ich zumindest. 720 Datensätze (2 KW), die mit der 0 (null) bei F-ANZ-1 sind die fehlenden. (Ich hätte prinzipiell die Felder leer gelassen, aber für die Auswertung kann das besser sein.)
=> https://my.hidrive.com/lnk/rRAGD8gI
 
Gruß
Günther  |  mein Excel-Blog
AW: I think, message understood…
06.12.2020 13:43:22
Oliver
Danke für deine Mühe, Günter!
Daniel hat mir per Formeln eine perfekte Lösung gezeigt, die ich auch anpassen kann bei Bedarf!
Sg
Oliver
Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
05.12.2020 10:44:53
Daniel
Hi
Der einfachste Ansatz ohne VBA wäre folgender:
1. Erstelle dir einmal die Liste mit allen Datenzeilen und dem Wert 0 in der letzten Spalte.
2. wenn du diese Liste hast, kopierst du sie unter die Liste mit der Auswertung und wendest auf das ganze die Funktion Daten - Datentools - Duplikate Entfernen an, mit den ersten 4 Spalten als Kriterium.
Dann bleiben von der unten angefügten Liste nur die Zeilen übrig, die im oberen Teil fehlen.
Damit du die Liste nicht von Hand erstellen musst, kannst du dir mit Formeln behelfen, die den Benötigten Teilwert auf Basis der Zeilennummer berechnen.
Dabei helfen die Funktionen / (Division) um direkt untereinander liegende Wiederholungen zu erzeugen, und die Funktion REST, um alternierende Wiederholungen zu erzeugen.
Beispielsweise brauchst du jede Kalenderwochenbezeichnung 360x untereinander (9 BL x 20 AG x 2 )
Die Liste der Kalenderwochen kannst du so erzeugen:
="KALW"&Jahr(Datum(2000;1;1)+7*((Zeile(A1)-1)/360)&Text(Kalenderwoche(Datum(2020;1;1)+7*((Zeile(A1)-1)/360);21);"00")
Damit sollte die Zeile mit der ersten Kalenderwoche 360x untereinander stehen, bevor auf die 2. Kalenderwoche gewechselt wird.
Ob ein Jahr 52 oder 53 Wochen hat, wird hier automatisch berücksichtigt.
Für die alternierenden Wiederholungen musst du dann zusätzlich REST verwenden.
Beispiel: wenn du eine Liste brauchst, in der sich die Zahlenfolge 1-4 ständig wiederholt, dan geht das mit der Formel:
=Rest(Zeile(A1)-1;4)+1
Gruß Daniel
Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
06.12.2020 09:23:14
Oliver
Hallo Daniel!
War gestern den ganzen Tag unterwegs, daher erst heute eine Antwort - wollte gerade deinen Weg versuchen, da ich eben kein VBA-User bin normalerweise... :)
Deine Formel kann ich aber nicht einsetzen, da findet Excel sofort einen "Fehler" (in der Formel fehlt eine öffnende oder schließende Klammer und wenn der automatisch korrigiert wird, dann steht #ZAHL! im Feld...
Sg
Oliver
AW: Spezielles Problem mit "fehlenden Daten"
06.12.2020 11:10:05
Daniel
Hi
naja, das war nicht eine Klammer zu wenig, sondern eine zuviel.
hier mal die vollständige Lösung:
als Vorbereitung
1. trenne wie von dir vorgeschlagen die Liste nach einzelnen Bundesländern auf
2. ermittle den Donnerstag der ersten Kalenderwoche der Auswertung
3. berechne dir, wieviele Zeilen pro KW benötigt werden (Geschlechtergruppen * Altersgruppen) = 40
4. berechne dir, wieviele Zeilen jede Tabelle insgesamt benötigt (Anzahl KWs * Geschlechtergruppen * Altersgruppen)
die Anzahl der KWs kannst du dir so berechnen lassen : =(Enddatum - Startdatum) / 7
Lege dir jetzt die Dummyliste an.
mit folgenden Formeln:
A1: mit 40 als Anzahl der Zeilen pro KW und als Datum den Donnerstag der erstn KW (2x eintragen)
="KALW"&JAHR(DATUM(2000;1;6)+7*QUOTIENT(ZEILE(A1)-1;40))&TEXT(KALENDERWOCHE(DATUM(2000;1;6) +7*QUOTIENT(ZEILE(A1)-1;40);21);"00") 

B1: das Bundesland als Fixwert
C1:

="Alter5-"&Quotient(Rest(Zeile(A1)-1;40);2)+1

D1:

="C11-"&REST(ZEILE(A1)-1;2)+1

E1: Festwert 0
diese Formeln ziehst du dann soweit wie benötigt nach unten.
zur Überarbeitung der einzelnen Bundeslandtabellen gehst du dann so vor:
1. Trage in Spalte B den richtigen Bundesland-code ein (in erste Zelle eintragen und Doppelklick auf rechte untere Ecke der Tabelle)
2. kopiere diese Tabelle und füge sie ALS WERT unterhalb der jeweiligen Bundesland-Tabelle ein
3. markiere die gesamte Tabelle und wende die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN auf die ganze Tabelle an, verwende die Spalten A-D als Kriterium
nach diesem Schritt sollten im unteren Teil der Tabelle alle Zeilen gelöscht werden die im oberen Teil vorhanden sind und die die im oberen Teil fehlen, bleiben erhalten
4. ggf durch Sortieren in die richtige Reihenfolge bringen.
das ganze würde auch für die gesamttabelle mit allen Bundesländern funktionieren, aus der Formel von C1 kannst du dir ableiten, wie die Formel für B1 aussehen muss.
Gruß Daniel
Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
06.12.2020 13:41:54
Oliver
Daniel SUPER Danke!
Hat perfekt geklappt - musste nur noch folgende Sachen ändern:
1. Bei der KALW Bezeichnung fehlte ein '-' zwischen KALW und den Zahlen (drum fand er zuerst keine Duplikate, sicherheitshalbe habe ich das "Alter" auch gleich noch zu "ALTER") gemacht
2. Fürs richtige sortieren (Problem der Originaltabelle) musste ich alle Alterswerte unter 10 mit einer 0 vor der einzelnen Zahl ersetzen, da Excel sonst aus zuerst 1, dann 10 bis 19, dann 2, dann 20, dann alle von 3 bis 9 sortiert hat)
Vielen vielen Danke, damit ist mein Problem gelöst - da ich öfters auf Daten derselben Art zugreifen muss, kann ich das auch adaptieren, wenn das Problem woanders auftritt (ich hoff zumindest, dass ich das schaffe...:) )
Lg
Oliver
Anzeige
AW: Spezielles Problem mit "fehlenden Daten"
06.12.2020 19:29:56
Daniel
Hi x
Schön dass ich helfen konnte.
Du könntest dir auch mit Text in Spalten die Werte in Text und Zahl aufteilten und dann nur mit den Zahlenwerten arbeiten, dann funktionierte auch ohne die führende 0.
Gruß Daniel
AW: VBA
05.12.2020 12:51:17
Fennek
Hallo,
Ehrlichkeit ist zwar eigentlich ganz gut, aber Du hast einige Zweifel begründet, ob es Sinn macht, einen VBA-Code zu entwickeln. Trotzdem:

Sub F_en()
Dim DD As Object: Set DD = CreateObject("Scripting.Dictionary")
Data = Cells(1, 1).CurrentRegion
ReDim IX(UBound(Data))
'Index
For i = 2 To UBound(Data)
Alter = Split(Data(i, 3), "-")(1)
IX(i - 2) = Right(Data(i, 1), 6) & Right(Data(i, 2), 1) & _
Format(Alter, "00") & Right(Data(i, 4), 1)
Next i
'nur zur Prüfung
'Cells(2, "G").Resize(UBound(IX)) = Application.Transpose(IX)
'Schleife über alle Möglichkeiten
For Y = 2000 To 2000 '2020
For KW = 1 To 52
For BL = 1 To 9
For Alt = 1 To 20
For Gn = 1 To 2
all = all + 1
iIndex = Y & Format(KW, "00") & BL & Format(Alt, "00") & Gn
If IsError(Application.Match(iIndex, IX, 0)) Then DD.Item(iIndex) =  _
vbNullString
Next Gn
Next Alt
Next BL
Next KW
Next Y
Debug.Print "alle", all, "Dic.count", DD.Count, all - DD.Count
Cells(Rows.Count, 1).End(xlUp).Offset(2).Resize(DD.Count) = Application.Transpose(DD.keys)
Set DD = Nothing
End Sub
In der Beispieldatei fügt der Code fehlende Indices (nur für das Jahr 2000) hinzu. Es könnte sein, dass der Befehl "Application.Transpose" nur 65000 Items verarbeiten kann, also in der Original-Datei einen Error wirft. Kannst Du das testen?
Es fehlt noch die Rückwandlung des Indices in das Datanformat.
mfg
(Bist Du ein "Digital Native?)
AW: VBA
06.12.2020 05:46:28
GraFri
Hallo
Geht bestimmt einfacher, aber es funktioniert.
Option Explicit
' Im Beispielcode wird nur ein Bundesland und nur das Jahr 2000 verarbeitet.
' Mit weiteren Schleifen und einer Berechnung der Kalenderwochen (52 bzw. 53)
' kann das Makro ausgebaut werden.
Private Sub Daten_anordnen()
Dim Daten() As Variant, vohandeneDaten() As Variant
Dim anzDaten As Long, n As Long, xJahr As Long, Zähler As Long
Dim lzDaten As Long, xWoche As Long, xAlter As Long, xGeschlecht As Long
Dim TMP As String
' Alle Daten aus 'Kopie von OGD_rate_kalwo_GEST_K'
With Sheets("Kopie von OGD_rate_kalwo_GEST_K")
' Letzte Zeile mit Daten der Spalte A
lzDaten = .Cells(.Rows.Count, 1).End(xlUp).Row
' Bereich in Array 'alleDaten' einlesen, Erstes Element ist dann vohandeneDaten(1,1)
vohandeneDaten = .Range("A2:E" & CStr(lzDaten)).Value
End With
' Wieviele Daten sind vorhanden
anzDaten = UBound(vohandeneDaten) - LBound(vohandeneDaten) + 1
' Größe des benötigten Arrays festlegen ( 52 (Wochen) x 20 (Alter) x 2 (Geschlecht) )
' Spalte A bis Spalte E
ReDim Daten(1 To 2080, 1 To 5)
' Jahr festlegen
xJahr = 2000
For xWoche = 1 To 52                ' 52 Wochen eventuell auf 53 ändern
For xAlter = 1 To 20            ' Alter von 1 bis 20
For xGeschlecht = 1 To 2    ' Geschlecht 1 oder 2
Zähler = Zähler + 1
' Daten erezugen, auch wenn sie nicht vorhanden sind, Anzahl auf 0 srtellen
If xWoche 

mfg GraFri
AW: VBA
06.12.2020 09:41:05
Oliver
Hallo GraFi!
Hab deinen Code versucht, da kommt aber bei der Ausführung gleich "Fehler beim Kompilieren: Syntaxfehler" bei der Zeile "und Kalenderwoche vorhanden"
Sg
Oliver
AW: VBA
06.12.2020 09:33:06
Oliver
Hi Fennek!
"Native" nicht, aber mit VBA hab ich eig nichts am Hut. Als Fotograf nutze ich andere Sachen digital, aber Excel ist für mich eigentlich nur für mein Hobby, die Statistik, relevant.
Habe versucht deinen Code auszuführen. Bei der Riesendatei stoße ich aber an eine "digitale Grenze" - die 31,7GB freier Arbeitsspeicher reichen nicht aus... (von max. 32GB)...
Sg
Oliver
AW: VBA
06.12.2020 15:00:15
GraFri
Hallo
Nochmal der Code. Funktioniert einwandfrei. Kommentar war für hier zu lang. Habe ihn gekürzt.

Option Explicit
' Im Beispielcode wird nur ein Bundesland und nur das Jahr 2000 verarbeitet.
' Mit weiteren Schleifen und einer Berechnung der Kalenderwochen (52 bzw. 53)
' kann das Makro ausgebaut werden.
Private Sub Daten_anordnen()
Dim Daten() As Variant, vohandeneDaten() As Variant
Dim anzDaten As Long, n As Long, xJahr As Long, Zähler As Long
Dim lzDaten As Long, xWoche As Long, xAlter As Long, xGeschlecht As Long
Dim TMP As String
' Alle Daten aus 'Kopie von OGD_rate_kalwo_GEST_K'
With Sheets("Kopie von OGD_rate_kalwo_GEST_K")
' Letzte Zeile mit Daten der Spalte A
lzDaten = .Cells(.Rows.Count, 1).End(xlUp).Row
' Bereich in Array 'alleDaten' einlesen, Erstes Element ist dann vohandeneDaten(1,1)
vohandeneDaten = .Range("A2:E" & CStr(lzDaten)).Value
End With
' Wieviele Daten sind vorhanden
anzDaten = UBound(vohandeneDaten) - LBound(vohandeneDaten) + 1
' Größe des benötigten Arrays festlegen ( 52 (Wochen) x 20 (Alter) x 2 (Geschlecht) )
' Spalte A bis Spalte E
ReDim Daten(1 To 2080, 1 To 5)
' Jahr festlegen
xJahr = 2000
For xWoche = 1 To 52                ' 52 Wochen eventuell auf 53 ändern
For xAlter = 1 To 20            ' Alter von 1 bis 20
For xGeschlecht = 1 To 2    ' Geschlecht 1 oder 2
Zähler = Zähler + 1
' Daten erezugen, auch wenn sie nicht vorhanden sind, Anzahl auf 0 srtellen
If xWoche 

https://www.herber.de/bbs/user/142116.xlsm
mfg GraFri
AW: VBA
06.12.2020 15:15:18
Oliver
Danke!
hab's anderenorts hier schon geschrieben - Daniel hat mir inzwischen eine "ohne-VBA-Lösung" gebastelt und nähergebracht - damit hat's wunderbar funktioniert!
Sg
Oliver

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige