엑셀 VBA 단위 변환 사용자 정의 폼 만들기

엑셀(Excel)/VBA

엑셀 VBA 단위 변환 사용자 정의 폼 만들기

 

환경: Microsoft Excel 2013

 

오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 단위 변환 기능을 하는 프로그램입니다. 2개의 리스트 박스에 각 단위를 넣고 왼쪽에서 오른쪽으로 값을 변환하는 것입니다. 변환할 단위는 길이 값입니다. 내부는 2차원 배열과 For 반복문을 이용해서 구현하였습니다.


 

먼저 폼을 추가합니다. 그리고 단위 변환을 위한 화면을 구성합니다. 상단에는 리스트 박스 두 개와 아래에 변환 값을 입력하고 표현할 텍스트 박스를 추가합니다.

엑셀 VBA 단위 변환 사용자 정의 폼 만들기

 

화면 구성이 끝났다면 소스를 입력해서 기능을 구현해야겠죠. 폼에서 오른 마우스를 눌러 [코드 보기] 메뉴를 선택합니다.  

엑셀 VBA 단위 변환 사용자 정의 폼 만들기

 

폼이 뜨면 실행하는 초기화 함수부터 구현합니다. 왼쪽 콤보박스에서 UserForm 과 오른쪽 콤보박스에서 Initialize 를 선택합니다. 그럼 초기화 함수 UserForm_Initialize() 함수가 자동으로 생성됩니다

엑셀 VBA 단위 변환 사용자 정의 폼 만들기

 


함수의 내용은 다음과 같습니다. 폼 화면 상단에 있는 두 개의 리스트 박스를 변환할 단위로 채웁니다. 그리고 단위 값들을 2차원 배열로 만들어서 저장합니다.

 

Dim rates(0 To 3, 0 To 3) As Double, i As Integer, j As Integer

 

Private Sub UserForm_Initialize()

       

    With ListBox1

        .AddItem "밀리미터(mm)"

        .AddItem "센티미터(cm)"

        .AddItem "미터(m)"

        .AddItem "킬로미터(km)"

    End With

 

    With ListBox2

        .AddItem "밀리미터(mm)"

        .AddItem "센티미터(cm)"

        .AddItem "미터(m)"

        .AddItem "킬로미터(km)"

    End With

   

    ListBox1.ListIndex = 0

    ListBox2.ListIndex = 0

   

    '' 배열에 단위 변환 값을 채운다

 

    rates(0, 0) = 1        ' mm

    rates(0, 1) = 0.1      ' cm

    rates(0, 2) = 0.001    ' m

    rates(0, 3) = 0.000001 ' km

   

    rates(1, 0) = 10

    rates(1, 1) = 1

    rates(1, 2) = 0.01

    rates(1, 3) = 0.00001

   

    rates(2, 0) = 1000

    rates(2, 1) = 100

    rates(2, 2) = 1

    rates(2, 3) = 0.001

   

    rates(3, 0) = 1000000

    rates(3, 1) = 100000

    rates(3, 2) = 1000

    rates(3, 3) = 1

   

End Sub

 

폼을 시작한 결과는 다음과 같습니다. UserForm_Initialize() 함수가 실행되면서 리스트 박스에 단위가 들어갑니다

엑셀 VBA 단위 변환 사용자 정의 폼 만들기

 

이제 변환버튼을 눌렀을 때 실행할 함수를 구현해야 합니다. UserForm_Initialize() 에서 저장한 2차원 배열의 값들을 꺼내서 변환하는 과정을 담고 있습니다. 좀더 이해가 쉽도록 동영상을 만들어서 올렸습니다. 참고하시기 바랍니다.

 

Private Sub CommandButton1_Click()

    For i = 0 To 3

        For j = 0 To 3

            If ListBox1.ListIndex = i And ListBox2.ListIndex = j Then

                TextBox2.Value = TextBox1.Value * rates(i, j)

            End If

        Next j

    Next i

End Sub


엑셀 VBA 단위 변환 사용자 정의 폼 만들기


Posted by 녹두장군