VBA의 "함수" 및 "하위" 절차

내장 VBA 기능

고유한 VBA 함수를 만들기 시작하기 전에 Excel VBA에는 코드를 작성하는 동안 사용할 수 있는 미리 빌드된 기본 제공 함수의 풍부한 컬렉션이 있다는 것을 아는 것이 좋습니다.

이러한 기능 목록은 VBA 편집기에서 볼 수 있습니다.

  • Excel 통합 문서를 열고 VBA 편집기를 시작합니다(이렇게 하려면 클릭하십시오. Alt + F11)를 누른 다음 F2.
  • 화면 왼쪽 상단의 드롭다운 목록에서 라이브러리 선택 VBA.
  • 기본 제공 VBA 클래스 및 기능 목록이 나타납니다. 기능 이름을 클릭하면 창 하단에 간략한 설명이 표시됩니다. 누르는 F1 해당 기능에 대한 온라인 도움말 페이지가 열립니다.

또한 예제와 함께 기본 제공 VBA 함수의 전체 목록은 Visual Basic 개발자 센터에서 찾을 수 있습니다.

VBA의 사용자 정의 절차 "Function" 및 "Sub"

Excel Visual Basic에서 특정 작업을 수행하는 명령 집합은 프로시저에 배치됩니다. 함수 (기능) 또는 서브 (서브루틴). 절차의 주요 차이점 함수 и 서브 그 절차는 함수 결과, 절차를 반환 서브 - 아니다.

따라서 작업을 수행하고 결과를 얻어야 하는 경우(예: 여러 숫자 합산) 절차가 일반적으로 사용됩니다. 함수, 그리고 단순히 일부 작업(예: 셀 그룹의 서식 변경)을 수행하려면 절차를 선택해야 합니다. 서브.

인수

인수를 사용하여 다양한 데이터를 VBA 프로시저에 전달할 수 있습니다. 인수 목록은 프로시저를 선언할 때 지정됩니다. 예를 들어, 절차 서브 VBA에서 주어진 정수(Integer)를 선택한 범위의 각 셀에 추가합니다. 다음과 같이 인수를 사용하여 이 번호를 프로시저에 전달할 수 있습니다.

Sub AddToCells(i As Integer) ... End Sub

절차에 대한 주장이 있음을 명심하십시오. 함수 и 서브 VBA에서는 선택 사항입니다. 일부 절차에는 인수가 필요하지 않습니다.

선택적 인수

VBA 프로시저에는 선택적 인수가 있을 수 있습니다. 사용자가 원할 경우 지정할 수 있는 인수이며 생략할 경우 프로시저는 기본값을 사용합니다.

이전 예제로 돌아가서 함수에 대한 정수 인수를 선택 사항으로 만들려면 다음과 같이 선언합니다.

Sub AddToCells(선택적 i As Integer = 0)

이 경우 정수 인수 i 기본값은 0입니다.

프로시저에는 여러 선택적 인수가 있을 수 있으며 모두 인수 목록 끝에 나열됩니다.

값 및 참조로 인수 전달

VBA의 인수는 두 가지 방법으로 프로시저에 전달할 수 있습니다.

  • ByVal의 – 값으로 인수를 전달합니다. 즉, 값(즉, 인수의 복사본)만 프로시저에 전달되므로 프로시저 내부의 인수에 대한 변경 사항은 프로시저가 종료될 때 손실됩니다.
  • 하는 ByRef – 참조로 인수를 전달합니다. 즉, 메모리에 있는 인수 위치의 실제 주소가 프로시저에 전달됩니다. 프로시저 내에서 인수에 대한 변경 사항은 프로시저가 종료될 때 저장됩니다.

키워드 사용 ByVal의 or 하는 ByRef 프로시저 선언에서 인수가 프로시저에 전달되는 방법을 지정할 수 있습니다. 이는 아래 예에 나와 있습니다.

Sub AddToCells(ByVal i As Integer) ... End Sub
이 경우 정수 인수 i 값으로 전달됩니다. 절차를 마친 후 서브 모두 함께 만든 i 변경 사항이 손실됩니다.
Sub AddToCells(ByRef i As Integer) ... End Sub
이 경우 정수 인수 i 참조로 전달되었습니다. 절차를 마친 후 서브 모두 함께 만든 i 변경 사항은 프로시저에 전달된 변수에 저장됩니다. 서브.

VBA의 인수는 기본적으로 참조로 전달됩니다. 즉, 키워드를 사용하지 않는 경우 ByVal의 or 하는 ByRef, 인수는 참조로 전달됩니다.

절차를 진행하기 전에 함수 и 서브 더 자세하게, 이 두 가지 유형의 절차 간의 기능과 차이점을 다시 살펴보는 것이 유용할 것입니다. 다음은 VBA 절차에 대한 간략한 설명입니다. 함수 и 서브 및 간단한 예가 표시됩니다.

