excel - 如何登记产品在工厂停留的时间?
问题描述
我需要知道产品在设施中的停留时间。
它适用于国际机场的主要地勤人员。
数据集与此类似:
航空公司代码 | 航班 | 飞行法。约会时间 | 类型 | 数字 | 所有者 | 飞行方向 |
---|---|---|---|---|---|---|
AB | AB1234 | 2021 年 10 月 10 日 | 美国广播公司 | 12345 | AB | 出境 |
AB | AB1234 | 13-10-2021 | 美国广播公司 | 12345 | AB | 入站 |
AB | AB1234 | 15-10-2021 | 美国广播公司 | 12345 | AB | 出境 |
光盘 | CD3456 | 2021 年 9 月 10 日 | 高手 | 54321 | 光盘 | 入站 |
光盘 | CD3456 | 2021 年 14 月 10 日 | 高手 | 54321 | 光盘 | 出境 |
光盘 | CD3456 | 15-10-2021 | 高手 | 54321 | 光盘 | 入站 |
我混合和匹配的代码。
Sub MultipleSearch()
Sheet9.Activate
Dim ULD As String:
Dim ULD_Procedure As Variant
Dim i As Long
Dim rgSearch As Range
Dim ILastCol As Long
Dim cell As Range
Dim ColumnResult As Variant
Dim Result As Variant
Dim DateFlight As Variant
With Sheet9
LastRow = WorksheetFunction.CountA(Range("B:B"))
For i = 1 To LastRow
ULD = Cells(i, 2).Value
Sheet3.Activate
' Get search range
Set rgSearch = Range("I:I")
Set cell = rgSearch.Find(ULD)
' Store first cell address
Dim firstCellAddress As Variant
firstCellAddress = cell.Address
' Find all cells containing set ULD number
Do
Sheet9.Activate
ILastCol = (1 + Cells(i, Columns.Count).End(xlToLeft).Column)
'Adjust CellAdres to only give me the correct Row number
RowResult = cell.Address
Result = Replace(RowResult, "$I$", "")
Sheet3.Activate
DateFlight = Cells(Result, 4).Value
Sheet9.Activate
Cells(i, ILastCol).Value = DateFlight
Set cell = rgSearch.FindNext(cell)
Loop While firstCellAddress <> cell.Address
Next i
If cell Is Nothing Then
Debug.Print "Not found"
End If
End With
End Sub
此代码获取 ULD 进入系统或离开的日期,并且使用“基本”Excel 公式,我可以测量 ULD 之间的时间。但顺序不正确,这是因为并非所有 ULD 都以 Inbound 方式进入系统。有些已经在这里,并且这些 ULD 的第一条记录是出站的。还有一些 ULD 错过了出站或入站的注册。因此,说他们遵循入站出站入站出站的标准顺序是不正确的。
我正在寻找的解决方案是粘贴专注于入站和出站的日期。
我希望结果表看起来如何。
ULD 编号 | 第一次进入 | 入站 | 出境 | 入站 | 出境 | 入站 | 出境 | 入站 | 出境 |
---|---|---|---|---|---|---|---|---|---|
12345 | 出境 | 2021 年 10 月 10 日 | 2021 年 11 月 10 日 | 2021 年 12 月 10 日 | 2021 年 14 月 10 日 | 17-10-2021 | 19-10-2021 | ||
12345 | 入站 | 2021 年 8 月 10 日 | 2021 年 8 月 10 日 | 2021 年 12 月 10 日 | 15-10-2021 | 16-10-2021 | 17-10-2021 | 20-10-2021 |
它目前的样子。
ULD 编号 | 第一次进入 | 入站 | 出境 | 入站 | 出境 | 入站 | 出境 | 入站 | 出境 |
---|---|---|---|---|---|---|---|---|---|
12345 | 出境 | 2021 年 10 月 10 日 | 2021 年 11 月 10 日 | 2021 年 12 月 10 日 | 2021 年 14 月 10 日 | 17-10-2021 | 19-10-2021 | ||
12345 | 入站 | 2021 年 8 月 10 日 | 2021 年 8 月 10 日 | 2021 年 12 月 10 日 | 15-10-2021 | 16-10-2021 | 17-10-2021 | 20-10-2021 |
我不是要你写我的整个代码,但如果你能概述一个我可以使用的可能的公式/代码段。
解决方案
如果我正确理解了这个问题,我什至认为你不需要费心使用 VBA 来解决它。
数据透视表/查找和一些日期/时间数学应该能够为您解决它。
如果您真的想使用 VBA,尽管您想开始更像程序员/开发人员一样思考。
了解问题,将其分解为非常小的问题,然后孤立地解决所有这些非常小的问题。
因此,首先您希望您的数据离开工作表并进入内存(理想情况下,您只想与工作表交互两次,一次在开始时提取数据,一次在结束时输出结果)。
因此,您需要一种从工作表中提取数据并将其放入代表航班的方法,我会为每个航班选择一个类对象,以便可以通过其唯一代码来识别它。
因此,如果该方法从一个空集合开始,并通过查看每一行的工作表进行解析,它将首先通过检查工作表上的唯一代码是否存在来检查该航班是否存在于集合中,如果不存在则使用唯一代码创建航班类的新实例,如果确实如此,则从集合中获取现有航班类的保留。
然后将该行中的数据提取到飞行对象中。你的飞行对象类无疑需要一个集合来保存所有可能的入站/出站细节。
提取数据后,如果需要,您可以在每个类对象中对其进行排序(因此您需要一个函数来接受来自对象的数据,对其进行正确排序,然后将其作为排序集合传回)。
转换数据后,您将需要在其中执行计算,因此可以再次将数据传递给函数以获得所需的结果。
最后,您将需要一个输出方法来从每个对象中获取数据并以所需格式将其输出到工作表中。
希望这会有所帮助。
推荐阅读
- r - 使用小数时 break 不会停止重复 R
- oracle - 日期时间与 ORACLE SQL 查询中 TABLE 中存储的日期时间进行比较
- angular - Angular 6 和 Spring boot - 无法使用简单的 HttpClient 调用获取数据
- c# - 使用结构的子集
- python - Python矢量化并行线段的最大运行
- javascript - Vuex:在不同模块中共享嵌套模块而不重复
- emscripten - 从 emscripten-threads 访问 js-context
- go - Protobuf、Go 和私有字段
- jquery - jQuery:如何将输入值与 jQuery 中的所有元素匹配?
- dropzone.js - 停止生成预览?