다중 셀 어레이 furmulae, 중첩


0

내 데이터가 처음 두 테이블에 있습니다 ( A1:B6D1:F6 ) :

nested multi-cell array formulae

내 의도 된 최종 결과 I1:I4 에 해당하는 모든 값에 대해 H1:H4.

예를 들어 "A"의 가치를 취하면 모든 해당 코드를 B1:B6 (예 : 'code1', 'code2'및 'code3')을 입력하면 최신 날짜를 E1:E5 (이전 단계의 코드에 해당)을 입력하고 그 값의 날짜에 해당하는 결과를 D1:D5.

나는 최신 날짜를 찾는 단계에 머물러있다. 나는 이것들을 시도했다.

{=IF($F$1:$F$5=IF($A$1:$A$6=$H$1,$B$1:$B$6),$E$1:$E$5)}
{=IF($F$1:$F$5={IF($A$1:$A$6=$H$1,$B$1:$B$6)},$E$1:$E$5)}

어떤 안내 좀 해주시겠습니까? 추가 열을 추가 할 수는 있지만 문제는 다중 배열 결과입니다. 아는 한 하나의 셀에 저장할 수 없습니다.

답변:


3

저는 Excel 전문가가 아닙니다! 그러나 MAX에서 래핑 된 수식은 절대 배열이 IF에서 반환 된 배열이 아니라 전달 된 경우 올바르게 처리됩니다. 결과적으로 두 배열의 길이가 초과 된 경우 # N / A를 반환하는 것과 일치하지 않기 때문에 전체 수식을 # N / A로 가져옵니다. 아래 스크린 샷을 참조하십시오.

enter image description here

그로 인해 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에서 데이터를 시작하면 이전 행 참조를 사용하여 동일하게 조작하지 않는 한 참조가 잘못 될 경우에만 제대로 작동합니다. 시도해보고 되돌릴 수 있습니다. 또한 다른 사용자의 똑똑한 솔루션도 확인하십시오.

enter image description here

최신 정보

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)))

enter image description here


고맙습니다! 당신의 노력에 감사드립니다. 나는 대답을 upvoted지만, 지금은 대답으로 표시하지 않습니다. 그것은 어떻게 든 느낀다. VBA가없는 옵션이 있어야하며, 내 자신의 대답보다 간단하다. 나는 VBA를 잘 알고 있지만, 현재 나는 그것을 피하려고 노력하고있다. 고맙습니다!
ZygD

UDF 대신 TRANSPOSE의 사용이 발견되었습니다. 업데이트 된 솔루션을 사용해보십시오.
patkim

1

긴 생각을 한 후에 결과가 어떻게 보이는지입니다.

results

4 개의 도우미 열이 각각 단일 셀 배열 수식으로 만들어졌습니다.

세포 C1 아래쪽 :

{=MAX(IF(B1=$K$1:$K$5,$J$1:$J$5))}

세포 D1 아래쪽 :

{=IFERROR(INDEX($I$1:$I$5,MATCH(1,(B1=$K$1:$K$5)*(C1=$J$1:$J$5),0)),"")}

세포 E1 아래쪽 :

{=MAX(IF(A1=$A$1:$A$6,$C$1:$C$6))}

세포 F1 아래쪽 :

{=INDEX($B$1:$B$6,MATCH(1,(A1=$A$1:$A$6)*($C$1:$C$6=E1),0))}

그리고 대답은 G1 아래쪽 :

{=INDEX($D$1:$D$6,MATCH(1,($B$1:$B$6=F2)*($C$1:$C$6=E2),0))}

하나의 열에 이걸 가지고 있으면 좋겠지 만, 오 .... :)


0

친구는 이제 내 제비 갈매기 .

기본적으로 쿼리, 찾을 수있다. 최신 (최근) 날짜 코드 1, 코드 2 & amp; 코드 3, ColA에서 해당 일치 값이 A이면 (원래 쿼리 게시 확인) .

그것은 둘 다 맛을보아야한다는 것을 의미합니다. Code3은 A로 2 회, B로 나타났습니다.

그리고, 내가 가장 최근에 작성한 것처럼, MAX 기능을 사용할 수 없으며, MIN은 최신을 찾습니다.

스크린 샷 확인,

enter image description here

수식은,

= IF (D423 : D428 = "A", IF (E423 : E428 = ({ "코드 1", "코드", "코드 3"), MIN (F423 : F428)))

심지어 비 배열 수식이 문제를 해결했습니다.

주의 : 데이터 범위를 사용하여 수식을 다시 디자인 할 수 있습니다.

나는 저의 테스트를 거친 후 솔루션을 게시했습니다.


0

약간의 수정으로 나는 최근 날짜 필요한 영역 내에서만, 필터를 사용하여 데이터를 기준은 A와 Code1, Code2 또는 Code3입니다.

enter image description here

{= MAX (IF (D423 : D428 = "A", IF (E423 : E428 = { "코드 1", "코드", "코드 3"}, F423 : F428, ""))}}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.