VBA 절차 «기능»

VBA 편집기가 절차를 인식합니다. 함수다음 여는 문과 닫는 문 사이에 포함된 명령 그룹을 만날 때:

기능 ... 기능 종료

절차는 앞서 말씀드린 것처럼 함수 VBA에서(반대로 서브) 값을 반환합니다. 반환 값에는 다음 규칙이 적용됩니다.

  • 반환 값의 데이터 유형은 프로시저의 헤더에 선언되어야 합니다. 함수.
  • 반환 값을 포함하는 변수의 이름은 프로시저와 동일해야 합니다. 함수. 이 변수는 항상 프로시저의 필수 부분으로 존재하므로 별도로 선언할 필요가 없습니다. 함수.

이것은 다음 예에서 잘 설명되어 있습니다.

VBA 함수 예제: 3개의 숫자에 대한 수학 연산 수행

다음은 VBA 프로시저 코드의 예입니다. 함수, 유형의 세 가지 인수를 사용합니다. (배정밀도 부동 소수점 숫자). 결과적으로 프로시저는 다른 수의 유형을 반환합니다. 처음 두 인수의 합에서 세 번째 인수를 뺀 것과 같습니다.

함수 SumMinus(dNum1을 Double로, dNum2를 Double로, dNum3을 Double로) Double로 SumMinus = dNum1 + dNum2 - dNum3 End Function

이 매우 간단한 VBA 절차 함수 데이터가 인수를 통해 프로시저에 전달되는 방법을 보여줍니다. 프로시저에 의해 반환된 데이터 유형이 다음과 같이 정의된 것을 볼 수 있습니다. (말은 말한다 더블로 인수 목록 뒤). 이 예는 또한 절차의 결과가 어떻게 함수 프로시저 이름과 같은 이름의 변수에 저장됩니다.

VBA 프로시저를 "함수"로 호출

위의 간단한 절차를 따르면 함수 Visual Basic 편집기의 모듈에 삽입하면 다른 VBA 프로시저에서 호출하거나 Excel 통합 문서의 워크시트에서 사용할 수 있습니다.

다른 프로시저에서 VBA 프로시저 "Function" 호출

순서 함수 해당 프로시저를 변수에 할당하기만 하면 다른 VBA 프로시저에서 호출할 수 있습니다. 다음 예는 프로시저에 대한 호출을 보여줍니다. 서미누스, 위에서 정의한 것입니다.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

워크시트에서 VBA 프로시저 "Function" 호출

VBA 절차 함수 다른 기본 제공 Excel 함수와 동일한 방식으로 Excel 워크시트에서 호출할 수 있습니다. 따라서 이전 예제에서 만든 프로시저 함수 - 서미누스 워크시트 셀에 다음 표현식을 입력하여 호출할 수 있습니다.

=SumMinus(10, 5, 2)

VBA 절차 «Sub»

VBA 편집기는 앞에 절차가 있음을 이해합니다. 서브다음 여는 문과 닫는 문 사이에 포함된 명령 그룹을 만날 때:

서브 ... 서브 종료

VBA 절차 "Sub": 예 1. 선택한 셀 범위에서 가운데 ​​맞춤 및 글꼴 크기 변경

간단한 VBA 절차의 예를 고려하십시오. 서브, 선택한 셀 범위의 서식을 변경하는 작업입니다. 셀이 중앙에 배치되고(세로 및 가로로 모두) 글꼴 크기가 사용자 지정으로 변경됩니다.

