나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     조회:  1437
제목:   [RE]연속되지 않은 셀들의 최대값,최소값 구하기
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(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

 
[불량 게시물 신고]  
권혁진정말 감사합니다. 이해가 100%는 아니지만 완전 소화하면 도움이 될것같네요 ^^07-11 (09:20)
삭제 ■신고
        
  

작성일 : 2018-07-10(22:28)
최종수정일 : 2018-07-10(22:29)
 


 ◎ 관련글

  제 목   작성자   날짜
연속되지 않은 셀들의 최대값,최소값 구하기 권혁진 2018-07-10
[RE]연속되지 않은 셀들의 최대값,최소값 구하기 조삿갓 2018-07-10