저는 Excel 전문가가 아닙니다! 그러나 MAX에서 래핑 된 수식은 절대 배열이 IF에서 반환 된 배열이 아니라 전달 된 경우 올바르게 처리됩니다. 결과적으로 두 배열의 길이가 초과 된 경우 # N / A를 반환하는 것과 일치하지 않기 때문에 전체 수식을 # N / A로 가져옵니다. 아래 스크린 샷을 참조하십시오.
그로 인해 VBA에서 필요한 기본 배열 만 반환하는 매우 기본적인 UDF를 만들 수있게되었습니다. 이 UDF에는 많은 유효성 검증이 없습니다. 단일 열 참조 만 전달되고 예상 반환 값은 바로 인접한 열에서 오른쪽으로 존재하는지 확인하십시오. 예 : A1 : A4를 전달하면 B1 : B4의 값을 검사합니다.
프레스 ALT + F11 VBA 편집기에 액세스하려면, 끼워 넣다 & gt; 기준 치수 다음 코드를 붙여 넣습니다.
Public Function RetArray(r1 As Range, a As String) As Variant
Dim i
i = 0
Dim myarray()
For Each cell In r1
If cell.Value = a Then
i = i + 1
End If
Next cell
ReDim myarray(i)
Dim j
j = 0
For Each cell In r1
If cell.Value = a Then
myarray(j) = cell.Offset(0, 1).Value
j = j + 1
End If
Next cell
RetArray = myarray
End Function
이 UDF를 최종 솔루션으로 사용합니다. 예 : A가 H1 인 열 B의 배열을 얻으려면이 수식을 =RetArray(A1:A6,H1)
다음 까다로운 부분은이 반환 값을 열 E의 정확한 위치에 매핑하고 D에서 값을 가져 오는 것입니다.
먼저 C에서 도우미 열을 만들고이 열은 D & amp; 이자형
C1의 공식 =E1&F1
아래의 원하는 셀로 드래그하십시오. 귀하의 날짜가 Excel이 아닌 텍스트로 유효한 날짜 형식인지 확인하십시오. 그렇지 않으면이 솔루션이 작동하지 않습니다.
귀하의 테이블은 H1 : H4입니다.
이제 I1에서 다음 수식을 입력하십시오.
=INDEX($D$1:$D$9,MIN(IF($C$1:$C$9=MAX(IF($F$1:$F$9=RetArray($A$1:$A$8,H1),$E$1:$E$9,0))&RetArray($A$1:$A$8,H1),ROW($C$1:$C$9),99^99)))
프레스 CTRL + 시프트 + 들어가다 수식을 만들고 배열 수식으로 끌어 테이블의 길이에 맞 춥니 다.
이 솔루션은 철저하게 테스트되지 않았습니다. Row 1에서 데이터를 시작하면 이전 행 참조를 사용하여 동일하게 조작하지 않는 한 참조가 잘못 될 경우에만 제대로 작동합니다. 시도해보고 되돌릴 수 있습니다. 또한 다른 사용자의 똑똑한 솔루션도 확인하십시오.
최신 정보
ConstantArrays가 작동하고 Cell Reference가 TRANSPOSE 함수를 사용하여 Array를 반환하는 UDF를 생성하도록 유도하지 않았지만 실제로 ConstantArray를 내부에 생성하는 것으로 나타났습니다. 따라서 UDF를 IF로 싸서 TRANSPOSE로 바꾸면 솔루션은 VBA 코드 & amp; 어떤 도우미 칼럼.
이것을 시도하고 이것이 당신에게 적합한 지 확인하십시오.
I1의 배열 수식은 다음과 같습니다.
=INDEX($D$1:$D$9,MIN(IF($E$1:$E$9&$F$1:$F$9=MAX(IF($F$1:$F$9=TRANSPOSE(IF($A$1:$A$8=H1,$B$1:$B$8)),$E$1:$E$9,0))&TRANSPOSE(IF($A$1:$A$8=H1,$B$1:$B$8)),ROW($C$1:$C$9),99^99)))