Sub Format_Centered_And_Sized(선택적 iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

이 절차 서브 작업을 수행하지만 결과를 반환하지 않습니다.

이 예에서는 Optional 인수도 사용합니다. 글꼴 크기. 만약 인수 글꼴 크기 절차에 통과되지 않음 서브, 기본값은 10입니다. 그러나 인수가 글꼴 크기 절차에 통과 서브, 그러면 선택한 셀 범위가 사용자가 지정한 글꼴 크기로 설정됩니다.

VBA 하위 절차: 예 2: 선택한 셀 범위에서 가운데 ​​맞춤 및 굵은 글꼴

다음 절차는 방금 설명한 절차와 유사하지만 이번에는 크기를 조정하는 대신 선택한 셀 범위에 굵은 글꼴 스타일을 적용합니다. 이것은 예시적인 절차입니다 서브, 인수를 사용하지 않습니다.

하위 Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Excel VBA에서 "Sub" 프로시저 호출

다른 프로시저에서 VBA 프로시저 "Sub" 호출

VBA 프로시저를 호출하려면 서브 다른 VBA 프로시저에서 키워드를 작성해야 합니다. 더 자세한 문의 사항이 있으시거나, 견적을 원하시면 오늘 바로 연락주세요, 프로시저 이름 서브 그리고 괄호 안에는 프로시저의 인수가 있습니다. 이는 아래 예에 나와 있습니다.

Sub main() 호출 Format_Centered_And_Sized(20) End Sub

만약 절차가 형식_중앙_및_크기 인수가 두 개 이상인 경우 쉼표로 구분해야 합니다. 이와 같이:

Sub main() Format_Centered_And_Sized(arg1, arg2, ...) 호출 End Sub

워크시트에서 VBA 프로시저 "Sub" 호출

순서 서브 프로시저와 같이 Excel 시트 셀에 직접 입력할 수 없습니다. 함수때문에 절차 서브 값을 반환하지 않습니다. 다만, 절차 서브, 인수가 없고 다음과 같이 선언됩니다. 공공 영역 (아래 표시된 대로) 워크시트 사용자가 사용할 수 있습니다. 따라서 위에서 설명한 간단한 절차 서브 Visual Basic Editor의 모듈에 삽입된 프로시저 형식_중앙_및_굵게 Excel 워크시트에서 사용할 수 있으며 절차 형식_중앙_및_크기 – 인수가 있으므로 사용할 수 없습니다.

다음은 프로시저를 실행(또는 실행)하는 쉬운 방법입니다. 서브, 워크시트에서 액세스할 수 있습니다.

  • PR 기사 Alt + F8 (키를 눌러 다른 누른 상태에서 키를 누릅니다. F8).
  • 나타나는 매크로 목록에서 실행할 매크로를 선택합니다.
  • PR 기사 달리기 (운영)

절차를 수행하려면 서브 빠르고 쉽게 키보드 단축키를 할당할 수 있습니다. 이를 위해:

  • PR 기사 Alt + F8.
  • 나타나는 매크로 목록에서 키보드 단축키를 할당할 매크로를 선택합니다.
  • PR 기사 파라미터 (옵션)을 클릭하고 나타나는 대화 상자에서 키보드 단축키를 입력합니다.
  • PR 기사 OK 대화 상자를 닫습니다. 매크로 (매크로).

주의: 매크로에 바로 가기 키를 할당할 때 Excel에서 표준으로 사용되지 않는지 확인하십시오(예: Ctrl + C). 이미 존재하는 바로 가기 키를 선택하면 매크로에 다시 할당되어 사용자가 실수로 매크로를 시작할 수 있습니다.

VBA 절차 범위

이 튜토리얼의 2부에서는 변수와 상수의 범위와 키워드의 역할에 대해 설명했습니다. 공공 영역 и 프라이빗 투어. 다음 키워드는 VBA 프로시저에도 사용할 수 있습니다.

Public Sub AddToCells(i As Integer) ... End Sub
프로시저 선언 앞에 키워드가 있는 경우 공공 영역, 그러면 해당 VBA 프로젝트의 모든 모듈에서 절차를 사용할 수 있습니다.
Private Sub AddToCells(i As Integer) ... End Sub
프로시저 선언 앞에 키워드가 있는 경우 프라이빗 투어, 이 절차는 현재 모듈에서만 사용할 수 있습니다. 다른 모듈이나 Excel 통합 문서에 있는 동안에는 호출할 수 없습니다.

VBA 프로시저를 선언하기 전에 함수 or 서브 키워드가 삽입되지 않은 경우 프로시저에 대한 기본 속성이 설정됩니다. 공공 영역 (즉, 이 VBA 프로젝트의 모든 곳에서 사용할 수 있습니다). 이것은 기본적으로 다음과 같은 변수 선언과 대조됩니다. 프라이빗 투어.

VBA 절차 "Function" 및 "Sub" 조기 종료

VBA 프로시저의 실행을 종료해야 하는 경우 함수 or 서브, 자연스러운 결말을 기다리지 않고 연산자가 있습니다. 출구 기능 и 서브 종료. 이러한 연산자의 사용은 간단한 절차를 예로 들어 아래에 나와 있습니다. 함수추가 작업을 수행하기 위해 긍정적인 인수를 받을 것으로 예상되는 A. 양수가 아닌 값이 프로시저에 전달되면 더 이상 작업을 수행할 수 없으므로 사용자에게 오류 메시지가 표시되고 프로시저가 즉시 종료되어야 합니다.

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "sVAT_Rate의 양수 값이 예상되었지만 수신됨" & sVAT_Rate Exit Function End If ... End Function

절차를 완료하기 전에 함수 - VAT_금액, 내장 VBA 함수가 코드에 삽입됩니다. MsgBox, 사용자에게 경고 팝업을 표시합니다.

댓글을 남겨주세요.