|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(95,97,2000,xp,2003,2007): 2010
* 아래줄에 질문을 작성하세요 >>
안녕하세요 아래 글은 답변자분 때문에 잘 해결했습니다.
이제 이걸 응용해서 여러셀들을 임의로 선택하고(예를들어 A1, B3, C2, D5...), 버튼을 눌렀을때 메시지박스에 최대값과 최소값을 찍어주는 것을 해보려고 하는데 도통 감이 안잡히네요..
인풋박스로 셀 범위들을 컨트롤클릭하고 계산해도 가장 마지막에 선택된 셀이 최소값 최대값으로 찍히구요
제가 아는대로 하면 답이 안나올것같아서 질문 드립니다.ㅠㅠ
제가 짰던 코드 올려봅니다.
Dim returnSel As Range
Dim sumData As Long
Dim maxData As Integer
Dim minData As Integer
Dim avgData As Integer
Application.DisplayAlerts = True
Set returnSel = Application.InputBox("원하는 영역에 값적용", "범위선택", Type:=8)
For Each selData In returnSel
If IsNumeric(selData) Then
sumData = sumData + selData.Value
maxData = WorksheetFunction.Max(returnSel.Value)
minData = WorksheetFunction.Min(returnSel.Value)
avgData = WorksheetFunction.Average(returnSel.Value)
End If
Next
MsgBox "합계: " & sumData & vbCrLf & "최대값: " & maxData & vbCrLf & "최소값: " & minData & vbCrLf & "평균값: " & avgData
Application.DisplayAlerts = True
==============[권혁진님 글에 대한 답변입니다]==============
' <방법 1> 워크시트 함수를 빌려 쓰는 방법
Sub test()
Dim returnSel As Range
Dim sumData As Long
Dim maxData As Integer
Dim minData As Integer
Dim avgData As Integer ' 평균을 정수형으로 선언하면 소수 첫째자리에서 반올림됨
' 소수 이하까지 정확히 계산하려면 Double로 선언할 것
Application.DisplayAlerts = True
Set returnSel = Application.InputBox("원하는 영역에 값적용", "범위선택", Type:=8)
' For 반복구문은 필요 없음
' 워크시트 함수를 빌려 쓸 거면, 그 워크시트 함수 자체에 반복구문이 내장되어서 알아서 계산해 주므로,
' 따로 반복구문을 쓸 필요도 없고, 사용해서도 아니되옵니다.(시간만 낭비함)
sumData = WorksheetFunction.Sum(returnSel)
' 매개변수는 범위명만 지정해야 함. Value 속성을 덧붙이게 되면 불연속 영역일 경우
' 첫번째 연속부분영역만 대상으로 해 버림
maxData = WorksheetFunction.Max(returnSel)
minData = WorksheetFunction.Min(returnSel)
avgData = WorksheetFunction.Average(returnSel)
MsgBox "합계: " & sumData & vbCrLf & "최대값: " & maxData & vbCrLf & "최소값: " & minData & vbCrLf & "평균값: " & avgData
Application.DisplayAlerts = True
End Sub
' <방법 2> 알고리즘 이론에 충실하게, VB 코드로 독자적인 해결 방법(반복문 활용)
Sub test2()
Dim returnSel As Range
Dim selData As Range ' 반복제어 변수인 selData도 선언해서 쓰는 것이 원칙임
Dim sumData As Long
Dim maxData As Integer
Dim minData As Integer
Dim avgData As Double
Dim count As Integer ' 반복루프에 의한 평균 계산을 위한 카운트 변수
Application.DisplayAlerts = True
Set returnSel = Application.InputBox("원하는 영역에 값적용", "범위선택", Type:=8)
sumData = 0 ' 원칙적으로 변수를 초기화해 주어야 함
count = 0
maxData = -32768 ' 최대/최소를 구하기 위해서는 반드시 초기화 필요
' 선언된 Interger 형이 가질 수 있는 가장 작은 값을 최댓값으로 초기화
minData = 32767 ' Interger 형이 가질 수 있는 가장 큰 값 -> 초기 최솟값
For Each selData In returnSel
If IsNumeric(selData) Then
sumData = sumData + selData.Value
count = count + 1
If maxData < selData.Value Then maxData = selData.Value
If minData > selData.Value Then minData = selData.Value
End If
Next
avgData = sumData / count
MsgBox "합계: " & sumData & vbCrLf & "최대값: " & maxData & vbCrLf & "최소값: " & minData & vbCrLf & "평균값: " & avgData
Application.DisplayAlerts = True
End Sub
|
|