VBA에서 Sub 와 Function은 서로 비슷해서 혼용해서 사용하기도 하지만

아래와 같은 차이점이 존재합니다.

 

 

 

Sub (Routine):

  • 중규모로 주로 공개적, 대외적으로 사용.
  • 주로 리턴값 없음
  • Alt f8 누르면 목록에 나옴, Private Sub로 쓰면 안나옴
  • AdressOf 로 Timer API 등에서 호출가능
  • mySub x로 호출. mySub(x) 호출 불가. Call mySub(x) 가능(byVal)
  • 여러가지 상/하위 Sub 나 Function을 호출
  • 도형이나 버튼에 매크로 지정 가능
  • 빠른실행에 추가 가능

Function:

  • 소규모로 주로 내부적으로 사용.
  • 주로 리턴값 있을 때 많음. 없어도 무방.
  • 이유 없는 소규모 단순 반복작업에 적합. 
  • Alt f8 눌렀을 때 함수목록에 나오지 않음.
  • AddressOf 의 인수로 쓰면 오류 발생.
  • myFunc(x) 또는 Call myFunc(x) 가능
  • 엑셀에서 '사용자정의함수(User Defined Function)'로 사용 가능
  • 도형 버튼에 매크로 지정 불가능
  • 빠른실행에 추가 불가