5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
미해결 M365윈도우

다중조건

빗소리
7월 16일 조회 212

안녕하세요

이제 엑셀을 공부하고 사용하는 회사원입니다.

간단한거 같은데 값을 찾을 수가 없어서 도움을 요청합니다.

매일 아침 통지일, 통지, 내역, 보고인(사번)을 RTDB에서 불러와  명부시트의  요청자와 SECTION을 Vlookup으로 생성하여 사용했슴.

26년 7월부터 신규 사번이 개인당 1개 또는  2개 새로 부여되어 사번1, 사번2, 사번3을 사용하여 요청자와 SECTION을 생성해야함.

사번1, 사번2, 사번3    3개중 한개 보고인(사번) 를 이용하여 요청자와 SECTION을 불러올수 있는 함수를 알려주세요

예) 8번행 보고인(사번) 770418은 신규로 부여된 사번임

댓글 9

수메리안 7월 16일

안녕하세요~

이렇게 해보세요.
사번을 770544로 수정했고
엑셀버전이 M365인 관계로 LET, XLOOKUP을 적용했습니다.

=LET(
v, D8,
rA, 명부!$A$3:$A$100,
rB, 명부!$B$3:$B$100,
rC, 명부!$C$3:$C$100,
rRng, 명부!$D$3:$D$100,
Chk, (rA=v) + (rB=v) + (rC=v),
IF(v="","", XLOOKUP(TRUE, Chk>0, rRng, ""))
)


빗소리 작성자 7월 17일

@수메리안 님 수메리안님 감사합니다.

제미나이가 알려준 수식을 올려봅니다.

제시해주신 수식은 LET 함수를 아주 잘 활용하여 구조적으로 깔끔하게 작성된 수식입니다.

다만, 수식이 정상적으로 작동하려면 XLOOKUP 부분의 비교 연산 방식을 살짝 수정해야 합니다. 엑셀의 + 연산은 행별로 true/false를 계산하여 0 또는 1의 숫자가 채워진 배열을 만듭니다. 이를 Chk>0 형태로 XLOOKUP에 넣으면 결과가 제대로 매칭되지 않을 수 있습니다.

Chk 자체가 이미 0과 1로 이루어진 배열이므로, 찾을 값(Lookup_value)을 1로 지정해 주는 것이 가장 정확하고 깔끔합니다.

올바르게 수정한 수식은 다음과 같습니다.

=LET( v, D8, rA, 명부!$A$3:$A$100, rB, 명부!$B$3:$B$100, rC, 명부!$C$3:$C$100, rRng, 명부!$D$3:$D$100, Chk, (rA=v) + (rB=v) + (rC=v), IF(v="", "", XLOOKUP(1, Chk, rRng, "미등록사번")) )

수메리안 7월 17일

@빗소리 님 안녕하세요~

AI의 답변은 여러 번 검증해야 할 필요가 있습니다.
여러 오류나 질문자가 원하는 방향이 아닌 경우가 자주 발생할 수 있으므로
꼭 검증을 해서 내 의도와 더불어 예외적인 상황까지 고려했는지를 체크할 필요가 있습니다.

=LET(
v, D8,
rA, 명부!$A$3:$A$100,
rB, 명부!$B$3:$B$100,
rC, 명부!$C$3:$C$100,
rRng, 명부!$D$3:$D$100,
Chk, (rA=v) + (rB=v) + (rC=v),
IF(v="","", XLOOKUP(TRUE, Chk>0, rRng, ""))
)

이 수식에 따라 명부 시트 77행은

(521002=770544)+(226578=770544)+(770544=770544)

FALSE + FALSE + TRUE

0 + 0 + 1
= 1

따라서

Chk>0은
1>0
= TRUE

가 됩니다.

그러므로

XLOOKUP(TRUE,Chk>0,rRng,"")

은 해당 행의 이름인 장영찬을 정상적으로 반환합니다.

그럼, 제미나이의


"이를 Chk>0 형태로 XLOOKUP에 넣으면 결과가 제대로 매칭되지 않을 수 있습니다."


답변을 뒷받침하려면 Chk>0으로 만들어진 논리값 배열에서 XLOOKUP(TRUE,…)가 정상적으로 검색되지 않는 구체적인 사례가 제시되어야 합니다.

