Você deseja identificar as linhas para o qual há pelo menos uma outra linha com o mesmo UserID para o qual os intervalos de tempo In / Out se sobrepõem. Isto é bastante simples (pelo menos, uma vez que você sabe a resposta. O primeiro passo é descobrir que intervalo Iniciar 1 / End 1 sobrepõe-se ao intervalo Start 2 / End 2 se e somente se Iniciar 1 < End 2 e End 1 > Inicie 2 . (Isso é fácil de ver se você pensar nisso; mais fácil se você desenhá-lo.) Então, para cada linha, queremos contar as linhas no registro de login / logout para o qual o acima é verdadeiro, e o UserID é igual ao UserID para essa linha. Isso é simplesmente
=COUNTIFS(A$2:A$9, "<"&B2, B$2:B$9, ">"&A2, C$2:C$9, "="&C2)
para o layout de dados original
(onde TimeIn é Coluna A
, TimeOut é Coluna B
,
e Usuário é Coluna C
).
Isso irá avaliar no mínimo 1, porque cada linha se sobrepõe a si mesma.
Você quer ver quais linhas se sobrepõem a outras linhas, então fazemos
=IF(COUNTIFS(B$2:B$9, "<"&C2, C$2:C$9, ">"&B2, D$2:D$9, "="&D2) > 1, "Overlap", "")
Depois que eu mudo o TimeIn para o Registro # 7 (User Dave no PC42) das 16:46 às 16:56 para eliminar a sobreposição com o Registro # 2 ( também User Dave no PC42), que eu presumo não ter sido intencional, recebo os seguintes resultados:
quais,acredito,sãooquevocêquer.
OK,seforpossíveleválidoparaumusuárioestarlogadoemumúnicoPCparaperíodosdetemposobrepostos(comoDavefaznoPC42nosregistros2e7),evocênãoquerqueissosejacontadocomosobreposiçõesentãoprecisamosmodificarnossafórmulaparacontarapenaslinhasondeoPCédiferente:
=IF(COUNTIFS(A$2:A$9,"<"&B2, B$2:B$9, ">"&A2, C$2:C$9, "="&C2, D$2:D$9, "<>"&D2) > 0, "Overlap", "")
Note que temos que alterar o teste de > 1
para > 0
porque as linhas não se sobrepõem mais.