논리/엑셀 프로그래밍

3 조건 이상의 마지막 행 잡아 내기

섬그늘 2008. 11. 14. 12:42

 

http://kin.naver.com/detail/detail.php?d1id=1&dir_id=1050202&eid=5DcZU6lEIemseRJwgdZCpYJZIDoWt3kl

  

 

B

C

D

E

F

G

2

번호

데이터

날짜

시간

 

 

3

333

aaa

2008-02-10

21:00

1

1

4

111

bbb

2008-02-12

11:00

2

3

5

111

ccc

2008-02-12

12:00

2

4

6

222

ddd

2008-02-12

10:00

3

3

7

111

eee

2008-02-10

21:10

2

1

8

222

fff

2008-02-10

15:00

3

1

9

333

ggg

2008-02-11

18:01

1

3

10

222

hhh

2008-02-12

17:00

3

4

11

333

iii

2008-02-11

18:00

1

2

12

111

jjj

2008-02-12

10:00

2

2

13

222

kkk

2008-02-10

20:00

3

2

14

 

 

 

 

 

 

15

333

ggg

 

 

 

9

16

111

ccc

 

 

 

5

17

222

hhh

 

 

 

10

18

#N/A

#N/A

 

 

 

###

 

설명을 위해 간략히 예시했습니다. (구조는 올리신 질문과 같습니다.) 데이타가 B3:E13에 있을 때,

F3 =IF(COUNTIF(B$2:B2,B3)=0,MAX(F$2:F2)+1,VLOOKUP(B3,B$3:F3,5,0)) ; 새로운 번호가 나오면 카운터 증가

G3 =SUMPRODUCT((B$3:B$13=B3)*(D$3:D$13<D3))+SUMPRODUCT((B$3:B$13=B3)*(D$3:D$13=D3)*(E$3:E$13<=E3)) ; 해당 번호 중 시간 순서

B15 =INDEX(B$3:B$13,MATCH(ROW(A1),F$3:F$13,0)) ; 등장 순서대로 번호 가져오기

G15 =SUMPRODUCT((B$3:B$13=B15)*(G$3:G$13=COUNTIF(B$3:B$13,B15))*ROW(G$3:G$13)) ; 행 번호

C15 =OFFSET(C$2,G15-ROW(C$2),0) ; G15의 마지막 행 번호에 해당하는 데이타 가져오기

 

F3:G3 잡아 아래로 데이타 행 만큼, B15:C15 잡아 아래로 데이타가 다 나오기까지 (#N/A에러가 뜨기까지) 채우면 표가 완성됩니다. 배열수식(속도 문제)을 쓰지 않으려면 이와 같이 보조열을 하나는 써줘야 할 듯 싶습니다. G15가 원하는 '그 번호의 가장 최근 데이타'가 있는 행번호이며, 이걸 구하기 위해 G3에서 (번호가 일치하면서도 날짜는 빠른 행의 수) + (번호와 날짜가 일치하고 시간이 빠른 행 수)를 계산, 주어진 B15의 번호가 원본에 등장하는 수 (333의 경우 3번)와 같은 G열의 행 (9행)을 찾아냅니다. 이 방법은 B열이 문자열로 주어질 때 더욱 유효합니다.