이 udf가 있고 기본적으로 얻고 싶은 것은 다른 열의 다른 데이터와 일치하는 벡터 (열)의 최신 날짜입니다. 여기에 코드가 있습니다.
Option Explicit
Public Function GetLastDate(Carrier As String, CarrierVector As Range, DateVector As Range) As Variant
Dim TempRange(1 To 10) As Variant
Dim i, j As Integer
For i = 1 To DateVector.Rows.Count
With Application.WorksheetFunction
If .Text(CarrierVector.Item(i), "#") = Carrier And .IsError(.VLookup(DateVector.Item(i), TempRange, 1, False)) Then
j = j + 1
TempRange(j) = DateVector.Item(i)
End If
End With
Next i
GetLastDate = Application.WorksheetFunction.Max(TempRange)
End Function
이 경우 CarrierVector에서 Carrier 변수가 발견되면 해당 Carrier에 해당하는 Date는 TempRange 배열에 저장되며 (반복되지 않는 경우) 마지막에 가장 늦은 날짜를 반환하지만 그렇지 않습니다. 작동하면 함수가 호출 된 셀에 오류가 반환됩니다. 도와주세요.
VLookUp
전화에 문제가있는 것 같습니다 . 왜 실패하는지 모르겠지만 좋은 대안이없는 한 VBA 내에서 워크 시트 함수를 사용하는 것은 권장되지 않는다고 생각합니다.
그러나이 경우를 사용하여 Collection
이미 가지고있는 고유 한 날짜 집합을 추적 할 수 있습니다 .
Public Function GetLastDate(Carrier As String, CarrierVector As Range,
DateVector As Range) As Variant
Dim TempRange As New Collection
Dim i As Integer
Dim found As Boolean
Dim max As Date
For i = 1 To DateVector.Rows.Count
With Application.WorksheetFunction
If .Text(CarrierVector.Item(i), "#") = Carrier Then
On Error Resume Next
found = TempRange.Item(DateVector.Item(i) & "")
On Error GoTo 0
If Not found Then
TempRange.Add DateVector.Item(i), DateVector.Item(i) & ""
If DateVector.Item(i) > max Then max = DateVector.Item(i)
End If
End If
End With
Next i
GetLastDate = max
End Function
그래도 다른 용도로 사용하지 않기 때문에 왜 이것을 사용해야하는지 잘 모르겠습니다 TempRange
. 완전히 떨어 뜨릴 수도 있습니다.
Public Function GetLastDate(Carrier As String, CarrierVector As Range,
DateVector As Range) As Variant
Dim i As Integer
Dim found As Boolean
Dim max As Date
For i = 1 To DateVector.Rows.Count
With Application.WorksheetFunction
If .Text(CarrierVector.Item(i), "#") = Carrier Then
If DateVector.Item(i) > max Then max = DateVector.Item(i)
End If
End With
Next i
GetLastDate = max
End Function
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다