VBA로 Excel 매크로를 프로그래밍할 때 피해야 할 4가지 실수

VBA로 Excel 매크로를 프로그래밍할 때 피해야 할 4가지 실수

마이크로 소프트 엑셀 는 이미 유능한 데이터 분석 도구이지만 VBA(Visual Basic for Applications)로 간단한 코드를 작성하여 매크로를 사용하여 반복적인 작업을 자동화하는 기능이 훨씬 더 강력합니다. 그러나 잘못 사용하면 VBA가 문제를 일으킬 수 있습니다.





프로그래머가 아니더라도 VBA는 스프레드시트에 인상적인 기능을 추가할 수 있는 간단한 기능을 제공합니다.





Excel에서 대시보드를 만드는 VBA 전문가이거나 기본 셀 계산을 수행하는 간단한 스크립트를 작성하는 초보자인지 여부는 중요하지 않습니다. 다음의 간단한 프로그래밍 기술을 따라 깨끗하고 버그가 없는 코드를 작성하는 방법을 배우십시오.





VBA 시작하기

VBA는 모든 종류의 깔끔한 작업을 수행할 수 있습니다. 시트를 수정하는 매크로 작성에서 VBA 스크립트를 사용하여 Excel 스프레드시트에서 이메일 보내기 생산성에 대한 제한은 거의 없습니다.

Excel에서 VBA로 프로그래밍하지 않은 경우 Excel 프로그램에서 개발자 도구를 활성화해야 합니다. 좋은 소식은 개발자 도구를 활성화하는 것이 실제로 매우 쉽다는 것입니다. 그냥 가 파일 > 옵션 그리고 리본 사용자 정의 . 그냥 움직여 개발자 탭을 왼쪽 창에서 오른쪽으로 이동합니다.



확인란에 이 탭이 활성화되어 있는지 확인하십시오. 그러면 이제 개발자 탭이 Excel 메뉴에 나타납니다.

여기에서 코드 편집기 창으로 들어가는 가장 쉬운 방법은 코드 보기 아래의 버튼 통제 수단 개발자 메뉴에서





이제 VBA 코드를 작성할 준비가 되었습니다! 이 탭에서는 VBA 및 Excel에서 매크로 기록 . 이제 Excel이 작동할 준비가 되었으므로 피해야 할 몇 가지 일반적인 실수와 이를 방지하는 방법에 대해 알아보겠습니다.

1. 끔찍한 변수 이름

이제 코드 창에 있으므로 VBA 코드 작성을 시작할 차례입니다. VBA든 다른 언어든 대부분의 프로그램에서 첫 번째 중요한 단계는 변수를 정의하는 것입니다. 변수 이름을 올바르게 지정하지 않는 것은 신규 개발자가 저지르는 가장 흔한 프로그래밍 실수 중 하나입니다.





위시컴이 왜이렇게 싼지

수십 년에 걸친 코드 작성 기간 동안 저는 변수 명명 규칙과 관련하여 여러 학파를 접했고 몇 가지 규칙을 어렵게 배웠습니다. 다음은 변수 이름을 만드는 몇 가지 빠른 팁입니다.

  • 가능한 한 짧게 만드십시오.
  • 가능한 한 기술적으로 작성하십시오.
  • 변수 유형(부울, 정수 등...)으로 시작합니다.

다음은 PC 정보를 수집하기 위해 Excel에서 WMIC Windows를 호출하는 데 자주 사용하는 프로그램의 샘플 스크린샷입니다.

모듈이나 객체 내에서 함수 내부의 변수를 사용하려면(아래에서 설명하겠습니다), 선언 앞에 '공용' 변수로 선언해야 합니다. 공공의 . 그렇지 않으면 변수는 단어로 시작하여 선언됩니다. 없음 .

보시다시피 변수가 정수인 경우 정수 . 문자열이면 NS . 이름을 보면 변수에 어떤 유형의 데이터가 있는지 항상 알 수 있기 때문에 나중에 프로그래밍하는 동안 도움이 되는 개인 설정입니다.

또한 Excel 통합 문서에서 시트의 이름을 지정해야 합니다.

