논리/엑셀 프로그래밍

SUMPRODUCT 유동 참조 (직전 행 찾기)

섬그늘 2008. 11. 13. 15:47

 

B

C

D

E

F

G

2

날짜

탈피유무

탈피주기

수분공급

특이사항

 

3

2007-06-10

탈피

0

 

 

1

4

2007-06-13

 

 

 

 

1

5

2007-06-18

탈피

8

 

 

2

6

2007-07-01

 

 

 

 

2

7

2007-07-11

 

 

 

 

2

8

2007-07-20

탈피

32

 

 

3

 

G3 =G2+N(C3="탈피")  ; 카운터 열 (보조열. 탈피가 적히는대로 1씩 증가)

D3 =IF(C3="탈피",IF(G3=1,0,B3-INDIRECT("B"&SUMPRODUCT(N(G$3:INDIRECT("G"&ROW())=G3-1),N(C$3:INDIRECT("C"&ROW())="탈피"),ROW(G$3:INDIRECT("G"&ROW()))))),"")

; G3 잡아 아래로 (작업 행 만큼) 복사, D3잡아 아래로 복사하면 작업 끝.

 

수식 설명 : G열에 카운터 수행. D열에 "탈피"가 적히면 처음 적힌 경우는 탈피주기를 0으로 표시, 다음부터는 직전에 "탈피"라고 적힌 행을 SUMPRODUCT로 찾아 날짜 빼기 날짜로써 탈피주기를 구함.

 

덧붙임 : 예시는 제가 아는 한 엑셀함수 예제의 난제에 속합니다. 바로 직전 조건을 만족하는 행을 구하는 함수가 없거든요. 배열수식이 유동참조를 지원하면 비교적 간단하지만 그렇지 않고, 보조셀을 위 G열과 같이 두더라도 MATCH함수가 유동참조를 지원하지 않습니다. 그래서 유동참조(행이 변하더라도 범위를 그 행에 맞춰 연산하도록)를 지원하는 VLOOKUP, SUM, COUNTIF, SUMPRODUCT 따위를 활용해야 하지요. 이 예제를 푸는 과정에서 SUMPRODUCT의 유동참조가 가능한 것을 확인한 것은 제게 소득입니다.

'논리 > 엑셀 프로그래밍' 카테고리의 다른 글

시급 계산기  (0) 2008.11.13
단가 조합 구하기   (0) 2008.11.13
다중조건 맞춤 출력  (0) 2008.11.13
근사값을 임의의 갯수 만큼 추출  (0) 2008.11.13
다른 화일의 체크한 행만 표시  (0) 2008.11.13