[EDIT]
To be able to calculate average time, you have to sort data by the date and user and then to "merge" them. What i mean? You have to create another set of data, in which entry time and exit time will be close each other (in one row). A destination sheet should looks like:
A - Name
B - Date
C - Entry time
D - Exit time
E - Time (minutes)
According to below data:
EventNo dtm Name Status
1 2017-08-11 10:46 shibashish Entry
2 2017-08-11 17:50 shibashish Exit
2 2017-08-11 18:50 shibashish Entry
5 2017-01-12 19:00 ranjan Entry
6 2017-01-12 19:21 ranjan Exit
7 2017-08-11 20:05 ranjan Entry
7 2017-08-11 20:05 shibashish Exit
8 2017-08-11 21:55 ranjan Exit
9 2017-08-12 12:46 shibashish Entry
10 2017-08-12 14:35 shibashish Exit
11 2017-08-12 16:20 shibashish Entry
12 2017-08-12 18:07 shibashish Exit
A macro should looks like:
Option Explicit
Sub MergeEvents()
Dim srcWsh As Worksheet, dstWsh As Worksheet, pvtWsh As Worksheet
Dim i As Long, j As Long
On Error GoTo Err_MergeEvents
Set srcWsh = ThisWorkbook.Worksheets(1)
i = srcWsh.Range("D" & srcWsh.Rows.Count).End(xlUp).Row
srcWsh.Sort.SortFields.Clear
srcWsh.Range("A1:D" & i).Sort Key1:=srcWsh.Range("C1"), Order1:=xlAscending, _
Key2:=srcWsh.Range("B1"), Order2:=xlAscending, Header:=xlYes
Set dstWsh = ThisWorkbook.Worksheets(2)
With dstWsh
.UsedRange.Clear
.Range("A1") = "Name"
.Range("B1") = "Date"
.Range("C1") = "Entry time"
.Range("D1") = "Exit time"
.Range("E1") = "Time (minutes)"
.Range("A1:E1").Font.Bold = True
End With
i = 2
j = 2
Do While srcWsh.Range("A" & i) <> ""
If srcWsh.Range("D" & i) Like "Exit*" Then GoTo SkipNext
dstWsh.Range("A" & j) = srcWsh.Range("C" & i)
dstWsh.Range("B" & j) = CDate(Format(srcWsh.Range("B" & i), "yyyy-MM-dd"))
dstWsh.Range("C" & j) = Format(srcWsh.Range("B" & i), "HH:nn")
dstWsh.Range("D" & j) = Format(srcWsh.Range("B" & i + 1), "HH:nn")
dstWsh.Range("E" & j) = DateDiff("n", CDate(srcWsh.Range("B" & i)), CDate(srcWsh.Range("B" & i + 1)))
j = j + 1
SkipNext:
i = i + 1
Loop
srcWsh.UsedRange.Columns.AutoFit
Set pvtWsh = ThisWorkbook.Worksheets(3)
pvtWsh.Cells.Clear
AddMyPivot dstWsh, dstWsh.Name & "!" & dstWsh.Range("A1:E" & j - 1).Address, pvtWsh.Range("A3")
pvtWsh.Activate
Exit_MergeEvents:
On Error Resume Next
Set srcWsh = Nothing
Set dstWsh = Nothing
Set pvtWsh = Nothing
Exit Sub
Err_MergeEvents:
MsgBox Err.Description, vbExclamation, "Error no. " & Err.Number
Resume Exit_MergeEvents
End Sub
Sub AddMyPivot(ByRef dstWsh As Worksheet, ByVal src As String, ByVal dstLocation As Range)
Dim i As Integer, pc As PivotCache, pt As PivotTable
Set pc = dstWsh.Parent.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=src, Version:=xlPivotTableVersion14)
Set pt = pc.CreatePivotTable(TableDestination:=dstLocation, TableName:="mypt1")
With pt.PivotFields("Name")
.Orientation = xlRowField
.Position = 1
End With
With pt.PivotFields("Date")
.Orientation = xlColumnField
.Position = 1
End With
pt.AddDataField pt.PivotFields("Time (minutes)"), "Average time (minutes)", xlAverage
dstWsh.Parent.ShowPivotTableFieldList = False
End Sub
Results:
Sheet2 (data which will be used by pivot table)
Name Date Entry time Exit time Time (minutes)
ranjan 2017-01-12 19:00 19:21 21
ranjan 2017-08-11 20:05 21:55 110
shibashish 2017-08-11 10:46 17:50 424
shibashish 2017-08-11 18:50 20:05 75
shibashish 2017-08-12 12:46 14:35 109
shibashish 2017-08-12 16:20 18:07 107
Sheet3
Average time (minutes)
2017-01-12 2017-08-11 2017-08-12 Total
ranjan 21 110 65,5
shibashish 249,5 108 178,75
Total 21 203 108 141
Final note: This is a bonus for you. Next time - do not expect that some one will do the job for you.