• 최초 작성일: 2001-09-11
  • 최종 수정일: 2026-09-30
  • 조회수: 15 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 특정위치 문자로 정렬하기

들어가기 전에

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

Exceller가 다니는 회사 창립기념일에, 외부 교육이 3일, 해서 지난 일주일을 화끈하게(?) 재꼈습니다. 이번 주도 교육 일정이 예정되어 있어 다시 한번 화끈하게(^^) 재낄 수 있을 것 같습니다.

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

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

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


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

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

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

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

특정위치 문자로 정렬하기

핵심 요약: 특정 위치 문자 기준 추출과 정렬

Mid 함수로 두 번째 글자가 입력한 값과 같은 데이터만 Result 위치로 추출하고 Sort 메서드로 정렬합니다.

  • 1단계: Do~Loop로 숫자가 입력될 때까지 InputBox를 반복 표시합니다.
  • 2단계: Mid(rngCell, 2, 1)이 입력값과 같은 데이터만 Offset으로 옮겨 적습니다.
  • 3단계: 추출된 데이터가 있으면 Sort 메서드로 정렬하고 건수를 알립니다.

Step 1: 이번 시간의 질문

셀에 데이터가 들어 있습니다.
문제는 여러 정보가 한꺼번에 하나의 셀에 들어있다는 데 있습니다.
이것을 가지고 정렬을 하고 싶은데 첫번째 글자가 아닌 두번째 글자를 가지고
정렬을 할 수 있는지요?
매번 필요할 때마다 불쑥 찾아와서 질문만 드려 죄송스럽습니다.
꼭 좀 부탁드립니다.

예제를 보내주셨더라면 좋았을 것을… 일단 예제를 하나 만듭니다.

예제 데이터 펼쳐 보기 (제품 코드 / 거래처)
코드거래처
A1001-1001거래처1
A1001-1002거래처2
A1001-1003거래처3
A1101-1004거래처4
A3101-1005거래처5
A2111-1001거래처6
A2011-1002거래처7
A2011-1003거래처8
A2011-1004거래처9
A2211-1005거래처10
A3228-2135거래처11
A3228-2136거래처12
A3228-2137거래처13
A3228-2138거래처14
A3328-2139거래처15
B2315-4376거래처16
B2015-4377거래처17
B2015-4378거래처18
B2015-4379거래처19
B2115-4380거래처20
C1101-1001거래처21
C1201-1002거래처22
C1201-1003거래처23
C1301-1004거래처24
C1301-1005거래처25

Start 이름은 B23 셀, Result 이름은 E31 셀에 정의되어 있습니다.

Step 2: SortnthLetter 프로시저

코드를 보도록 하지요.

Sub SortnthLetter()
    Dim rngCell As Range
    Dim rngTarget As Range, rngResult As Range
    Dim strCriteria As String
    Dim i As Integer
    Dim blnOK As Boolean
    Set rngTarget = Range([Start], [Start].End(xlDown))
    Set rngResult = [Result]
    '''등장 인물(변수)을 선언해 주고 두 개의 이름을 정의해 두었습니다.
    '''이름 상자에서 Start와 Result가 어느 셀인지 확인해 보세요.

    Do While Not blnOK
        strCriteria = InputBox("제품 유형을 입력하세요!(1~3)", "숫자 입력//By Exceller")
        If IsNumeric(strCriteria) Then
            blnOK = True
        ElseIf strCriteria = "" Then
            MsgBox "아무 것도 입력하지 않으셨으므로 종료합니다", , "작업 종료//By Exceller"
            Exit Sub
        Else
            MsgBox "숫자값을 입력하세요!!!", , "입력 오류//By Exceller"
        End If
        '''Do~Loop 순환문이 사용되었습니다. 만약 사용자가 숫자가 아닌 다른 데이터 타입을
        '''입력하였을 경우, 계속 InputBox를 화면 상에 나타나도록 하기 위한 것입니다.

    Loop

    With rngResult
        .CurrentRegion.ClearContents
        For Each rngCell In rngTarget
            If Mid(rngCell, 2, 1) = strCriteria Then
                .Offset(i, 0) = rngCell
                .Offset(i, 1) = rngCell.Offset(0, 1)
                i = i + 1
            End If
        Next rngCell
        '''사용자가 입력한 조건에 맞는 데이터를 화면 상에 뿌려주는 과정입니다.
        '''별로 어려운 부분이 없으므로 해설은 생략…

    End With

    If Len(rngResult) > 0 Then
        rngResult.CurrentRegion.Sort Key1:=rngResult, Order1:=xlAscending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        MsgBox i & "개의 자료를 추출하였습니다", , "작업 완료//By Exceller"
        '''유효한 데이터가 있을 경우, Sorting을 진행하고 작업이 완료되었음을 알려줍니다.

    End If
End Sub

Step 3: 마무리

원래 만들려고 하였던 것은 데이터 내의 특정한 위치에 있는 문자열을 기준으로 정렬이 되도록 하려고 하였으나 방향을 사정이 여의치 않아 방향을 바꾸었습니다. Exceller는 이번 주 내내 외부 교육 중인데 과중한 숙제(?)로 인하야… T.T

하지만 위의 코드를 약간만 수정하면 충분히 만드실 수 있을 것이므로 직접 만들어 보시기 바랍니다.

오늘은 여기까지…

정리 — 특정 위치 문자 정렬 핵심

구분 사용한 코드 역할
범위 지정 Range([Start], [Start].End(xlDown)) 이름으로 데이터 범위 지정
입력 검사 IsNumeric / Do~Loop 숫자가 아니면 다시 입력
문자 검사 Mid(rngCell, 2, 1) = strCriteria 두 번째 글자 비교
결과 기록 .Offset(i, 0) = rngCell 조건에 맞는 데이터 추출
정렬 rngResult.CurrentRegion.Sort 추출 결과 정렬

자주 묻는 질문 (FAQ)

Q1. 첫 글자가 아닌 두 번째 글자를 기준으로 정렬할 수 있나요?

Mid 함수로 두 번째 글자를 검사해 조건에 맞는 데이터만 추출한 뒤 정렬하면 됩니다.

Q2. InputBox에 숫자가 아닌 값을 입력하면 어떻게 되나요?

Do~Loop 순환문이 숫자가 입력될 때까지 InputBox를 계속 표시합니다.

Q3. 이름 정의는 왜 사용하나요?

Start와 Result 이름을 정의해 두면 코드에서 셀 주소를 직접 쓰지 않고도 시작 위치와 결과 위치를 지정할 수 있습니다.

마치며

Mid 함수로 조건에 맞는 데이터를 추출한 뒤 Sort 메서드를 쓰면 특정 위치 문자 기준 정렬을 구현할 수 있습니다.