나는 현재 실행중인 함수에 대한 배열에 대해 별도의 시트에 범위를 정의하는 데 문제가 있습니다. 이 기능은 KVLOOKUP
이며 here입니다. 내가 가지고있는 문제는 범위를 설정하려고 할 때입니다. Sub Searched
정의 된 범위를 허용하지 않습니다. 나는 다양한 방법으로 범위를 정의하기 위해 내가 생각할 수있는 것을 시도했다. 내가 여기서 어디로 잘못 가고 있는지 확실하지 않습니다.배열의 범위 정의 문제
기능은
Function KVLOOKUP(LookedValue As String, Matrix As Variant, Column As Integer) As Variant
Dim Result() As Variant
Dim i As Integer
Dim Counter As Long
Dim Column1 As Integer
Column1 = Column + 1
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) & " - " & Matrix(i, Column1)
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
내 문제는 아래의 코드 내에 호출합니다. 세포에서 나는 KVLOOKUP
과 같은 일반 함수 =KVLOOKUP(TextToSearch,'IDBHour1'!B2:E120,2)
를 부를 수 있습니다. VBA 내에서 함수를 호출하여 동일한 범위를 정의하려고 시도했지만 위와 같은 범위를 정의 할 수 없었습니다. 나는 (그것이 정상적인 VLOOKUP 기능에 대해 수행 될 방법이다)이 같은 범위를 정의하려고하면 그것이 어떤 결과를 제공하지 않습니다
하위는 E_name을 정의하고 Rnge은 어떤 이유로
값 . 이것은 내가 어떻게 내 문제를 디버깅하려고했는지입니다.
Rnge
객체 변수입니다 :
내가 코드를 실행
가 나는 오류를Sub SearcherBox()
'E_name is just a name i.e., John Doe
'Rnge is the range in which KVLOOKUP is searching for "John Doe"
Dim Rnge as Range
Rnge = Sheets("IDBHour1").Range("B2:E120")
Sal = Application.WorksheetFunction.KVLOOKUP(E_name, Rnge, 2)
MsgBox Sal
End Sub
문제가되는 부분 만 질문 범위를 좁히시겠습니까? 전체 코드를 게시 할 필요가 없습니까? 감사합니다. 안부, –
* 어떤 종류의 정의 된 범위도 허용하지 않습니다. * thsi는 무엇을 의미합니까? 오류가 있습니까? 그렇다면 오류는 무엇입니까? –
또한, 'Selection.Value'를 사용하여 ([http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros] [당신을 상대로 조언 할 가치가 있습니다] * * 특히 사용자 양식 및 여러 워크 시트와 관련된 고급 프로그래밍을 할 때 ** –