Korrektur der Excel-Arbeitszeitliste nach Zeitüberschreitung pro Benutzer und Datum

691
NoobPro

Ich habe das:

schlecht formatierter Tisch

was schwer zu lesen ist, bedeutet "Ich" Zeit in und "O" bedeutet Zeitüberschreitung.

Ich möchte es so umwandeln:

diese

Ich möchte jedes Mal ein- und ausschalten, um die jeweilige Mitarbeiter-ID und das entsprechende Datum festzulegen. Vielen Dank

BEARBEITEN

I und O in der ersten Tabelle sind nicht notwendigerweise abwechselnd, es können 3 I sein, bevor das jeweilige O angezeigt wird.

Das Ergebnis sollte Folgendes sein: 1. Fehlende Zeitwerte für ein- und ausgehende Zeit sollten als leer angezeigt werden. 3. die t

0
Mögliches Duplikat von [So kombinieren Sie Werte aus mehreren Zeilen in einer einzigen Zeile in Excel?] (Https://superuser.com/questions/395126/wie- einreihig in Excel Scott vor 5 Jahren 0
Erstellen Sie einen Pivot, verwenden Sie die Angestellten-Nummer und das Datum als Zeilen und die minimale und maximale Zeit für die Zeit als Werte für time in und time PeterH vor 5 Jahren 0
kann es mehrere ins zum selben datum geben? Umgekehrt mehrere Outs am selben Tag? Forward Ed vor 5 Jahren 0
@ForwardEd, ja und es kann auch kein In-Time für ein bestimmtes Datum geben, hat aber eine OUT-Zeit NoobPro vor 5 Jahren 0

2 Antworten auf die Frage

0
Lee Mac

Erstellen Sie eine Pivot-Tabelle aus Ihren Daten mit der folgenden Konfiguration:

Pivot

Sie müssen den Wert wahrscheinlich auch als Uhrzeit formatieren:

Format

Möglicherweise möchten Sie die Pivot-Tabelle auch in Tabellenform anzeigen, um das gewünschte Ergebnis zu erzielen:

tabellarisch

Deaktivieren Sie auch die Anzeige von Zwischensummen und Gesamtsummen:

Zwischensummen

Grandtotals

Beachten Sie, dass, wenn es mehrere ist In/ OutDatensätze pro Tag pro Mitarbeiter, dies nur den neuesten zeigen Inoder OutDatensatz (kraft mit der Aggregation Max).

Hey, es funktioniert, aber das Ergebnis muss bearbeitet werden können. Es tut mir leid, ich habe gerade meinen Beitrag bearbeitet NoobPro vor 5 Jahren 0
0
Forward Ed

Ich habe ein wenig hässliches VBA geschrieben, aber es scheint zu funktionieren. Es gibt Raum für die Optimierung, da ich den Code wiederholt sehe. Es ist derzeit schwer codiert, um in die 7-Spalte-2. Zeile zu gelangen.

Option Explicit  Sub I_O_single_line()  Dim rng As Range Dim counter1 As Integer, counter2 As Integer, counter3 As Integer, LastRow As Integer, WriteRow As Integer, HeaderRow As Integer Dim wkb As Workbook Dim sht As Worksheet Dim Arr() As Variant  Set wkb = ActiveWorkbook Set sht = wkb.Worksheets(1)  'Last row of header row information 'set to 0 if no header row  HeaderRow = 1  'initializing the first row that the sorted data will be written to WriteRow = HeaderRow + 1  'Finds the last used row With sht If Application.WorksheetFunction.CountA(.Cells) <> 0 Then LastRow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row Else LastRow = 1 End If End With  'Resize the array to match your data ReDim Arr(LastRow - HeaderRow, 4)  'Copy the contents of the source data into an arr Arr() = Range(Cells(HeaderRow + 1, 1), Cells(LastRow, 4))  'iterate through each row of the source data For counter1 = 1 To (LastRow - HeaderRow) 'first row of data is potentially a special case If counter1 = 1 Then 'Write out ID and Date For counter2 = 1 To 2 Cells(WriteRow, 6 + counter2) = Arr(counter1, counter2) Next counter2 'Write out Time in appropriate column If Arr(counter1, 4) = "I" Then Cells(WriteRow, 6 + 3) = Arr(counter1, 3) ElseIf Arr(counter1, 4) = "O" Then Cells(WriteRow, 6 + 4) = Arr(counter1, 3) WriteRow = WriteRow + 1 End If 'Check to see if ID changed ElseIf Arr(counter1 - 1, 1) = Arr(counter1, 1) Then 'Check to see if Date has changed If Arr(counter1 - 1, 2) = Arr(counter1, 2) Then 'Write out time in appropriate column If Arr(counter1, 4) = "I" Then 'Check if previous entry is a repeat If Arr(counter1 - 1, 4) = Arr(counter1, 4) Then 'Advance Write a new line WriteRow = WriteRow + 1 End If For counter2 = 1 To 3 Cells(WriteRow, 6 + counter2) = Arr(counter1, counter2) Next counter2 ElseIf Arr(counter1, 4) = "O" Then 'Check if previous entry is a repeat If Arr(counter1 - 1, 4) = Arr(counter1, 4) Then 'Write ID and Date For counter2 = 1 To 2 Cells(WriteRow, 6 + counter2) = Arr(counter1, counter2) Next counter2 End If Cells(WriteRow, 6 + 4) = Arr(counter1, 3) WriteRow = WriteRow + 1 End If 'What to do if date has changed Else If Arr(counter1 - 1, 4) = "I" Then WriteRow = WriteRow + 1 End If 'Write ID and Date For counter2 = 1 To 2 Cells(WriteRow, 6 + counter2) = Arr(counter1, counter2) Next counter2 'Write out Time in appropriate column If Arr(counter1, 4) = "I" Then Cells(WriteRow, 6 + 3) = Arr(counter1, 3) ElseIf Arr(counter1, 4) = "O" Then Cells(WriteRow, 6 + 4) = Arr(counter1, 3) WriteRow = WriteRow + 1 End If End If 'What to do if ID has change Else If Arr(counter1 - 1, 4) = "I" Then WriteRow = WriteRow + 1 End If 'Write ID and Date For counter2 = 1 To 2 Cells(WriteRow, 6 + counter2) = Arr(counter1, counter2) Next counter2 'Write out Time in appropriate column If Arr(counter1, 4) = "I" Then Cells(WriteRow, 6 + 3) = Arr(counter1, 3) ElseIf Arr(counter1, 4) = "O" Then Cells(WriteRow, 6 + 4) = Arr(counter1, 3) WriteRow = WriteRow + 1 End If End If Next counter1 End Sub 

Hey, es funktioniert, aber die Ichs und O's in der ersten Tabelle sind nicht notwendigerweise abwechselnd. Es tut mir leid, ich habe gerade meinen Beitrag bearbeitet NoobPro vor 5 Jahren 0