본문 바로가기

Autohotkey강좌

Autohotkey#42, 엑셀의 특정열만 취합하기

반응형

https://youtu.be/vS9VtCl8uf0

 

#26번 강좌에서 엑셀 취합하기 영상을 올렸는데, 어떤 분이 질문을 주셨습니다. 특정열만 취합하기 위해서는 어떻게 해야 하는지? 

결론적으로 원본의 복사할 범위와 대상이 되는 범위를 조정해 주면 됩니다.

원본의 복사할 범위는 아래식에서 정해집니다.

 iLastCol := exelinput.ActiveSheet.Cells.SpecialCells(11).column
tt := chr( asc("A")+iLastCol -1)
rg = A2:%tt%%iLastRow%

iLastCol에는 해당 엑셀의 마지막 컬럼을 숫자로 반환해서 저장합니다.

그값을 원하는 범위의 마지막 컬럼을 나타내는 숫자로 변경해 주면 됩니다.

예를 들어 D열이라고 하면 A=1, B=2, C=3, D=4.....가 되므로 아래처럼 바꿔 줍니다.

iLastCol := 4   

다음으로 tt에 대한 조작은 마지막컬럼에 해당하는 영문자로 다시 바꾸는 과정입니다.

즉 마지막컬럼의 숫자를 A와의 차이를 더해 준 후 그 숫자를 다시 영문자(character)로 바꿔주는 것입니다.

tt := chr( asc("A")+iLastCol -1)

그러면  asc("A") 는 65이고 iLastCol = 4이므로 chr( 65 + 4 - 1) 이 됩니다. 결국 D가 되는 것입니다.

다음의 rg에는 복사할 범위가 들어갑니다.

rg = A2:%tt%%iLastRow%에서 %tt%는 D이며, %iLastRow%는 마지막행이 됩니다. 예를 들어 마지막행이 5라면

rg는 A2:D5가 되는것입니다.

그런데 우리는 A2부터가 아닌 B열부터 D열로 변경하려고 하므로 A2를 B2로 변경하면 되겠습니다.

rg = B2:%tt%%iLastRow%  ==> rg는 B2:D5가 됩니다.

이제는 대상이 되는 범위를 변경해 줘야 합니다.

기존에는 역시 tt를 이용해서 아래처럼 사용했는데, 시작범위만 변경해 주면 쉽게 변경가능하겠습니다.

drg = A%LastRow%:%tt%%LastRowEnd%

시작이 A부터 시작하므로 이 부분을 B로 변경하면 나머지는 기존처럼 동일하게 돌아갑니다.

drg = B%LastRow%:%tt%%LastRowEnd%

이렇게 수정하고 돌리면 정상적으로 수행이 되는 것을 알 수 있습니다.

추가적으로 GuiClose부분도 추가했습니다. 

GuiClose:
ExitApp
return

변경된 스크립트 참고하십시요.

mergeExcelV1.1.ahk
0.00MB

반응형