이번 포스트를 통해 꼬마아이들의 공공의적 이 될런지도 모릅니다.
바로 초등 저학년 연산문제를 끝도 없이 만들수 있는 파일을 준비했기 때문입니다. 지난번 포스트에서 연산문제를 만드는 VBA 를 소개해 드렸었는데요.
https://diy-dev-design.tistory.com/38
해당 포스트로 정말 문제를 내려면 VBA를 작성하셔야만 자동으로 문제를 내는것이 가능하죠.
그런데 사실 제 블로그를 보시는 분들이 다 실제 개발을 하지는 않지 않겠습니까? 그래서 만들어진 엑셀 파일을 그냥 공유하려고 합니다. 물론 업로드하는 엑셀 파일에 사용된 코드에 대한 설명도 곁들여 보겠습니다.
지난번에 올린 것에 조금 업데이트 된 내용은 아래와 같습니다.
- 버튼을 이용하여 문제를 바로 업데이트 할 수 있도록 할 것
- 더한 결과의 합이 10 이상인 문제도 낼 수 있을 것 (원하는 경우에만)
- 10의 자리와 1의 자리 덧셈을 낼 수 있을 것
- 문제의 난이도를 사용자가 설정할 수 있을 것
요정도의 기능을 수행할 수 있는 버전으로 만들어 보았습니다.
복잡한 코드에 관심이 없으신 분은 바로 첨부파일 다운로드 및 공감 부탁드립니다. ㅋ
맘카페에 퍼날라 주셔도 감사하겠습니다. 비싼 학습지 신청하지 마시고 사랑하는 마음으로 직접 내주시길 바랍니다.
먼저 파일을 여시게 되면 아래와 같은 경고창이 나올 수 있습니다.
제가 만든 매크로가 동작해야 하므로 콘텐츠 사용을 클릭해 주세요. 위험하지 않으니 걱정하지 않으셔도 됩니다.
우측의 버튼은 엑셀이 업데이트 되면서 기본 기능에서는 빠진 기능을 이용해야 만들 수 있습니다. 기본적으로는 숨겨져 있기 때문에 설정 항목에서 단추를 만드는 기능을 꺼내야 합니다.
나중에 버튼(단추)을 만드는 예제는 따로 준비해서 올리겠습니다.
VBA 에디터에 각 버튼에 해당되는 함수를 만든 뒤에 각 버튼에 만들어놓은 함수를 연결하는 방식으로 작업이 되었습니다. 코드를 보면 아래와 같습니다. 버튼별로 함수를 만들었기 때문에 조금 길이가 있습니다.
코드가 조금 길기 때문에 접은 글로 넣어 봤습니다.
Sub makeMath_under10()
Dim aSht As Worksheet
Dim rngA As Range
Dim numA As Integer
Dim numB As Integer
Set aSht = ActiveSheet
Set rngA = [B3]
Randomize
For i = 0 To 8
numA = Int(Rnd * 9) + 1
Do
numB = Int(Rnd * 9) + 1
Loop While (numA + numB > 10)
rngA.Offset(i * 2, 0).Value = numA
rngA.Offset(i * 2, 1).Value = "+"
rngA.Offset(i * 2, 2).Value = numB
rngA.Offset(i * 2, 3).Value = "="
Next i
For i = 0 To 8
numA = Int(Rnd * 9) + 1
Do
numB = Int(Rnd * 9) + 1
Loop While (numA + numB > 10)
rngA.Offset(i * 2, 6).Value = numA
rngA.Offset(i * 2, 7).Value = "+"
rngA.Offset(i * 2, 8).Value = numB
rngA.Offset(i * 2, 9).Value = "="
Next i
End Sub
Sub makeMath_over10()
Dim aSht As Worksheet
Dim rngA As Range
Dim numA As Integer
Dim numB As Integer
Set aSht = ActiveSheet
Set rngA = [B3]
Randomize
aSht.Cells(1, 12).Value = Date
For i = 0 To 8
numA = Int(Rnd * 9) + 1
Do
numB = Int(Rnd * 9) + 1
Loop While (numA + numB < 10)
rngA.Offset(i * 2, 0).Value = numA
rngA.Offset(i * 2, 1).Value = "+"
rngA.Offset(i * 2, 2).Value = numB
rngA.Offset(i * 2, 3).Value = "="
Next i
For i = 0 To 8
numA = Int(Rnd * 9) + 1
Do
numB = Int(Rnd * 9) + 1
Loop While (numA + numB < 10)
rngA.Offset(i * 2, 6).Value = numA
rngA.Offset(i * 2, 7).Value = "+"
rngA.Offset(i * 2, 8).Value = numB
rngA.Offset(i * 2, 9).Value = "="
Next i
End Sub
Sub makeMath_under100_easy()
Dim aSht As Worksheet
Dim rngA As Range
Dim numA As Integer
Dim numB As Integer
Set aSht = ActiveSheet
Set rngA = [B3]
Randomize
aSht.Cells(1, 12).Value = Date
For i = 0 To 8
numA = Int(Rnd * 20) + 1
Do
numB = Int(Rnd * 10) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 0).Value = numA
rngA.Offset(i * 2, 1).Value = "+"
rngA.Offset(i * 2, 2).Value = numB
rngA.Offset(i * 2, 3).Value = "="
Next i
For i = 0 To 8
numA = Int(Rnd * 20) + 1
Do
numB = Int(Rnd * 10) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 6).Value = numA
rngA.Offset(i * 2, 7).Value = "+"
rngA.Offset(i * 2, 8).Value = numB
rngA.Offset(i * 2, 9).Value = "="
Next i
End Sub
Sub makeMath_under100_normal()
Dim aSht As Worksheet
Dim rngA As Range
Dim numA As Integer
Dim numB As Integer
Set aSht = ActiveSheet
Set rngA = [B3]
Randomize
aSht.Cells(1, 12).Value = Date
For i = 0 To 8
numA = Int(Rnd * 90) + 1
Do
numB = Int(Rnd * 10) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 0).Value = numA
rngA.Offset(i * 2, 1).Value = "+"
rngA.Offset(i * 2, 2).Value = numB
rngA.Offset(i * 2, 3).Value = "="
Next i
For i = 0 To 8
numA = Int(Rnd * 90) + 1
Do
numB = Int(Rnd * 10) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 6).Value = numA
rngA.Offset(i * 2, 7).Value = "+"
rngA.Offset(i * 2, 8).Value = numB
rngA.Offset(i * 2, 9).Value = "="
Next i
End Sub
Sub makeMath_under100_hard()
Dim aSht As Worksheet
Dim rngA As Range
Dim numA As Integer
Dim numB As Integer
Set aSht = ActiveSheet
Set rngA = [B3]
Randomize
aSht.Cells(1, 12).Value = Date
For i = 0 To 8
numA = Int(Rnd * 90) + 1
Do
numB = Int(Rnd * 90) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 0).Value = numA
rngA.Offset(i * 2, 1).Value = "+"
rngA.Offset(i * 2, 2).Value = numB
rngA.Offset(i * 2, 3).Value = "="
Next i
For i = 0 To 8
numA = Int(Rnd * 90) + 1
Do
numB = Int(Rnd * 90) + 1
Loop While (numA + numB > 100)
rngA.Offset(i * 2, 6).Value = numA
rngA.Offset(i * 2, 7).Value = "+"
rngA.Offset(i * 2, 8).Value = numB
rngA.Offset(i * 2, 9).Value = "="
Next i
End Sub
요렇게 코드가 모두 작성이 되셨다면
단추마다 매크로를 연결해 줍니다.
이런식으로 함수를 연결해 주면 됩니다.
어렵지 않죠?
뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. |
엑셀에서 버튼을 이용하여 매크로를 실행시키는 예제는 아래 포스트를 참고해 주세요.
https://diy-dev-design.tistory.com/59
2020/06/22 - [DEV/VBA] - [vba] 초등학교 연산 자동 문제집 - 곱셈 추가
'DEV > VBA' 카테고리의 다른 글
[VBA] 엑셀 VBA로 포토샵 연동이 가능할까? (0) | 2019.10.01 |
---|---|
[VBA] 엑셀에 그림 자동으로 넣기 (14) | 2019.09.20 |
[VBA] 초등학교 저학년 수학 연산 문제 자동으로 만들기 (0) | 2019.09.03 |
[vba] 엑셀 시트의 모든 색상의 셀 색상 제거하기 (0) | 2019.09.02 |
[VBA]RGB 색상 값이 들어있는 셀에 셀 색상 지정하기 (5) | 2019.08.30 |