• 최초 작성일: 2005-11-18
  • 최종 수정일: 2026-09-30
  • 조회수: 15 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 다빈도값 알아내기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

방문자께서 다음과 같은 메일을 보내 주셨습니다.

안녕하세요.Exceller님! 여전히 건강하시죠? 이렇게 자꾸 귀찮게 해 드려서 죄송합니다만, 첨부한 파일을 검토하시고 자료로서 가치가 있다고 판단 되시면, 다음에 시간되실 때 강좌 파일로 다루어 주셨으면 합니다.

전혀… 절대로 귀찮지 않으니까 좋은 아이디어나 다른 분들과 함께 나누고 싶은 것이 있는 분은 언제든 보내주시기 바랍니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

다빈도값 알아내기

핵심 요약: 가장 자주 나온 값 찾기

=MaxFrequency(범위)로 입력하면 범위 내에서 발생 빈도가 가장 높은 값을 알려 주는 사용자 정의 함수입니다. 문자든 숫자든 사용할 수 있습니다.

  • 1단계: 범위의 모든 값을 쉼표로 이어 붙인 문자열을 만듭니다.
  • 2단계: Split으로 값을 나누고 각 값을 지웠을 때 남는 문자열 길이를 비교합니다.
  • 3단계: 가장 많이 지워진 값을 결과로 돌려줍니다.

Step 1: 무엇을 하려는 걸까요?

오늘 내용을 살펴보도록 하지요. 버튼을 누르면 예제가 실행됩니다.

무엇을 하고자 하는지 짐작하시겠지요?

=MaxFrequency(범위)라고 입력하면 지정한 범위 내에서 가장 발생 빈도가 높은 값이 무엇인지를 찾아 주는 사용자 정의 함수입니다. 함수 마법사의 '사용자 정의' 범주에서 MaxFrequency를 찾아 실행하고, 인수(Count_Range)에 데이터가 입력된 영역(예: B10:E14)을 지정하면 그 영역에서 가장 자주 나온 값이 결과로 나타납니다.

Step 2: 코드 살펴보기

코드는 다음과 같습니다.

Function MaxFrequency(Count_Range As Range) As String

    Dim rngCell As Range
    Dim arrVar As Variant
    Dim i As Long
    Dim intLen As Long
    Dim strVal As String
    Dim strTarget As String

    For Each rngCell In Count_Range
        strVal = strVal & "," & rngCell
    Next rngCell

    arrVar = Split(strVal, ",")
    intLen = Len(Replace(strVal, arrVar(0), ""))
    strTarget = arrVar(0)

    For i = 1 To UBound(arrVar)
        If Len(Replace(strVal, arrVar(i), "")) < intLen Then
            intLen = Len(Replace(strVal, arrVar(i), ""))
            strTarget = arrVar(i)
        End If
    Next

    MaxFrequency = strTarget

End Function

코드에 대한 해설은 앞선 강좌와 마찬가지로 생략할까 합니다. 보시다 잘 이해가 안되는 부분이 있으시면 게시판에 올려주시기 바랍니다.

이 코드의 원리와 한계: 이 함수는 모든 값을 쉼표로 이어 붙인 문자열에서 특정 값을 지웠을 때 줄어든 길이가 가장 큰 값을, 즉 가장 많이 나온 값을 찾는 방식입니다. 한 값이 다른 값의 일부(예: 'AB'와 'ABC')이거나 쉼표가 들어 있는 경우에는 결과가 부정확할 수 있습니다. 동적 배열 함수를 지원하는 Microsoft 365라면 아래와 같이 수식만으로도 가장 많이 나온 값을 구할 수 있습니다.

=TAKE(SORTBY(UNIQUE(TOCOL(B10:E14)), COUNTIF(B10:E14, UNIQUE(TOCOL(B10:E14))), -1), 1)

다음에 또…

정리 — MaxFrequency 함수 코드 핵심

구분 사용한 코드 역할
값 연결 strVal = strVal & "," & rngCell 범위의 값을 쉼표로 연결
값 분리 Split(strVal, ",") 값을 배열로 나눔
길이 비교 Len(Replace(strVal, arrVar(i), "")) 값을 지운 뒤 남는 길이
최빈값 갱신 If ... < intLen Then 남는 길이가 짧을수록 자주 나온 값
결과 반환 MaxFrequency = strTarget 가장 자주 나온 값

자주 묻는 질문 (FAQ)

Q1. 엑셀 내장 함수로 최빈값을 구할 수는 없나요?

숫자 데이터라면 MODE 함수(또는 MODE.SNGL)로 구할 수 있습니다. 문자 데이터는 MODE 함수로 구할 수 없으므로 INDEX와 MATCH를 조합하거나 Microsoft 365의 동적 배열 함수를 사용하거나 이번 강좌처럼 사용자 정의 함수를 만들어야 합니다.

Q2. 빈도가 같은 값이 여러 개이면 어떤 값이 반환되나요?

이 코드는 처음 발견한 값을 유지하다가 더 자주 나온 값이 있을 때만 바꿉니다. 따라서 빈도가 같으면 범위에서 먼저 나오는 값이 반환됩니다.

Q3. 사용자 정의 함수는 함수 마법사에서 어떻게 찾나요?

함수 마법사에서 범주를 '사용자 정의'로 선택하면 VBA로 만든 Function 프로시저 목록이 표시됩니다.

마치며

문자열을 이어 붙이고 Replace로 지워 보는 아이디어만으로도 최빈값을 구하는 함수를 만들 수 있었습니다. 사용자 정의 함수로 만들어 두면 워크시트에서 바로 활용할 수 있습니다.