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

Makro zur Datenstrukturierung

Makro zur Datenstrukturierung
01.08.2022 20:30:32
Martin
Hallo zusammen,
ich zerbreche mir seit gestern den Kopf und würde gern ein kleines Makro schreiben, aber ich komme nicht mal auf einen Ansatz.
Folgendes Problem: Ich bekomme über eine automatische Datenabfrage Bedarfszahlen zu verschiedenen Materialnummern.
Die Daten haben dabei aber eine etwas schwierige Struktur: In den Zeilen sind die Materialnummern und in den Spalten dann die Bedarfszahlen entlang einer Zeitachse.
Das Schwierige dabei ist, dass die ersten 5-15 Werte Bedarfszahlen auf Tagesbasis sind, dann folgen ca. 5-10 Bedarfe auf Wochenbasis und zum Schluss noch ca. 4-5 Bedarfe auf Monatsbasis. Leider bekomme ich die Daten in keiner anderen Form.
Ich habe euch eine Beispieldatei hochgeladen: https://www.herber.de/bbs/user/154473.xlsx
Ich möchte alle Bedarfszahlen einheitlich auf Monatsbasis darstellen, am Besten automatisch mit einem Makro. Dafür müssten die Tages&Wochenwerte anteilig verrechnet werden ... also z.B. KW35 müsste zu 3/7 auf August und zu 4/7 auf September verrechnet werden und so weiter.
Ich bin in VBA eher Anfänger und habe leider überhaupt keinen Plan, wie ich das Problem überhaupt angehen soll. Habt ihr evtl. Anregungen für mich bzw. habt ihr schon mal ein ähnliches Makro geschrieben?
Danke schon mal und Viele Grüße
Martin

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zur Datenstrukturierung
02.08.2022 10:43:41
ChrisL
Hi Martin
Ausgangslage und Soll sind in deiner Datei identisch. Hier trotzdem mal ein Versuch die Daten zu normieren.
Für die Kalenderwochen gibt es übrigens diverse unterschiedliche Systeme und man müsste darauf achten, dass man für die Rückrechnung das gleiche System verwendet.

Sub normieren()
Dim intSpalte As Integer, lngZeile As Long
Dim intLetzteS As Integer, lngLetzteZ As Long
Dim intJahr As Integer, intKW As Integer
Dim datStart As Date, datEnde As Date
Dim intDatumDiff As Integer
' wahlweise fix oder dynamisch
'intJahr = 2022
intJahr = Year(Now())
With Worksheets("Ausgangsbasis")
intLetzteS = .Cells(1, .Columns.Count).End(xlToLeft).Column
lngLetzteZ = .Cells(.Rows.Count, 1).End(xlUp).Row
For intSpalte = intLetzteS To 2 Step -1
If .Cells(1, intSpalte) Like "KW?" Then
intKW = Right(.Cells(1, intSpalte), 2)
datStart = KWinDatum(intKW, intJahr)
datEnde = datStart + 6
If Day(datEnde) 

Private Function KWinDatum(intKW As Integer, intJahr As Integer) As Date
' Quelle: https://www.herber.de/excelformeln/src/call.pl?idx=186
KWinDatum = DateSerial(intJahr, 1, 7 * intKW - 3 - WorksheetFunction.Weekday(DateSerial(intJahr, 0, 0), 3))
End Function
cu
Chris
Anzeige
AW: Makro zur Datenstrukturierung
02.08.2022 11:25:30
Daniel
Hi
ich würde das mit einer Funktion lösen.
also sowas ähnliches wie SummeWenn.
Dabei musst du natürlich die unterschiedlichen Fälle unterscheiden (Tag, KW, Monat)
hier mal für deinen Fall, kopiere dir diesen Code in ein allgemeines Modul

Function SummeWennMonat(Datum As Range, Monat As String, Bedarf As Range) As Double
Dim arrBed
Dim arrDat
Dim Summe As Double
Dim Z As Long, S As Long
Dim Datum1 As Date
Dim Datum2 As Date
Dim KW1 As Long
Dim KW2 As Long
Dim KW As Long
Dim AnzahlTage1 As Long
Dim AnzahlTage2 As Long
arrBed = Bedarf.Value
arrDat = Datum.Value
For Z = 1 To UBound(arrBed, 1)
For S = 1 To UBound(arrBed, 2)
If arrDat(Z, S) Like "##.##" Then
If Right(arrDat(Z, S), 2) = Left(Monat, 2) Then Summe = Summe + arrBed(Z, S)
ElseIf arrDat(Z, S) = Monat Then
Summe = Summe + arrBed(Z, S)
ElseIf arrDat(Z, S) Like "KW*" Then
KW = CLng(Mid(arrDat(Z, S), 3))
Datum1 = CDate(Monat)
Datum2 = WorksheetFunction.EoMonth(Datum1, 0)
KW1 = WorksheetFunction.WeekNum(Datum1, 21)
KW2 = WorksheetFunction.WeekNum(Datum2, 21)
AnzahlTage1 = 8 - WorksheetFunction.Weekday(Datum1, 2)
AnzahlTage2 = WorksheetFunction.Weekday(Datum2, 2)
If KW > KW1 And KW 
schreibe dann in die Zelle T2 diese Formel und ziehe sie bis X11

=SummeWennMonat($B$1:$S$1;T$1;$B2:$S2)
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige