남이 만든 수식 해독하는 프롬프트
길고 중첩된 수식을 부분별로 갈라 무엇을 하는지 설명합니다. 위험한 부분을 표시합니다.
| 분류 | 사무 › 엑셀 |
|---|---|
| 태그 | 분석엑셀파일직장인 |
Explain this spreadsheet formula. Produce: 1. What it returns, in one sentence. 2. A breakdown from the innermost expression outward. For each part: what it does and what it produces. 3. Assumptions the formula makes about the data — sorted order, no blanks, exact types, fixed ranges. 4. *Where it fails silently* — conditions that produce a wrong number rather than an error. This is the dangerous part of an inherited file. 5. A simpler equivalent, if one exists, and what it trades away. Rules: - Explain what the formula does, not what it was probably meant to do. If those differ, that is a finding — state both. - Flag hardcoded values and absolute references that will break when rows are inserted. - *If the formula references cells or sheets I did not describe, say what you cannot verify* rather than assuming their contents.
붙여 넣으면 맨 아래에 채울 칸(수식 · 시트 상황)이 나옵니다
어떤 프롬프트인가
인수인계받은 파일의 수식은 건드리기가 무섭다. 이 프롬프트는 수식을 안쪽부터 바깥으로 갈라 각 조각이 하는 일을 설명하고, 값이 바뀌면 조용히 틀린 답을 내는 지점을 표시한다.
모델별 실제 결과
답 전문 보기
같은 입력을 세 모델에 넣어 받은 답을 그대로 옮겼습니다. 각 CLI(에이전트 하네스)에서 실행했습니다. ChatGPT·Claude 앱이나 웹에서는 답이 다를 수 있습니다.
수식: =IFERROR(INDEX($D$2:$D$500,MATCH(1,($A$2:$A$500=A2)*($B$2:$B$500=MAX(IF($A$2:$A$500=A2,$B$2:$B$500))),0)),"") 시트 상황: 발주내역 시트에서 A열은 거래처코드, B열은 발주일자, D열은 최종단가. 거래처별로 가장 최근 발주일의 단가를 옆 칸에 가져오려는 배열수식으로, Ctrl+Shift+Enter로 입력함
- 한 문장 요약
현재 행의 거래처코드와 같은 거래처 중 발주일자가 가장 큰 행을 찾아, 그 행의 D열 단가를 반환하며 문제가 생기면 빈 문자열을 반환합니다.
- 안쪽에서 바깥쪽으로
수식:
=IFERROR(
INDEX($D$2:$D$500,
MATCH(
1,
($A$2:$A$500=A2)*
($B$2:$B$500=MAX(IF($A$2:$A$500=A2,$B$2:$B$500))),
0
)
),
""
)
($A$2:$A$500=A2)- 각 행의 거래처코드가 현재 행의
A2와 같은지 검사합니다. - 결과는 TRUE/FALSE 배열입니다.
- 각 행의 거래처코드가 현재 행의
IF($A$2:$A$500=A2,$B$2:$B$500)- 같은 거래처인 행에서는 발주일자를 반환합니다.
- 다른 거래처인 행에서는 FALSE를 반환합니다.
MAX(IF(...))- 같은 거래처의 발주일자 중 가장 큰 값을 반환합니다.
- Excel 날짜가 숫자형이라면 가장 최근 날짜에 해당합니다.
($B$2:$B$500=MAX(...))- 각 행의 발주일자가 해당 거래처의 최댓값과 같은지 검사합니다.
두 조건의 곱:
($A$2:$A$500=A2)*($B$2:$B$500=최대발주일)- TRUE*TRUE인 행만
1이 됩니다. - 나머지는
0입니다.
- TRUE*TRUE인 행만
MATCH(1,...,0)- 값이 정확히
1인 첫 번째 행을 찾습니다. - 따라서 가장 최근 발주일이 여러 건이면 그중 위쪽에 있는 첫 번째 행을 선택합니다.
- 값이 정확히
INDEX($D$2:$D$500,...)- 찾은 상대 행 번호에 해당하는 D열 값을 반환합니다.
IFERROR(...,"")- 일치하는 행이 없거나 계산 오류가 발생하면 빈 문자열을 반환합니다.
- 따라서 실제 오류와 정상적인 빈 단가를 구분할 수 없습니다.
- 데이터에 대한 가정
- 정렬되어 있을 필요는 없습니다.
MAX가 가장 큰 날짜를 찾습니다. - B열의 발주일자는 Excel이 날짜로 인식하는 숫자형이어야 합니다.
- 거래처코드는 공백, 숫자, 문자열 등이 서로 일관되게 저장되어 있어야 합니다. 예를 들어 숫자
123과 문자열"123"은 문제가 될 수 있습니다. - 같은 거래처의 최신 발주일이 여러 건이면 첫 번째 행만 사용합니다.
A2가 현재 행의 거래처코드라는 가정을 합니다.- 데이터가
2행~500행안에만 있다고 가정합니다. - 수식이 복사되는 경우
A2는 상대참조라 행에 따라 바뀌지만, A/B/D 범위는$가 붙은 절대참조라 항상2:500만 봅니다. - 500행 이후에 추가된 자료는 반영되지 않습니다. 범위 안에 행을 삽입하면 Excel이 범위를 자동 조정할 수도 있지만, 범위 밖에 데이터를 추가하거나 참조가 조정되지 않는 방식으로 행을 추가하면 누락됩니다.
- 구버전 Excel에서는 이 수식이 배열수식으로 입력되어야 합니다. 실제로 Ctrl+Shift+Enter로 입력되었는지는 수식만으로는 확인할 수 없습니다.
- 조용히 잘못된 결과를 내는 경우
- 최신 발주일이 여러 건이면 가장 위의 단가를 반환합니다. 실제로는 동일 날짜의 다른 단가가 더 최신 입력이거나 유효한 값이어도 이를 판단하지 않습니다.
- 발주일자가 텍스트로 저장되어 있으면
MAX가 해당 값을 제대로 고려하지 않을 수 있습니다. 그 결과 최신 행을 찾지 못하고 빈칸을 반환하거나 다른 행을 선택할 수 있습니다. - B열에 빈 날짜가 있으면 빈 셀은 숫자 0처럼 비교될 수 있습니다. 모든 해당 거래처의 날짜가 비어 있거나 날짜가 0인 경우 빈 날짜 행이 선택될 수 있습니다.
- 거래처코드가 빈칸인 행에서는 모든 빈 거래처코드 행이 하나의 거래처로 묶일 수 있습니다.
- 거래처코드에 앞뒤 공백이 있으면 같은 거래처로 보이더라도 서로 다른 값으로 처리됩니다.
- 최신 발주일의 D열 단가가 빈칸이면 빈칸을 반환합니다. 이는 “단가가 없음”, “거래처 없음”, “오류 발생”을 모두 같은 결과로 보이게 합니다.
- 500행 밖의 최신 발주가 있으면 수식은 이를 모른 채 500행 안의 오래된 단가를 반환할 수 있습니다. 이 경우 오류가 발생하지 않아 특히 위험합니다.
IFERROR가#N/A,#VALUE!등의 오류를 모두 빈칸으로 숨깁니다. 따라서 원인 파악이 어렵습니다.- 이 수식은 “가장 최근 발주일의 D열 값”만 반환합니다. D열이 실제로 유효한 최종단가인지, 취소 발주나 반품 발주를 제외해야 하는지는 수식에서 검증하지 않습니다.
즉, 수식의 실제 동작과 의도는 대체로 일치하지만, 동일 최신일 중 첫 번째 행을 임의로 선택하고, 데이터 범위 밖의 자료를 조용히 무시한다는 차이가 있습니다.
- 더 단순한 대안
최신 Excel이라면 MAXIFS와 XLOOKUP을 사용할 수 있습니다.
=XLOOKUP(
1,
($A$2:$A$500=A2)*
($B$2:$B$500=MAXIFS($B$2:$B$500,$A$2:$A$500,A2)),
$D$2:$D$500,
""
)
배열수식 입력이 필요 없고, 구조가 더 명확합니다. 다만 결과는 여전히 동일 최신일이 여러 건일 때 첫 번째 행을 반환하며, 고정 범위 2:500 문제도 그대로 남습니다. MAXIFS와 XLOOKUP을 지원하지 않는 구버전 Excel에서는 원래 수식을 사용해야 합니다.
같은 분류의 프롬프트
| 에너지 데이터 분석 프롬프트 | |
| 축구 경기 예측·베팅 분석 프롬프트 | |
| Blackmagicmantra 설명 프롬프트 | |
| 조건부 서식 규칙 만드는 프롬프트 | |
| 두 표의 숫자가 안 맞을 때 대조하는 프롬프트 |