본문 바로가기

프로그래밍(Programing)/엑셀매크로_vba(Excel-Macro)

선택한 셀의 행,열 위치 저장하기1

필요한 매크로를 만들던 중 시트안에서 규칙대로 있는 문단?영역? 범위들의 똑같은 반복 작업을 실행하기 위해서 만드 매크로를 다른 분들도 사용할 일 있을까 써보려고 한다.  

 

위에 말한 규칙있는 영역이란

아래그림을 말하는데

아래 그림은 간단하게 설명하려고 4개의 영역만 보였지만 제가 진짜 만들건은 가로 4개(최대7개이상) 아래로 8개 이고 좀더 고려할 변수가 많습니다.

규칙대로 있는 4개의 영역

 

 

내가 하고 싶은건

1. A영역 1번셀부터 32번 셀까지의 원하는 작업을 한다.

2. 1을 다하면 B영역으로 가서  1과 똑같이 작업을 한다.

3. B를 다하면 C로,  C를 다하면 D 작업을 한다.

 

이렇게 반복작업을 원한다.

 

이렇게 하기위해 알고리즘을 짜봤는데 

옆으로 몇번 반복할건지?(A -> B 2번)

아래로 몇번 반복할건지?(A -> C 2번)

 

A의영역안에서 옆으로 몇번?(1->29 8번)

A의영역안에서 아래로 몇번?(1->4  4번)

 

이렇게 한다는 것을, 시작 버튼을 만들어 누르고 

반복한다는것을 저장해두어  알고리즘을 만들면 좋겠다 싶었다. 

 

 

간단한 알고리즘

A영역순서를 아래-> 옆으로 해도 상관없다. (만드는자가 편한 방법이 제일 좋죠..)

 

여기서 주의할점은 A의 영역을 끝내고 B에서 동작하기위해 B의 첫 시작점을 몰라 반복할 수 없어진다.

이 말은 B를 끝내고 C영역으로 첫 시작점도 알 수있게 설정을 해놓아야 한다.

 

여기서도 만드는 사람마다 어떻게 할지 갈리는데

 

저는 첫영역(A), 그다음(B)영역의 시작점과 

첫영역의 아래(C의 영역)의 시작점의 행과열위치를 저장해서 처리합니다.

 

1.  A의 시작점이 (1,1)를 행과 열 분리하여 저장.

2.  B는 (1,13)이면 열13-1=12를 저장,  C는 (12,1)이면 행12-1=11를 저장.

3. A가 끝나고 B동작할때 시작점의 열1에 12를 더해서 시작. [(1,13)부터 실행]

4. B에서 C로 갈때(forA->C동작모습)   열을 빼주고 (13- (1 x 12)), 행을 더하면(1+11) 된다. (1,12)

 

4번에서 1x12를 한 이유는 지금은 A옆에 다음B가 하나지만  A B C옆으로 3개가 있음 2번을 빼줘야 할 경우도 있기 때문이다.

 

이 방법을 하기위해 어떤 함수와 동작을 썼는지는 다음에 알아보자.

728x90