我有一個快速去試圖用公式做,但我認爲你可能需要使用Array公式,他們對我沒有意義!
下面的宏雖然應該這樣做。 (可能是一個問題,雖然比較時間戳)
Sub Main()
Dim Sheet As Worksheet
Dim Data As Range
Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Set Data = Sheet.Range("A2:A" & Range("A" & Range("A" & Sheet.UsedRange.Rows.Count).Row)
Dim BatchNumber As Variant
Dim EndTime As Variant
Dim Result As Variant
BatchNumber = Data.Value2
BatchID = Data.Offset(ColumnOffset:=1).Value2
EndTime = Data.Offset(ColumnOffset:=2).Value2
Result = Data.Offset(ColumnOffset:=3).Value2
Dim Index As Integer
Dim Lookup As Integer
Dim Max As Integer
For Index = LBound(BatchNumber, 1) To UBound(BatchNumber, 1)
Max = Index
For Lookup = LBound(BatchNumber, 1) To UBound(BatchNumber, 1)
If BatchNumber(Lookup, 1) = BatchNumber(Index, 1) Then
If Not Lookup = Index Then
' NOTE: you might to do stuff to the date/time comparison below to get it to work correctly
If EndTime(Lookup, 1) > EndTime(Index, 1) Then
Max = Lookup
Else
Max = Index
End If
End If
End If
Next Lookup
Result(Index, 1) = BatchID(Max, 1)
Next Index
Data.Offset(ColumnOffset:=3).Value2 = Result
End Sub
更新
下一個應該是有點快,因爲它只是遍歷數據集
一次
兩次。而不是行*迭代(我認爲)第一次。
Sub Main2()
Dim Sheet As Worksheet
Dim Data As Range
Dim vData As Variant
Dim vResult As Variant
Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Set Data = Sheet.Range("A2:A" & Range("A" & Sheet.UsedRange.Rows.Count).Row)
vData = Data.Resize(ColumnSize:=3).Value2
vResult = Data.Value2
Dim List As Object
Set List = CreateObject("Scripting.Dictionary")
Dim Index As Integer
Dim Key As String
For Index = LBound(vData, 1) To UBound(vData, 1)
Key = vData(Index, 1)
If List.exists(Key) Then
If vData(Index, 3) > vData(List(Key)(1), 3) Then
List(Key)(1) = Index
End If
Else
List.Add vData(Index, 1), Array(Index, Index)
End If
Next Index
For Index = LBound(vData, 1) To UBound(vData, 1)
Key = vData(Index, 1)
vResult(Index, 1) = vData(List(Key)(1), 2)
Next Index
Data.Offset(ColumnOffset:=3).Value2 = vResult
Set List = Nothing
End Sub
輸出,我想你從一個更大的數據集?如果是這樣,你可以刪除那些不在你的示例數據集中的? (重新閱讀後可能是錯誤的) – NickSlash 2013-03-21 21:34:27
@NickSlash是的這些是對原始數據集的僞修改,它具有> 50,000行和更多的列 – jordanhill123 2013-03-21 21:36:49
是否可以首先進行排序以協助1次fx?或者這是否需要成爲持續的生活配方? – Kevin 2013-03-21 22:26:59