Supportnet Computer
Planet of Tech

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

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

Antwort 3 von MK-Power

Hey, danke für die Hilfe es klappt wirklich einmandfrei!
Echt super Forum und super Leute hier!
MfG
Marcel

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: