엑셀 문자와 숫자가 함께 있는 셀을 정렬하는 방법(매크로)

  • by

엑셀로 문자와 숫자가 함께 있는 셀은 무조건 문자 취급을 하기 때문에, 숫자 부분의 정렬은 한 자리수만 비교하게 되어, 100과 9가 있으면 100이 먼저 정렬이 된다.

그러므로 문자와 숫자가 함께 있는 셀을 정렬하기 위해서는 문자와 숫자를 분리한 셀을 따로 만들어서 정렬하는 것이 좋지만 이것이 싫다면 매크로를 만드는 것이 좋습니다.

, 이러한 매크로는 작성이 용이하지 않기 때문에, 숫자와 문자를 분리해 정렬하는 방법을 우선 적용하고, 분리한 값을 추가하는 셀이 없는 경우, 매크로 작성을 생각해 보는 것이 좋다.

목차

    엑셀 문자와 숫자가 포함된 셀 정렬

    1. 문자와 숫자를 분리합니다.

    문자와 숫자를 분리하는 방법에는 여러 가지가 있습니다.

    일단 문자와 숫자의 패턴이 정해져 있으면 left나 mid 함수를 이용하거나, 리본 메뉴의 (데이터 -> 텍스트 분할)를 사용해 분리를 하면 됩니다만, 원래의 값은 유지해 텍스트 만 가져오면 함수를 이용하는 것이 좋다.

    예를 들어, 값 패턴이 A100, A99와 같이 한 문자 숫자의 조합인 경우 다음과 같은 방법으로 값을 얻을 수 있습니다.

    – 문자 추출
    =LEFT(B2,1)
    B2 셀 값의 왼쪽에서 하나의 값을 가져옵니다.

    – 수치 추출
    =MID(B2,2,10)
    B2 셀의 값 중 두 번째에서 10개의 값을 얻는다.


    원래 값의 길이보다 높게 설정해도 되는 값만을 취득하므로, 충분히 설정하면 된다.


    셀에서 값 분리 추출

    2. 분리된 값을 기준으로 정렬합니다.

    값이 분리되면 원래 값과 분리 된 값을 모두 선택하여 정렬 할 수 있습니다.

    정렬은 상단 리본 메뉴에서 (정렬 및 필터 -> 사용자 지정 정렬)을 클릭합니다.


    맞춤 정렬

    정렬 기준은 분리 된 문자와 숫자가있는 셀을 선택할 수 있습니다.


    추출한 값을 정렬 기준으로 선택

    정렬하려고 하면 정렬 경고가 표시됩니다(일반 숫자와 텍스트에 저장된 숫자를 모두 숫자로 정렬)를 선택합니다.


    순수한 텍스트 모두 숫자로 정렬

    매크로를 사용하는 방법

    아래 매크로는 문자와 숫자가 혼합된 셀을 정렬하는 매크로입니다.

    그러나 모든 상황에서 사용할 수 있는 것은 아닙니다.

    문자가 처음 나오고 숫자가 나오는 경우에만 성공적으로 정렬숫자가 먼저 나오거나 문자 1, 숫자 2, 문자 3이 있는 경우, 전반의 문자 1, 숫자 2 부분까지만 재정렬되고 문자 3 부분은 올바르게 정렬되지 않는다.

    또한 정렬이지만 정렬을 위해 값을 덮어쓰기 때문에 원래 복사본을 별도로 복사하여 적용합니다.

    원하는 결과가 나오는지 확인해 보는 것이 좋습니다.

    (매크로로 변경된 데이터는 (Ctrl+Z)로 되돌릴 수 없습니다.

    )

    조건에 맞으면 사용해 보자.

    1. vba 실행.

    Excel에서 (ALT+F10)을 눌러 VBA를 실행합니다.

    2. 새 모듈 만들기.

    vba 창이 열리면 위 메뉴에서 (삽입 -> 모듈)을 클릭하여 새 모듈을 만들고 아래 코드를 붙여 넣습니다.

    Sub SortMixedValues()
    Dim selectedRange As Range
    Set selectedRange = Application.Selection

    Dim numRows As Integer
    numRows = selectedRange.Rows.Count

    Dim values() As String
    ReDim values(numRows)

    Dim i As Integer
    For i = 1 To numRows
    values(i) = selectedRange.Cells(i, 1).value
    다음 i

    Dim temp As String
    Dim j As Integer
    Dim k As Integer
    For j = 1 To numRows – 1
    For k = j + 1 To numRows
    If Group(selectedRange.Cells(j, 1).value) = Group(selectedRange.Cells(k, 1).value) Then
    If NumericValue(selectedRange.Cells(j, 1).value) > NumericValue(selectedRange.Cells(k, 1).value) Then
    For x = 1 To selectedRange.Columns.Count
    temp = selectedRange.Cells(j, x).value
    selectedRange.Cells(j, x).value = selectedRange.Cells(k, x).value
    selectedRange.Cells(k, x).value = temp
    Next x
    End If
    ElseIf Group(selectedRange.Cells(j, 1).value) > Group(selectedRange.Cells(k, 1).value) Then
    For x = 1 To selectedRange.Columns.Count
    temp = selectedRange.Cells(j, x).value
    selectedRange.Cells(j, x).value = selectedRange.Cells(k, x).value
    selectedRange.Cells(k, x).value = temp
    Next x
    End If
    다음 k
    다음 j
    End Sub

    Function Group(value As String) As String
    Dim result As String
    result=””
    Dim i As Integer
    For i = 1 To Len(value)
    If IsNumeric(Mid(value, i, 1)) Then
    Exit For
    Else
    result = result & Mid(value, i, 1)
    End If
    다음 i
    그룹 = 결과
    End Function

    Function NumericValue(value As String) As Long
    If Len(value) = 0 Then
    NumericValue = -1
    출구 기능
    End If

    Dim result As Long
    결과 = 1
    Dim i As Integer
    For i = Len(value) To 1 Step -1
    If IsNumeric(Mid(value, i, 1)) Then
    result = result * 10 + CLng(Mid(value, i, 1))
    End If
    다음 i
    NumericValue = 결과
    End Function


    삽입 모듈 매크로 삽입

    3. 매크로 실행.

    정렬할 셀을 선택하고 매크로를 실행하기만 하면 됩니다.

    정렬 할 때 가장 앞에있는 셀을 기준으로 설정 한 다음 셀은 참조 셀과 마찬가지로 정렬됩니다.

    B2에서 E7 셀을 범위로 선택하고 매크로를 실행하면 B2 기준으로 정렬되고 나머지 C2에서 D7 셀은 따라서 정렬됩니다.


    매크로 실행 화면

    기타 내용

    매크로는 작성 후 테스트했지만, 간단하게 했기 때문에 버그가 있을지도 모른다.

    반드시 원본은 복사해 두고, 테스트 후에 잘 적용되면 사용하는 것이 좋다.