내 함수가 서브 루틴 내에서 완벽하게 작동하는 이상한 문제가 있습니다. 그러나 셀에서 사용하려고하면 첫 번째 값만 반환됩니다. 의도 한 기능은 vlookup과 유사하게 작동하지만 모든 고유 값을 갖는 쉼표로 구분 된 문자열을 제공합니다.VBA : 함수는 서브 루틴 내에서 작동하지만 시트에는 작동하지 않습니다
루프를 do
루프로 좁혔습니다. 나는 또한 while
루프를 사용하여 루프 재 작성을 시도했지만 동일한 결과를 얻었다.
Option Explicit
Function vconc(ByVal val_ As String, ByVal rng As Range, ByVal offset_ As Integer) As String
Dim s As String
Dim col_ As Variant
Dim c As Range
Dim firstAddress As String
Set col_ = New Collection
' combination of the .find function and a collection to get a unique list of values
' works similar to a vlookup, but adds all the unique values to a collection
With rng
Set c = .Find(val_, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
col_.Add c.Offset(0, offset_), CStr(c.Offset(0, offset_).value)
Do
' adding a value with the same key to the collection gives us an error
' but I am interested in a list of unique values, so we simply ignore it
On Error Resume Next
Set c = .FindNext(c)
col_.Add c.Offset(0, offset_).value, CStr(c.Offset(0, offset_).value)
' this debug line only runs if the function is run within a subroutine
Debug.Print c.Offset(0, offset_).value
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
' concatenate the strings, seperate by ,
Dim item_ As Variant
For Each item_ In col_
If s = "" Then
s = item_
Else
s = s & ", " & item_
End If
Next item_
vconc = s
End Function
편집 : SJR의 조언에 따라 나는
Set c = .Find(val_, after:=c, LookIn:=xlValues)
어떤 이유로 FindNext가 UDF에서 제대로 작동하지 않습니다. 찾기를 사용해야합니다. – SJR
할렐루야! 정말 고맙습니다. 인터넷 검색에 대해 생각하지 않으 셨습니다 ... 왜 이것이 아직 해결되지 않은 지 궁금합니다 ... – doge