excel - 当后续行中的单元格填写完成任务的人的ID时,如何在开始时间旁边的单元格中输入任务的“结束时间”?
问题描述
我正在设置一个电子表格来跟踪有关员工完成的任务的信息。我希望这个工作的方式是员工将在每个任务开始时将他们的 ID 扫描到电子表格中。
我设置了一张表格,允许将员工 ID 扫描/输入到 D 列中,并使用当前日期/时间自动填充相邻的单元格(E 列)。
我正在努力的一点是进入任务的“结束时间”;当同一员工返回后续工作并将其徽章扫描到工作表中时,我希望将上一个任务的完成时间输入与该任务相关联的行的 F 列。
即,将徽章扫描到工作表中的后一行会触发员工执行的上一个任务的“结束”,因此第二个/下一个任务的开始时间是第一个/上一个任务的完成时间。
我对 VBA 的了解非常有限,我想不出一个简单的方法来实现这一点。
该表如下所示: https ://imgur.com/a/uz6unv7
我在网上找到了一些我试图编辑的代码。我正在尝试处理的基础是代码: - 在 D 列中搜索给定员工 ED 的值 - 当找到匹配的 ID 时,将 E 列从“找到的行”复制到原始的 F 列排。- 然后它应该遍历整个 D 列,在匹配 ID 的每个实例处停止,如上所述复制和粘贴,然后继续遍历该列。
下面的代码:
'Sub FindCopy()
Dim calc As Long
Dim Cel As Range
Dim LastRow As Long
Dim rFound As Range
Dim LookRange As Range
Dim CelValue As Variant
' Speed
calc = Application.Calculation
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Get Last row of data Sheet2, Col D (Stager ID)
LastRow = Sheet2.Cells(Rows.Count, 4).End(xlUp).Row
' Set range to look in (Stager ID)
Set LookRange = Sheet2.Range("D2:D" & LastRow)
' Loop on each value (cell)
For Each Cel In LookRange
' Get value to find
CelValue = Cel.Value
' Look on sheet2
With Sheet2
' Allow not found error
On Error Resume Next
Set rFound = .Cells.Find(What:=CelValue, _
After:=.Cells(1, 1), LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
' Reset
On Error GoTo endo
' Not found, go next
If rFound Is Nothing Then
GoTo nextCel
Else
' Found. Copy Sheet2, Col E to Sheet2 found Row, Col F
Sheet2.Cells(Cel.Row, 6).Value = Sheet2.Cells(rFound.Row, 5).Value
End If
End With
nextCel:
Next Cel
'Reset
endo:
With Application
.Calculation = calc
.ScreenUpdating = True
End With
End Sub
不幸的是,目前它只是将 E 列的第一个值粘贴到与该员工 ID 关联的所有行的 F 列。
我希望它独立确定每个任务的完成时间,以便我可以计算每个任务的持续时间。
有谁知道如何更正我正在使用的代码或其他(可能更简单的方法)来实现上述目标?是否可以将其设置为填充“实时”,即输入员工 ID?
解决方案
如果我对您的理解正确,您可以使用列中的公式来执行此操作,以End Time
查找该 Employee 下次在Employee ID
列中列出的时间。
如果您的桌子在里面,F1:F100
那么类似:
H2: =IFERROR(INDEX(Start_Time,AGGREGATE(15,6,1/(F2=F3:$F$100)*ROW(F3:$F$100),1)-1),"")
算法:
F2=F3:$F$100
: 查找 F2 中 ID 的所有匹配项,从下一行开始1/(…)
:更改FALSE
对错误的响应* ROW(…)
计算匹配 ID 的行AGGREGATE
返回最小的行号,这将是下一个匹配IFERROR
在没有 NEXT 匹配的情况下返回空白
推荐阅读
- postgresql - Kubernetes 集群中的 SonarQube + Postgresql 连接被拒绝错误
- karate - 空手道 UI 测试无法作为参考评估失败
- post - WSO2 Integrator 托管的 REST API 为 POST 调用调用另一个 REST API 不起作用
- python - keras 功能 api 和泄漏 relu 的问题
- javascript - Javascript 错误/不同的日期时间是从 UTC 转换日期中提取的
- visual-studio - 英语为默认语言,但评论为另一种语言
- javascript - 从 Excel 中读取具有日期数据类型的数据
- javascript - 如何使用 Javascript 将 JSON 中的值添加到表中?
- android - 为空时更改 RecyclerView 数据
- reactjs - 将 TypeScript 类型作为道具传递给 React 组件?