Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

엑셀(Excel)/VBA
반응형

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

 

환경 : Microsoft Excel 2010

 

사용자정의 함수(User Defined Functions) 는 처음 참조하고나면 다음에 값이 바뀌더라도 재구동하지 않습니다. 이렇게 된다면 값이 바뀔때마다 다시 참조해서 실행해야 한다는 말인데 엄청 불편하겠죠. 이런 불편함을 없애기 위해 Application.Volatile 사용하면 참조하는 값이 바뀔 때 프로그램이 알아내서 재실행 해 줍니다.

 

두셀을 합치는 소스입니다. Application.Volatile 사용하지 않고 구현한 것입니다. 인수로 영역을 받았으며 Offset 를 이용해 바로옆 셀 값을 가져와 더했습니다.

 

Function 영역합치기(cell As Range)

    영역합치기 = cell.Value + cell.Offset(0, 1).Value

End Function

 

시트에서 첫번째 영역값을 넘기게 되면 바로옆 셀을 참조해서 값을 구해 줄겁니다여기서 헷갈리지 말아야 할 것이 함수의 인수로 참조하는 것들은 값을 변동하도 Enter 누른다던지 셀의 위치를 이동하게 되면 자동으로 계산이 됩니다.

 

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

 

20 55 로 바꾸고 바로 Enter 치면 값이 바뀝니다. Application.Volatile 은 이것을 말하는 것이 아닙니다. 소스에서 파라미터로 참조하지 않고 Offset 이나 다른 함수들로 셀을 참조하는 것들이 값이 변동될 때 유효한 함수라는 것입니다.

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

 

 

영역2 는 함수의 인수로 넘기지 않았죠. 70 에서 100 으로 바꾸었는데도 합치기에

값은 변동이 없는 것을 알수 있습니다.

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

 

 

Application.Volatile 를 넣어서 소스를 재 수정 합니다. 그리고 영역1의 값을 바꾸고 Enter 쳐야 바뀐 함수가 적용됩니다.

 

Function 영역합치기(cell As Range)

    Application.Volatile

    영역합치기 = cell.Value + cell.Offset(0, 1).Value

End Function

 

영역2의 값을 바꾸고 Enter 눌러 봅니다. 그럼 아래와 같이 합치기 값이 바뀐 것을 알수 있습니다. 이렇게 넘어온 영역에 대한 제어를 할때는 값 변동값이 제대로 적용되는데 넘어온 영역이 아닌 참조값들이 변동될 때 함수의 내용이 바로 적용될려면 Application.Volatile 사용해야 합니다. 헷갈리지 마시길..

엑셀(Excel) VBA – Application.Volatile 함수로 사용자정의함수 재구동

반응형
Posted by 녹두장군

댓글을 달아 주세요

  1. 지나가다 2016.04.16 07:17  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 의문점 해결했습니다 ㅠ 깔끔하네요.

  2. 좋은정보 2017.02.19 23:39  댓글주소  수정/삭제  댓글쓰기

    종종 올려주신 자료 검색하다가...위 내용이 도움이 되었습니다. 감사합니다. ^^;