이렇게 하면 Excel VBA 코드에서 시트 이름을 참조할 때 의미가 있는 이름을 참조하게 됩니다. 위의 예에서 네트워크 정보를 가져오는 시트가 있으므로 시트를 '네트워크'라고 합니다. 네트워크 시트를 참조하고 싶을 때마다 시트 번호를 조회하지 않고도 빠르게 할 수 있습니다.

2. 루핑 대신 끊기

새로운 VBA 프로그래머가 코드 작성을 시작할 때 겪는 가장 일반적인 문제 중 하나는 루프를 적절하게 처리하는 것입니다.

루프는 종종 전체 행이나 열의 데이터 값을 처리하기 때문에 Excel에서 매우 일반적입니다. 따라서 모든 데이터를 처리하려면 루프를 사용해야 합니다.

새로운 프로그래머는 종종 특정 조건이 참일 때 즉시 루프(VBA For 루프 또는 VBA Do While 루프)에서 벗어나고 싶어합니다.

다음은 VBA 루프를 끊는 데 사용되는 이 방법의 예입니다.

For x = 1 To 20
If x = 6 Then Exit For
y = x + intRoomTemp
Next i

새로운 프로그래머는 이 방법이 쉽기 때문에 이 방법을 사용합니다. 루프를 명시적으로 깨뜨리지 않도록 하십시오.

종종 'break' 다음에 오는 코드는 처리하는 데 중요합니다. 루프를 중간에 남기고자 하는 조건을 처리하는 훨씬 깨끗하고 전문적인 방법은 VBA While 문과 같은 것에 종료 조건을 포함시키는 것입니다.

While (x>=1 AND x<=20 AND x6)
For x = 1 To 20
y = x + intRoomTemp
Next i
Wend

이것은 코드의 논리적 흐름을 허용합니다. 이제 코드는 반복되고 6에 도달하면 중지됩니다. 루프 중간에 어색한 EXIT 또는 BREAK 명령을 포함할 필요가 없습니다.

3. 배열을 사용하지 않음

새로운 VBA 프로그래머가 저지르는 또 다른 흥미로운 실수는 계산 프로세스 중에 행과 열을 필터링하는 수많은 중첩 루프 내부의 모든 것을 처리하려고 시도하는 것입니다.

이것은 또한 주요 성능 문제로 이어질 수 있습니다. 열을 반복하고 매번 값을 추출하는 것은 프로세서의 킬러입니다. 긴 숫자 목록을 처리하는 더 효율적인 방법은 배열을 활용하는 것입니다.

이전에 어레이를 사용한 적이 없더라도 두려워하지 마십시오. 배열을 정보를 넣을 수 있는 특정 수의 '큐브'가 있는 얼음 쟁반으로 상상해 보십시오. 큐브는 1에서 12까지 번호가 매겨져 있으며, 이것이 바로 큐브에 데이터를 '넣는' 방법입니다.

다음을 입력하여 배열을 쉽게 정의할 수 있습니다. Dim arrMyArray(12)를 정수로 .

당신이 좋아하는 것을 기반으로 한 TV 쇼 추천

이렇게 하면 채울 수 있는 12개의 슬롯이 있는 '트레이'가 생성됩니다.

배열이 없는 행 반복 코드는 다음과 같습니다.

Sub Test1()
Dim x As Integer
intNumRows = Range('A2', Range('A2').End(xldown)).Rows.Count
Range('A2').Select
For x = 1 To intNumRows
If Range('A' & str(x)).value <100 then
intTemp = (Range('A' & str(x)).value) * 32 - 100
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub

이 예에서 코드는 범위의 모든 단일 셀을 처리하고 온도 계산을 수행합니다.

이러한 동일한 값에 대해 다른 계산을 수행하려는 경우 프로세스가 복잡할 것입니다. 이 코드를 복제하고 이 모든 셀을 처리하고 새 계산을 수행해야 합니다. 한 번의 변화를 위한 모든 것!

다음은 배열을 사용하는 더 나은 예입니다. 먼저 배열을 생성해 보겠습니다.

