본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #80 [ 테이블교차하기 ]

by 일등미노왕국 2023. 10. 19.

 

우선 이 문제를 낸 의도는 MAKEARRAY를 지난시간에 이어서 연습보려고 만들었다.

 

 

 

역시 서랍님은 바로 만들어 보였다...역시 ㄷㄷ

 

우선 이렇게 교차해야 되고 똑딱똑딱 토글형태로 TRUE, FALSE가 반복된다면 Boolean으로 코드가 간단하고 쉬어진다.

 

Dim bln As Boolean

Do

	bln = Not bln

Loop

 

이렇게 하면 루프를 돌면서 한번은 TRUE 한번은 FALSE 값을 가지게 된다.

 

그러면 우리는 TRUE / FALSE에 값들을 달리해서 구문을 풀어내면 된다.

 

r = r                                        
        
key = IIf(bln = False, vA, vB)                
r = IIf(bln = False, r + 1, r)

 

TRUE일때는 왼쪽 표의 값 / FALSE일때는 오른쪽 표의 값

TRUE일때는 왼쪽 표의 새로운 행의 값 r+1 / FALSE일때는 오른쪽 오른쪽 표의 값은 행 r

 

이것을 r =r 으로 새로운 값으로 업데이트하게 되면 우리가 원하는 결과를 도출할 수 있다.

 

 

 

자 그러면 무한 루프를 어떻게 탈출할 수 있을까?

 

구문을 보면 DO - LOOP 사이에서 bln이 토글되면서 무한 반복되면서 값들을 뽑아내고 있는데 이상태로 놔두게 되면 엑셀이 무한루프가 걸리면서 응답없음이 나오게 될것이다.

 

 

If TypeName(Application.Index(key, r)) = "Error" Then Exit Sub   
        
rngX.Resize(1, 3) = Application.Index(key, r)

 

코드 출력전에 출력할 값의 TypeName이 "Error"인지 여부에 따라 계속 진행할지 아니면 종료할지의 구문만 추가해주면 된다.

 

저 구문이 없으면 엑셀은 표1과 표2를 넘어서게 되면

이렇게 에러를 출력하는데 그전에 출력할 값이 에러인지를 파악해서 종료시키면 된다.

 

 

365함수로 풀어보면

MAKEARRAY로 만들어진 새로운 배열에 신규배열의 행번의 홀수 짝수를 판단하여 조건을 달리하여 결과값을 도출하면 된다.

 

기초방80.xlsm
0.06MB

댓글