2014-06-24 2 views
0

그래서 일반 VLOOKUP처럼 작동하지만 여러 값을 순환하여 반환하는 함수에서 작업하고 있습니다. 내 문제는 지금 어떻게 내가 다음 코드를 구분 기호로 여러 값을 출력 할 수 있는지 잘 모르겠다는 것입니다. (즉, "결과 1, 결과 2, 결과 3") 쉬운 방법이 있거나 내가 여기있는 것을 해결하면 조언을 구할 것입니다.구분 기호를 사용하여 VLOOKUP 스타일 함수를 반복하십시오.

Function KVLOOKUP(LookedValue As Variant, Matrix As Variant, Column As Integer) As Variant 
Dim Result() As Integer 

Dim i As Integer 
Dim Counter As Long 
If IsObject(Matrix) Then Matrix = Matrix.Value 
On Error Resume Next 
Do 
    i = i + 1 
Counter = UBound(Matrix, i) 
Loop Until Err.Number <> 0 

If Counter < Column Then KVLOOKUP = CVErr(xlErrNum): Exit Function 
Counter = 0 
For i = LBound(Matrix, 1) To UBound(Matrix, 1) 
If Matrix(i, 1) = LookedValue Then 
Counter = Counter + 1 
ReDim Preserve Result(1 To Counter) 
Result(Counter) = Matrix(i, Column) 
End If 
Next i 
On Error GoTo 0 
If Counter = 0 Then 
KVLOOKUP = CVErr(xlErrNA) 
Else 

     KVLOOKUP = Insert command to add separator and output values here. 

End If 
End Function 
+1

한 가지 방법을 당신의 배열을 만들고 그 값을 보유하는 문자열을 만듭니다. stringValue = stringValue & "|"와 같은 것 & Array (indexCounter) ... – sous2817

+0

@ sous2817이 코드는 빌린 코드이므로 구현하지 않아도됩니다. – ryano

답변

0

여기에는 한 가지 방법이 있습니다. 기본적으로 결과 배열을 반복하며 덤프되는 쉼표로 구분 된 문자열 값을 만듭니다. 당신은 몇 가지 오류 검사 구축하는 것을 계획한다, 그래서 나는 철저하게 그 모두를 테스트하지 않았지만, 잘하면 당신이 올바른 방향으로 가야됩니다의 요소를 통해 반복하는 것입니다

Function KVLOOKUP(LookedValue As Variant, Matrix As Variant, Column As Integer) As Variant 

Dim Result() As Variant 
Dim i As Integer 
Dim Counter As Long 

If IsObject(Matrix) Then Matrix = Matrix.Value 
On Error Resume Next 
Do 
    i = i + 1 
Counter = UBound(Matrix, i) 
Loop Until Err.Number <> 0 

If Counter < Column Then KVLOOKUP = CVErr(xlErrNum): Exit Function 
Counter = 0 
For i = LBound(Matrix, 1) To UBound(Matrix, 1) 
If Matrix(i, 1) = LookedValue Then 
Counter = Counter + 1 
ReDim Preserve Result(1 To Counter) 
Result(Counter) = Matrix(i, Column) 
End If 
Next i 
On Error GoTo 0 

If Counter = 0 Then 
    KVLOOKUP = CVErr(xlErrNA) 
Else 
    KVLOOKUP = Result(1) 
    For i = 2 To UBound(Result) 
     KVLOOKUP = KVLOOKUP & "," & Result(i) 
    Next i 
End If 
End Function 
관련 문제