Supportnet / Forum / Tabellenkalkulation
Kopieren und sortieren von Daten aus einer Excel-Datei in eine ander
Frage
Hallo,
ich hab folgendes Problem.
Ich habe eine Datei mit Arbeitszeiten von verschiedenen Leuten, alles sortiert nach Arbeitsstation und der verbrachten Zeit an dieser.
z.B:
Meier/Peter/25.04.2006/Maschine1/120min
Meier/Peter/25.04.2006/Maschine2/60min
Müller/Frank/25.04.2006/Maschine1/30min
Müller/Frank/26.04.2006/Maschine1/180min
Nun möchte ich mir gerne eine Übersicht bauen, welche mir wöchentlich folgende Übersicht gibt (in eine neue Excel-Datei):
Kalenderwoche/Name/Gesamt-Stunden/Stundenssatz(fester Wert)/Gesamtbetrag
Also eine Übersicht wieviel jeder Mitarbeiter pro Woche gearbeitet hat (in Stunden) (die Maschinen sind in dem Fall nicht von Bedeutung).
Kann mir dabei jemand Tipps geben? Das öffnen der Datei von der anderen Datei aus mit Makro klappt schon, aber wie wähle ich die richtigen Spalten und Zeilen aus und kopiere diese? Und wie mache ich das mit der Kalenderwoche, kann Excel das herausfinden?
Mit freundlichen Grüßen
Marcel
Antwort 1 von nighty
hi Marcel :)
hier ein beispiel
spalten a c d e f sind besetzt nach deinen angaben
nach aufforderung einer eingabe der kalenderwoche,wird diese in sheet 2 nach angestellten summiert dargestellt
gruss nighty
Option Explicit
Sub AngestellteKalenderWochenAddierung()
Dim zaehler As Long
Dim index As Integer
Dim Kalenderwoche As Integer
ReDim angestellteVorn(0)
ReDim angestellteNachN(0)
ReDim angestellteZeit(0)
index = 0
Kalenderwoche = InputBox(Prompt:="Kalenderwoche")
Sheets(1).Rows("2:" & Rows.Count).Sort Key1:=Sheets(1).Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For zaehler = 2 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Sheets(1).Cells(zaehler, 1) <> Sheets(1).Cells(zaehler - 1, 1) And Sheets(1).Cells(zaehler, 2) <> Sheets(1).Cells(zaehler - 1, 2) Then
index = index + 1
ReDim Preserve angestellteVorn(index)
ReDim Preserve angestellteNachN(index)
ReDim Preserve angestellteZeit(index)
angestellteNachN(index) = Sheets(1).Cells(zaehler, 1)
angestellteVorn(index) = Sheets(1).Cells(zaehler, 2)
If Format(CDate(Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Sheets(1).Cells(zaehler, 5)
End If
Else
If Format(CDate(Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Sheets(1).Cells(zaehler, 5)
End If
End If
Next zaehler
For zaehler = 1 To index
Sheets(2).Cells(zaehler, 1) = angestellteVorn(zaehler)
Sheets(2).Cells(zaehler, 2) = angestellteNachN(zaehler)
Sheets(2).Cells(zaehler, 3) = angestellteZeit(zaehler)
Next zaehler
End Sub
hier ein beispiel
spalten a c d e f sind besetzt nach deinen angaben
nach aufforderung einer eingabe der kalenderwoche,wird diese in sheet 2 nach angestellten summiert dargestellt
gruss nighty
Option Explicit
Sub AngestellteKalenderWochenAddierung()
Dim zaehler As Long
Dim index As Integer
Dim Kalenderwoche As Integer
ReDim angestellteVorn(0)
ReDim angestellteNachN(0)
ReDim angestellteZeit(0)
index = 0
Kalenderwoche = InputBox(Prompt:="Kalenderwoche")
Sheets(1).Rows("2:" & Rows.Count).Sort Key1:=Sheets(1).Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For zaehler = 2 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Sheets(1).Cells(zaehler, 1) <> Sheets(1).Cells(zaehler - 1, 1) And Sheets(1).Cells(zaehler, 2) <> Sheets(1).Cells(zaehler - 1, 2) Then
index = index + 1
ReDim Preserve angestellteVorn(index)
ReDim Preserve angestellteNachN(index)
ReDim Preserve angestellteZeit(index)
angestellteNachN(index) = Sheets(1).Cells(zaehler, 1)
angestellteVorn(index) = Sheets(1).Cells(zaehler, 2)
If Format(CDate(Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Sheets(1).Cells(zaehler, 5)
End If
Else
If Format(CDate(Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Sheets(1).Cells(zaehler, 5)
End If
End If
Next zaehler
For zaehler = 1 To index
Sheets(2).Cells(zaehler, 1) = angestellteVorn(zaehler)
Sheets(2).Cells(zaehler, 2) = angestellteNachN(zaehler)
Sheets(2).Cells(zaehler, 3) = angestellteZeit(zaehler)
Next zaehler
End Sub
Antwort 2 von nighty
hi Marcel :)
ausgehend das beide mappen geoeffnet sind
Workbooks(1).sheet(1)
spalte a = Meier
spalte b = Peter
spalte c = 25.04.2006
spalte d = Maschine1
spalte e = 120
Workbooks(2).sheet(1)
spalte a = Meier
spalte b = Peter
spalte c = addierte zeit der angegebenen kalenderwoche
gruss nighty
Option Explicit
Sub AngestellteKalenderWochenAddierung()
Dim zaehler As Long
Dim index As Integer
Dim Kalenderwoche As Integer
ReDim angestellteVorn(0)
ReDim angestellteNachN(0)
ReDim angestellteZeit(0)
index = 0
Kalenderwoche = InputBox(Prompt:="Kalenderwoche")
Workbooks(1).Sheets(1).Rows("2:" & Rows.Count).Sort Key1:=Workbooks(1).Sheets(1).Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For zaehler = 2 To Workbooks(1).Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Workbooks(1).Sheets(1).Cells(zaehler, 1) <> Workbooks(1).Sheets(1).Cells(zaehler - 1, 1) And Workbooks(1).Sheets(1).Cells(zaehler, 2) <> Workbooks(1).Sheets(1).Cells(zaehler - 1, 2) Then
index = index + 1
ReDim Preserve angestellteVorn(index)
ReDim Preserve angestellteNachN(index)
ReDim Preserve angestellteZeit(index)
angestellteNachN(index) = Workbooks(1).Sheets(1).Cells(zaehler, 1)
angestellteVorn(index) = Workbooks(1).Sheets(1).Cells(zaehler, 2)
If Format(CDate(Workbooks(1).Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Workbooks(1).Sheets(1).Cells(zaehler, 5)
End If
Else
If Format(CDate(Workbooks(1).Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Workbooks(1).Sheets(1).Cells(zaehler, 5)
End If
End If
Next zaehler
For zaehler = 1 To index
Workbooks(2).Sheets(1).Cells(zaehler + 1, 1) = angestellteVorn(zaehler)
Workbooks(2).Sheets(1).Cells(zaehler + 1, 2) = angestellteNachN(zaehler)
Workbooks(2).Sheets(1).Cells(zaehler + 1, 3) = angestellteZeit(zaehler)
Next zaehler
End Sub
ausgehend das beide mappen geoeffnet sind
Workbooks(1).sheet(1)
spalte a = Meier
spalte b = Peter
spalte c = 25.04.2006
spalte d = Maschine1
spalte e = 120
Workbooks(2).sheet(1)
spalte a = Meier
spalte b = Peter
spalte c = addierte zeit der angegebenen kalenderwoche
gruss nighty
Option Explicit
Sub AngestellteKalenderWochenAddierung()
Dim zaehler As Long
Dim index As Integer
Dim Kalenderwoche As Integer
ReDim angestellteVorn(0)
ReDim angestellteNachN(0)
ReDim angestellteZeit(0)
index = 0
Kalenderwoche = InputBox(Prompt:="Kalenderwoche")
Workbooks(1).Sheets(1).Rows("2:" & Rows.Count).Sort Key1:=Workbooks(1).Sheets(1).Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For zaehler = 2 To Workbooks(1).Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Workbooks(1).Sheets(1).Cells(zaehler, 1) <> Workbooks(1).Sheets(1).Cells(zaehler - 1, 1) And Workbooks(1).Sheets(1).Cells(zaehler, 2) <> Workbooks(1).Sheets(1).Cells(zaehler - 1, 2) Then
index = index + 1
ReDim Preserve angestellteVorn(index)
ReDim Preserve angestellteNachN(index)
ReDim Preserve angestellteZeit(index)
angestellteNachN(index) = Workbooks(1).Sheets(1).Cells(zaehler, 1)
angestellteVorn(index) = Workbooks(1).Sheets(1).Cells(zaehler, 2)
If Format(CDate(Workbooks(1).Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Workbooks(1).Sheets(1).Cells(zaehler, 5)
End If
Else
If Format(CDate(Workbooks(1).Sheets(1).Cells(zaehler, 3)), "ww", vbMonday, vbFirstFourDays) = Kalenderwoche Then
angestellteZeit(index) = angestellteZeit(index) + Workbooks(1).Sheets(1).Cells(zaehler, 5)
End If
End If
Next zaehler
For zaehler = 1 To index
Workbooks(2).Sheets(1).Cells(zaehler + 1, 1) = angestellteVorn(zaehler)
Workbooks(2).Sheets(1).Cells(zaehler + 1, 2) = angestellteNachN(zaehler)
Workbooks(2).Sheets(1).Cells(zaehler + 1, 3) = angestellteZeit(zaehler)
Next zaehler
End Sub
Antwort 3 von MK-Power
Hey, danke für die Hilfe es klappt wirklich einmandfrei!
Echt super Forum und super Leute hier!
MfG
Marcel
Echt super Forum und super Leute hier!
MfG
Marcel

