2012-02-14 1 views
2

에서 반환전달 배열 내가 질문에이 개 기능이 다른 사용자 정의 함수

=HLOOKUPRANGE({"Color", "Red", "Alpha", 50}, A1:Z30, SELECTED_INDEX) 
=HLOOKUPRANGE({"Color", "Blue", "Alpha", 100}, A1:Z30, SELECTED_INDEX) 

를하지만 내가 어떻게 할 수 있습니다 : 내 엑셀 워크 시트에서

' Starting from first row, navigate through headers (rows) in lookup_range and return cell value at row_index if we reach a single column Range at the end of navigation; N/A otherwise. 
Public Function HLOOKUPRANGE(headers() As Variant, lookup_range As range, row_index As Integer) As Variant 
' returns the minimum value in search range that is greater than or equal to target. 
Public Function MINGE(search As range, target As Variant) As Variant 

을의 HLOOKUPRANGE는 다음과 같이 작동합니다 그것과 같은 다른 함수로 작동합니까? :

=HLOOKUPRANGE({"Color", "Red", "Alpha", MINGE(A4:Z4, INPUT_ALPHA_VALUE)}, A1:Z:30, SELECTED_INDEX) 

Excel에서 {} 사이에 MINGE를 넣지 않습니다. 그리고 문제는이 방식으로 배열을 전달하는 것입니다. MINGE의 결과를 HLOOKUPRANGE에 전달하려면 어떻게해야합니까?

팁 : MINGE는

+0

없음 같은 것

Public Function HLOOKUPRANGE(headers() As Variant, lookup_range As Range, _ row_index As Integer, Optional HeadersItem1 As Variant, _ Optional HeadersItem2 As Variant) As Variant '~~> In the code add HeadersItem1 and HeadersItem2 to headers() '~~> If they are not blank End Function 

사용법에 HLOOKUPRANGE()을 변화시킬 수 .왜냐하면 [배열 상수] (http://office.microsoft.com/en-us/excel-help/more-arrays-introducing-array-constants-in-excel-HA001087291.aspx)는 근본적으로 상수 만 받아들입니다. – GSerg

+0

그래, 나는 그 라인을 따라 생각하고 있었다. 상수 만 허용됩니다. 전체 문서에 대한 링크를 제공해 주셔서 감사합니다. 거기에 비 상수 배열인가? – Jake

답변

0

두 내가 생각할 수있는 방법 ...

WAY 1

배열을 결합하는 제 3 함수를 작성 "같거나 최소 큰"입니다 MINGE 값. 나는 HLOOKUPRANGE와 MINGE가 무엇을하는지 모르기 때문에 샘플을 만들었지 만 그 개념은 동일합니다.

이 예에서는 SID()가 HLOOKUPRANGE를 모방합니다. 그러나이 순간 않습니다 모두가 당신이

=SID({1,2,3,4,5}) 

가 당신에게 합계 (15)을 줄 것이다 입력 이제 우리의 합을 원하는 말할 수있는 경우

그래서 값을 요약한다

=SID({1,2,3,4,5,MINGE()}) 

MINGE()의 수치는 6 곳이 당신이 코드는 간다 (21)을 줄 것이다 우리가 그것을

=SID(Unite({1,2,3,4,5},6)) 

할 것 어떻게 나는 당신의 기능에 동일하게 적용한다면 모듈은

Option Explicit 

Dim TempAr() As Variant 

Public Function Sid(headers() As Variant) As Variant 
    Dim temp As Long, i As Long 
    For i = LBound(headers) To UBound(headers) 
     temp = temp + headers(i) 
    Next i 
    Sid = temp 
End Function 

Public Function Unite(MyArray() As Variant, Vl As Variant) As Variant 
    Dim n As Long, i As Long 

    n = UBound(MyArray) 

    ReDim Preserve TempAr(n + 1) 

    For i = LBound(MyArray) To UBound(MyArray) 
     TempAr(i) = MyArray(i) 
    Next i 

    TempAr(n + 1) = Vl 
    Unite = TempAr 
End Function 

그것은 당신이 선택 받아 약간 HLOOKUPRANGE 기능을 바꿀 수 2

=HLOOKUPRANGE(UNITE({"Color", "Red", "Alpha"},MINGE(A4:Z4, INPUT_ALPHA_VALUE)), A1:Z30, SELECTED_INDEX) 

WAY과 같을 것 값. 예 : 수식

= SUM ({1,2,3,4,5}, {6})은 워크 시트에서 위와 동일한 작업을 수행합니다.

그래서 당신은 때문에이 방식으로 배열을 전달하는 아니다,이

=HLOOKUPRANGE({"Color", "Red", "Alpha"}, A1:Z30, SELECTED_INDEX,MINGE(A4:Z4, INPUT_ALPHA_VALUE))) 

또는

=HLOOKUPRANGE({"Color", "Red"}, A1:Z30, SELECTED_INDEX,MINGE(A4:Z4, INPUT_ALPHA_VALUE)),SELECTED_INDEX,MINGE(B4:B4, INPUT_ALPHA_VALUE))) 
+0

선택적 매개 변수에 대한 생각에 따라 헤더에 ParamArray를 사용할 수 있습니까? 내 HLOOKUPRANGE는 재귀 적입니다. 각 재귀에서 머리글()의 첫 번째 항목을 제거합니다. 하지만 ParamArray에서 항목을 제거하고 재귀 호출에 공급하는 데 막혔습니다. 이것에 관해 나를위한 어떤 팁? – Jake

+0

@Jake : ParamArray에 AFAIK, Erase 또는 ReDim을 수행 할 수 없으므로 ParamArray를 제안하지 않습니다. –

+0

그러나 'Public function MakeArray (ParamArray values ​​() as Variant)가 Variant() MakeArray = values ​​ end function'처럼 잘 작동하는 것으로 나타났습니다. – Jake