본문 바로가기

엑셀 & VBA

1-6. 숫자야구 게임 완성하기 (엑셀/VBA)

 이제 숫자를 찍을때 마다 Random 함수가 새로운 난수로 바뀌는 문제를 해결해보겠습니다. 이를 위해 VBA를 활용하겠습니다. 시작할때 버튼을 누르면 난수를 A1에 저장해주고 B를 초기화 시켜줍니다. 버튼을 누르지 않으면 A1에 저장된 값은 초기화 되지 않으므로 게임을 진행하는 도중에 값이 바뀌지 않습니다. 그리고 숫자가 112와 같이 중복되는 숫자가 나오면 새로운 난수로 바꾸어 주는 기능도 추가하겠습니다. 엑셀의 기본 함수만으로는 할 수 없는 반복 작업과 같은 것을 할 수 있게 해주는 것이 VBA 입니다.

 

 엑셀 위에 있는 보기에서 매크로 기록을 눌러줍니다.

매크로 기록하기
확인을 눌러서 매크로를 기록하세요
매크로 기록 중지

 확인을 누르고 바로 기록중지를 해서 아무 기능을 하지 않는 매크로를 하나 만듭니다. 이 매크로 편집을 위해 매크로 보기를 눌러서 매크로1를 편집하겠습니다.

매크로 편집(E)

 VBA에서 ' 뒤에 입력하는 것은 주석으로 코드로서의 기능을 하지 않습니다. 코드를 작성하는 사람이 알아보기 쉽게 설명을 달아주기 위해 주석을 달아줍니다.

 

 VBA창에는 아래 코드를 넣으면 됩니다.

 

Sub 매크로1()
'
' 매크로1 매크로
'

Range("B5:B14").Select
Selection.ClearContents
Range("B5").Select

Do '중복되는 숫자를 없애기 위함

a = Application.WorksheetFunction.RandBetween(123, 987)
Cells(1, 1) = a

Loop Until Cells(2, 6) = 0

'
End Sub

 저장을 하게 되면 오류가 납니다. 아니요(N)을 누르고 매크로를 사용하는 형태로 저장을 해줍니다.

 이제 버튼을 만들어서 VBA에서 만든 코드를 실행해보겠습니다. 삽입 - 도형에서 아무 도형이나 만들어주겠습니다. 이 도형을 우클릭해서 매크로 지정을 해줍니다. 

 아까 만들었던 매크로1을 선택해주시면 됩니다. 이제 매크로를 누를때마다 난수가 생성이되고 게임을 진행할 수 있게 이전에 추측했던 값들은 다 초기화 됩니다.

 

 마무리로 답을 알아볼 수 없게 검정색으로 칠해주면 숫자야구 게임이 완성됩니다.

#######################################################################################

 코드에 대한 설명을 간단하게 해보겠습니다.

숫자야구 코드

 VBA의 함수는 Sub 함수명()으로 시작해서 End Sub으로 끝납니다. Range("B5:B14").Select 는 게임을 진행하면서 이전에 기록 된 것을 지우기 위해 선택하는 코드입니다. Selection.ClearContents는 선택한 부분을 지우는 코드입니다.

Range("B5").Select 는 지우고 난 후에 다음 추측을 쉽게 할 수 있게 추측하는 첫번째 칸을 미리 선택해두는 코드입니다.

 

 반복문은 Do로 시작해서 Loop until이나 Loop While로 끝납니다. Loop Until의 경우 조건을 만족하면 반복을 종료하는것이고, Loop While은 조건을 만족하고 있다면(만족하지 않을때 까지) 반복하는것입니다.

 

 a = Application.WorksheetFunction.RandBetween(123, 987)은 a라는 변수에 난수를 저장하라는 RandBetween(123,987)을 저장하는 코드인데, 그냥 RandBetween이라고 하면 이건 vba에는 없는 함수라 오류가 나고, 엑셀 안에 있는 함수라는 의미에서 Application.WorksheetFunction.를 앞에 붙여줍니다.

 

 Cells(1,1) = a는 (1,1)에 해당하는 셀에 a를 입력하라는 의미로 (행,열)로 좌표를 표시할 수 있습니다. A1셀을 의미합니다. A1을 사용하지 않고 굳이 Cells(1,1)을 사용하는 이유는 i = 1을 정의하고 Cells(i,1)을 사용할 수 있어서 A1과는 다르게 변수에 해당하는 셀을 선택할 수 있기 때문에 앞으로 많이 쓰게 될 형식이라 굳이 저렇게 적었습니다.

 

 이렇게 숫자야구 게임을 엑셀로 만들어 보았습니다. 저는 코딩 전공자가 아니라서 제 방법보다 더 좋은 방법이 있을 수도 있습니다. 더 좋은 방법을 알고 계시는 분은 이 글에서 문법정도만 간단하게 보고 넘어가시면 될거 같습니다.

 

숫자야구.xltm
0.03MB