예를 들어 chk가 아래와 같다면

Chk : 0, 0, 1, 0, 2
Chk>0 : FALSE, FALSE, TRUE, FALSE, TRUE

XLOOKUP은 논리값 TRUE를 논리값 배열에서 정상적으로 검색할 수 있습니다.

=XLOOKUP(
TRUE,
{FALSE;FALSE;TRUE;FALSE;TRUE},
반환배열
)

이러한 수식은 엑셀에서 통상적으로 사용하는 정상적인 배열 검색 방식입니다.

따라서 위의 제미나이 진술이 맞으려면,

Chk>0이 {FALSE;FALSE;TRUE}를 반환했는데도
XLOOKUP(TRUE,Chk>0,…)이 TRUE 위치를 찾지 못하는 사례

가 있어야 합니다.

오히려 제미나이가 제시한

XLOOKUP(1, Chk, rRng, "미등록사번")

이 수식은

사번1: 770544
사번2: 226578
사번3: 770544
성명: 장영찬

이럴 경우에는 (이러한 경우가 없어야겠지만 업무 중에 휴먼에러로 동일한 값을 사번에 등록하는 경우가 발생할 수도 있어서...)
정확히 1만 찾기 때문에 Chk=2인 행은 일치 대상으로 보지 않고 "미등록사번"을 반환합니다.

수식을 수정할 때는 단순히 현재 데이터에서 작동하는지만 볼 것이 아니라,
수식이 나타내는 논리적 조건과 예외 상황까지 함께 고려해야 합니다.

이 부분을 다시 한번 검토해 보세요.

마법의손 7월 16일
=LET(사번, TOCOL(명부!A3:C78), 
Name, TOCOL(CHOOSECOLS(명부!D3:D78,SEQUENCE(,3,1,0))),
XLOOKUP(D8:D20, 사번, Name, "", 0))

=LET(Area,명부!$A$3:$C$78, val, 명부!D3:E78,
res,MAP(D8:D20,LAMBDA(m,XMATCH(TRUE,BYROW(TAKE(Area,,3)=m,LAMBDA(r,OR(r))),0))),
CHOOSEROWS(val,res))

라온보리 7월 16일

=LET(aAry,TOCOL(명부!A3:C78), bAry,TOCOL(IF(COLUMN(명부!A3:C78),명부!D3:D78)),
XLOOKUP(D8:D20,aAry,bAry,""))

라온보리 7월 16일

@라온보리 님 또는

=MAP(D8:D20,LAMBDA(irng, XLOOKUP(TRUE,BYROW(명부!A3:C78,LAMBDA(iRw, OR(iRw=irng))),명부!D3:D78,"")))

츠츠°º⁰ 7월 17일

많지않으면 filter로 셀마다 수행해도 될듯합니다.
E8 =FILTER(명부!D$3:D$78, BYROW(IFERROR(
       FIND($D8,명부!$A$3:$C$78),0),SUM),"-")  옆아래복사

빗소리 작성자 7월 17일

츠츠님 감사합니다.

제시해주신 FILTERBYROW를 활용한 수식도 동적 배열을 다루는 아주 훌륭한 접근 방식입니다!

다만, FIND 함수를 사용하면 사번의 일부분만 일치해도 참으로 인식하는 문제(부분 일치 문제)가 발생할 수 있습니다. 예를 들어, 찾으려는 사번이 770인데 명부에 770418이 있으면 이를 똑같은 사번으로 오인하여 잘못된 행을 불러올 수 있습니다. 사번은 텍스트나 숫자가 정확히 일치해야 하므로 FIND 대신 등호(=) 연산을 사용하는 것이 훨씬 안전합니다.

FILTER 방식을 유지하면서 이 문제를 해결하고, 구조를 깔끔하게 다듬은 최종 수식을 제안해 드립니다.

위 내용은 제미나이가 알려준 방식입니다.

츠츠°º⁰ 7월 18일

@빗소리 님 사번은 한 조직에서는 보통 길이가 동일하기에, 수작업경우  혹시라도 앞뒤 공백있어도 조회되도록 find해보았습니다.

data최적화된 경우라면, 등호방식이 더 정확합니다.
버젼이높기에, 수식이해하시면 잘활용하실거 같네요.

화이팅입니다.

질문답변 게시판의 최근 글

스크랩 완료