엑셀(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 누른다던지 셀의 위치를 이동하게 되면 자동으로 계산이 됩니다.
▼ 20 을 55 로 바꾸고 바로 Enter 치면 값이 바뀝니다. Application.Volatile 은 이것을 말하는 것이 아닙니다. 소스에서 파라미터로 참조하지 않고 Offset 이나 다른 함수들로 셀을 참조하는 것들이 값이 변동될 때 유효한 함수라는 것입니다.
▼ 영역2 는 함수의 인수로 넘기지 않았죠. 70 에서 100 으로 바꾸었는데도 합치기에
값은 변동이 없는 것을 알수 있습니다.
▼ 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' 카테고리의 다른 글
엑셀(Excel) VBA – 셀에 적용된 같은 배경색 데이터 합산하기 (7) | 2014.12.28 |
---|---|
엑셀(Excel) VBA – 문자열에서 숫자, 대문자, 소문자, 한글추출하기 (5) | 2014.12.24 |
엑셀(Excel) VBA – Application.Evaluate 함수 이용해서 수식문자열계산하기 (2) | 2014.12.23 |
엑셀(Excel) VBA – 수식을 문자열로 바꾸는 사용자정의 함수 만들기 (0) | 2014.12.22 |
엑셀(Excel) VBA – 선택한 셀시트명, 파일명, 위치를 알아오는 사용자정의함수 (0) | 2014.12.20 |
엑셀(Excel) VBA – 사용자정의 함수 세부내용 VB 코드로 등록하기 (1) | 2014.12.19 |
엑셀(Excel) VBA - 셀영역의 값을 복사하기 (1) | 2014.12.18 |
엑셀(Excel) VBA - 스크롤 막대 컨트롤 이용해서 대출상환금 구하기 (0) | 2014.12.16 |