지난번에 작성한 초등수학 문제 생성기([엑셀 매크로 VBA] 초등학교 수학문제 생성기- 덧셈, 뺄셈, 곱하기, 나누기)의 주석을 달아 보았습니다. 참조하세요.
'변수선언 방법설정
Option Explicit
'문제생성 모듈
Sub makeQuestion()
'화면변경이 안되도록 설정
Application.ScreenUpdating = False
'변수 선언
Dim i As Long
Dim count As Long
Dim order As Long
Dim nagativeNumber As Variant
Dim floatingPoint As Variant
'문제생성 sheet 선택
Sheets("문제생성").Select
'C2셀에 있는 값(문항수)을 변수에 저장
count = Range("C2").Value
'F2셀에 있는 값(자릿수)을 이용해서 자릿수 생성
order = 10 ^ Range("F2").Value
'Check Box 3(음수 사용) 선택여부를 변수에 저장
nagativeNumber = ActiveSheet.CheckBoxes("Check Box 3").Value
'Check Box 4(소수점 사용) 선택여부를 변수에 저장
floatingPoint = ActiveSheet.CheckBoxes("Check Box 4").Value
'랜덤값을 생성하도록 초기화
Randomize
'--------------------------------------------------------
'덧셈문제 sheet 선택
Sheets("덧셈문제").Select
'B1셀에 값이 있는지 확인해서 값이 있는 경우 셀의 값을 삭제함
If IsEmpty(Range("B1").Value) = False Then
Range("B1").CurrentRegion.Clear
End If
'for문을 돌려서 덧셈 문제를 생성함
For i = 1 To count
'B셀에 문제번호
Range("B" & i) = "문제" & i
'랜덤 숫자 생성
Range("C" & i).Value = Int(order * Rnd)
Range("D" & i).Value = "+"
'랜덤 숫자 생성
Range("E" & i).Value = Int(order * Rnd)
Range("F" & i).Value = "="
Next i
'가운데 맞춤
Range("B1").CurrentRegion.HorizontalAlignment = xlCenter
Range("A1").Select
'--------------------------------------------------------
'뺄셈문제 sheet 선택
Sheets("뺄셈문제").Select
'B1셀에 값이 있는지 확인해서 값이 있는 경우 셀의 값을 삭제함
If IsEmpty(Range("B1").Value) = False Then
Range("B1").CurrentRegion.Clear
End If
'for문을 돌려서 뺄셈 문제를 생성함
For i = 1 To count
'B셀에 문제번호
Range("B" & i) = "문제" & i
Range("D" & i).Value = "-"
Range("F" & i).Value = "="
'결과가 양수만 나오는 경우
If nagativeNumber = xlOff Then
'C셀의 값이 E셀의 값보다 작은경우 랜덤숫자 다시 생성
Do
Range("C" & i).Value = Int(order * Rnd)
Range("E" & i).Value = Int(order * Rnd)
Loop While Range("C" & i).Value < Range("E" & i).Value
'결과에 음수도 나오는 경우
Else
Range("C" & i).Value = Int(order * Rnd)
Range("E" & i).Value = Int(order * Rnd)
End If
Next i
'가운데 맞춤
Range("B1").CurrentRegion.HorizontalAlignment = xlCenter
Range("A1").Select
'--------------------------------------------------------
'곱셈문제 sheet 선택
Sheets("곱셈문제").Select
'B1셀에 값이 있는지 확인해서 값이 있는 경우 셀의 값을 삭제함
If IsEmpty(Range("B1").Value) = False Then
Range("B1").CurrentRegion.Clear
End If
'for문을 돌려서 곱셈 문제를 생성함
For i = 1 To count
'B셀에 문제번호
Range("B" & i) = "문제" & i
'랜덤 숫자 생성
Range("C" & i).Value = Int(order * Rnd)
Range("D" & i).Value = "×"
'랜덤 숫자 생성
Range("E" & i).Value = Int(order * Rnd)
Range("F" & i).Value = "="
Next i
'가운데 맞춤
Range("B1").CurrentRegion.HorizontalAlignment = xlCenter
Range("A1").Select
'--------------------------------------------------------
'나눗셈문제 sheet 선택
Sheets("나눗셈문제").Select
'B1셀에 값이 있는지 확인해서 값이 있는 경우 셀의 값을 삭제함
If IsEmpty(Range("B1").Value) = False Then
Range("B1").CurrentRegion.Clear
End If
'for문을 돌려서 곱셈 문제를 생성함
For i = 1 To count
'B셀에 문제번호
Range("B" & i) = "문제" & i
Range("D" & i).Value = "÷"
Range("F" & i).Value = "="
'결과에 소수점이 없는 경우
If floatingPoint = xlOff Then
'C셀의 값을 E셀의 값으로 나누었을때 나머지가 0이 아닌경우 랜덤숫자 다시 생성
Do
'C셀의 값과 E셀의 값이 같거나 0이 나오는 경우 랜덤숫자 다시 생성
Do
Range("C" & i).Value = Int(order * Rnd)
Range("E" & i).Value = Int(order * Rnd)
Loop While Range("C" & i).Value = Range("E" & i).Value _
Or Range("C" & i).Value = 0 _
Or Range("E" & i).Value = 0
Loop While (Range("C" & i).Value Mod Range("E" & i).Value) <> 0
Else
'C셀의 값과 E셀의 값이 같거나 0이 나오는 경우 랜덤숫자 다시 생성
Do
Range("C" & i).Value = Int(order * Rnd)
Range("E" & i).Value = Int(order * Rnd)
Loop While Range("C" & i).Value = Range("E" & i).Value _
Or Range("C" & i).Value = 0 _
Or Range("E" & i).Value = 0
End If
Next i
'가운데 맞춤
Range("B1").CurrentRegion.HorizontalAlignment = xlCenter
Range("A1").Select
'--------------------------------------------------------
'문제생서 sheet로 화면전환
Sheets("문제생성").Select
'화면변경이 안되도록 설정한 것을 복원함
Application.ScreenUpdating = True
End Sub
'정답생성 모듈
Sub makeAnswer()
'변수 선언
Dim i As Long
Dim rowCount As Long
'덧셈문제 sheet 선택
Sheets("덧셈문제").Select
'B1셀에 값이 있는 경우
If IsEmpty(Range("B1").Value) = False Then
'B1셀을 기준으로 값이 있는 셀들의 수(row)를 확인함
rowCount = Range("B1").CurrentRegion.Rows.count
'가운데 맞춤
Range("G1").HorizontalAlignment = xlCenter
'덧셈 수식적용
Range("G1").Formula = "=C1+E1"
'전체 문제에 수식을 적용함 (마우스로 드레그 하는 효과)
Range("G1", "G" & rowCount).FillDown
'B1셀에 값이 없는 경우
Else
'문제생성 sheet 선택(화면전환)
Sheets("문제생성").Select
'makeAnswer모듈 종료
Exit Sub
End If
Range("A1").Select
'--------------------------------------------------------
'뺄셈문제 sheet 선택
Sheets("뺄셈문제").Select
'B1셀을 기준으로 값이 있는 셀들의 수(row)를 확인함
rowCount = Range("B1").CurrentRegion.Rows.count
'가운데 맞춤
Range("G1").HorizontalAlignment = xlCenter
'뺄셈 수식적용
Range("G1").Formula = "=C1-E1"
'전체 문제에 수식을 적용함 (마우스로 드레그 하는 효과)
Range("G1", "G" & rowCount).FillDown
Range("A1").Select
'--------------------------------------------------------
'곱셈문제 sheet 선택
Sheets("곱셈문제").Select
'B1셀을 기준으로 값이 있는 셀들의 수(row)를 확인함
rowCount = Range("B1").CurrentRegion.Rows.count
'가운데 맞춤
Range("G1").HorizontalAlignment = xlCenter
'곱셈 수식적용
Range("G1").Formula = "=C1*E1"
'전체 문제에 수식을 적용함 (마우스로 드레그 하는 효과)
Range("G1", "G" & rowCount).FillDown
Range("A1").Select
'--------------------------------------------------------
'나눗셈문제 sheet 선택
Sheets("나눗셈문제").Select
'B1셀을 기준으로 값이 있는 셀들의 수(row)를 확인함
rowCount = Range("B1").CurrentRegion.Rows.count
'가운데 맞춤
Range("G1").HorizontalAlignment = xlCenter
'나눗 수식적용
Range("G1").Formula = "=C1/E1"
'전체 문제에 수식을 적용함 (마우스로 드레그 하는 효과)
Range("G1", "G" & rowCount).FillDown
Range("A1").Select
'--------------------------------------------------------
'덧셈문제 sheet로 화면전환
Sheets("덧셈문제").Select
End Sub
'엑셀 > VBA' 카테고리의 다른 글
[엑셀 매크로 VBA] 초등학교 수학문제 생성기- 덧셈, 뺄셈, 곱하기, 나누기 (12) | 2017.04.23 |
---|---|
[엑셀 매크로 VBA] 개발 도구 메뉴 추가하기 (0) | 2017.03.31 |
[엑셀 매크로 VBA] VBA란? (0) | 2017.03.12 |