excel - 查找与所需日期最接近的日期而不超过匹配序列号
问题描述
我有一个“I 列”,其中包含返工日期的数据和“G 列”的装配日期。在“J 列”中,我希望使用“返工日期”来查找最接近“装配日期”列的日期,而无需重复。它可以与集会的日期相同,也可以在尚未结束之前。要将其绑定在一起,“返工序列”必须与“E 列”中的“序列”完全相同。注意:我需要那里的时间以及同一天发生的某些情况会有不同的时间。
我试图使用“返工日期”来查看整个“组装日期”列,然后在比较每一个之后,只要它不超过并且序列相同,它就会返回最大值。我不知道如何使用一个返工来查看另一列的这些细节,然后进入下一个返工日期并做同样的事情。
我确实创建了一些查看数据的列,然后对最大值进行了 vlookup,但这会导致为列中的每个返工创建一个列,这太多了。我可能想多了,但我们将不胜感激。
该图像显示了我尝试的一段代码以及我正在使用的整个 excel。它显示了为每个“返工日期”实例创建列的方法。
尝试使用 VBA 遍历 Serial 的整个列,看看它是否等于 Rework Serial,然后在“L”列中连接该值。
从这里我也希望比较日期并返回最大值而不超过的日期值。此代码适用于返回一个单元格,每次返工如何为每个单元格完成?
我走得更远,但由于某种原因,每三次循环一次,它就会出错
AssemD = DateValue(Cells(x,7))
类型不匹配。我不明白这一点,因为它在没有 For Each j 循环的情况下运行,但我试图嵌套它,以便在它进行所有比较并找到最大值之后,它将最大值写入 Cells(y,12),即y 计数器跟上 j。
Sub RecentDate()
Dim i As Range, j As Range, x As Integer, y As Integer, AssemD As Date, ReworkD As Double, AssemTi As Double, ReworkTi As Double, AssemTot As Double, ReworkTot As Double, MaxDate As Date
x = 1
y = 1
'Set i = Range("E1:E12")
For Each j In Range("I1:I12")
For Each i In Range("G1:G12")
AssemD = DateValue(Cells(x, 7))
ReworkD = DateValue(Cells(1, 9))
AssemTi = TimeValue(Cells(x, 7))
ReworkTi = TimeValue(Cells(1, 9))
AssemTot = CDbl(AssemD) + CDbl(AssemTi)
ReworkTot = CDbl(ReworkD) + CDbl(ReworkTi)
If ReworkTot >= AssemTot And Cells(1, 8) = Cells(x, 5) Then
MaxDate = Cells(x, 7)
End If
Cells(x, 13) = MaxDate
x = x + 1
Next i
Cells(y, 12) = MaxDate
y = y + 1
Next j
End Sub
解决方案
我不得不使用 VBA,但使用以下代码得到了它。
Sub RecentDate()
Dim i As Range, j As Range, x As Integer, y As Integer, AssemD As Date, ReworkD As Double
Dim AssemTi As Double, ReworkTi As Double, AssemTot As Double, ReworkTot As Double, MaxDate As Date, LineFault As String
x = 1
y = 1
'Set i = Range("E1:E12")
For Each j In Range("I1:I12")
For Each i In Range("G1:G12")
AssemD = DateValue(Cells(x, 7))
ReworkD = DateValue(Cells(y, 9))
AssemTi = TimeValue(Cells(x, 7))
ReworkTi = TimeValue(Cells(y, 9))
AssemTot = CDbl(AssemD) + CDbl(AssemTi)
ReworkTot = CDbl(ReworkD) + CDbl(ReworkTi)
If ReworkTot >= AssemTot And Cells(y, 8) = Cells(x, 5) Then
MaxDate = Cells(x, 7)
LineFault = Cells(x, 6)
End If
Cells(x, 13) = MaxDate
x = x + 1
Next i
x = 1
Cells(y, 12) = MaxDate
Cells(y, 14) = LineFault
y = y + 1
MaxDate = "1/1/1900 12:00"
LineFault = ""
Next j
End Sub
这个肯定是想多了。
推荐阅读
- javascript - 如何将一个将默认图像设置为参数的函数传递给正在获取图像 src 的 .attr()?
- asp.net-core - 如何为每个客户授予/限制对图像子文件夹的访问权限?
- javascript - 我无法在函数内添加函数
- react-native - Uncaught Error: undefined is not an object (evaluating 't.props.navigation.navigate') touchableHandlePress@[native code]
- r - 如何从存储在另一个数据框中的与测试记录最相似的数据集中找到记录?
- python - 如何将标准输入上的输入发送到 Makefile 中定义的 python 脚本?
- ms-access - 查询工具和设置
- javascript - require(): "不是函数"
- java - 当我单击通知中的按钮时如何更新活动 UI?
- visual-c++ - 在 C++ 中更改 MFC 菜单弹出文本