Sub Test1()
Dim x As Integer
intNumRows = Range('A2', Range('A2').End(xldown)).Rows.Count
Range('A2').Select
For x = 1 To intNumRows
arrMyArray(x-1) = Range('A' & str(x)).value)
ActiveCell.Offset(1, 0).Select
Next
End Sub

NS x-1 For 루프가 1에서 시작하기 때문에 배열 요소를 가리키는 for만 필요합니다. 배열 요소는 0에서 시작해야 합니다.

이제 배열이 있으므로 내용을 처리하는 것이 매우 간단합니다.

Sub TempCalc()
For x = 0 To UBound(arrMyArray)
arrMyTemps(y) = arrMyArray(x) * 32 - 100
Next
End Sub

이 예제는 전체 행 배열( 유바운드 배열에 있는 데이터 값의 수를 제공함), 온도 계산을 수행한 다음, 이라는 다른 배열에 넣습니다. arrMyTemps .

4. 너무 많은 참조 사용

완전한 Visual Basic으로 프로그래밍하든 VBA로 프로그래밍하든 특정 기능에 액세스하려면 '참조'를 포함해야 합니다.

참조는 해당 파일을 활성화하면 사용할 수 있는 기능으로 채워진 일종의 '라이브러리'와 같습니다. 개발자 보기에서 다음을 클릭하여 참조를 찾을 수 있습니다. 도구 메뉴에서 다음을 클릭하십시오. 참고문헌 .

이 창에서 찾을 수 있는 것은 현재 VBA 프로젝트에 대해 현재 선택된 모든 참조입니다.

불필요한 참조는 시스템 리소스를 낭비할 수 있으므로 이 목록을 확인해야 합니다. XML 파일 조작을 사용하지 않는다면 왜 Microsoft XML을 선택해야 합니까? 데이터베이스와 통신하지 않는 경우 Microsoft DAO 등을 제거하십시오.

이 선택된 참조가 무엇을 하는지 확실하지 않으면 다음을 누르십시오. F2 그러면 개체 탐색기가 표시됩니다. 이 창의 상단에서 찾아볼 참조 라이브러리를 선택할 수 있습니다.

선택하면 모든 개체와 사용 가능한 기능이 표시되며 클릭하여 자세히 알아볼 수 있습니다.

예를 들어, DAO 라이브러리를 클릭하면 이것이 데이터베이스에 연결하고 통신하는 것에 관한 것임을 금방 알 수 있습니다.

프로그래밍 프로젝트에서 사용하는 참조 수를 줄이는 것은 좋은 일이며 전체 응용 프로그램을 보다 효율적으로 실행하는 데 도움이 됩니다.

avast가 있는 경우 Windows Defender를 비활성화해야 하나요?

Excel VBA 프로그래밍

실제로 Excel로 코드를 작성한다는 전체 아이디어는 많은 사람들에게 겁을 주지만 이러한 두려움은 실제로 필요하지 않습니다. Visual Basic for Applications는 배우기 매우 간단한 언어이며 위에서 언급한 기본적인 일반적인 방법을 따르면 코드가 깨끗하고 효율적이며 이해하기 쉽습니다.

그래도 거기서 멈추지 마세요. Excel 기술의 강력한 기반 구축 초보자를 위한 VBA 튜토리얼 . 그런 다음 스프레드시트를 자동화하는 데 도움이 되는 리소스와 함께 VBA 및 매크로에 대해 계속 학습하십시오.

공유하다 공유하다 트위터 이메일 Windows 11로 업그레이드할 가치가 있습니까?

Windows가 새롭게 디자인되었습니다. 그러나 Windows 10에서 Windows 11로 전환하도록 설득하기에 충분합니까?

다음 읽기
관련 항목
  • 생산력
  • 프로그램 작성
  • 프로그램 작성
  • 비주얼 베이직 프로그래밍
  • 마이크로 소프트 엑셀
저자 소개 앤서니 그랜트(40편 게재)

Anthony Grant는 프로그래밍 및 소프트웨어 분야의 프리랜서 작가입니다. 그는 프로그래밍, Excel, 소프트웨어 및 기술을 다루는 컴퓨터 공학 전공자입니다.

앤서니 그랜트가 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.