Excel에 다음과 같이 정렬하고 싶은 "숫자" 열이 있습니다.
1.1
1.2
1.2.1
1.2.6
1.2.9
1.2.10
1.2.11
1.3
그러나 셀 유형이 숫자인지 텍스트인지에 관계없이 Excel에서는 다음과 같이 정렬합니다.
1.1
1.2
1.2.1
1.2.10
1.2.11
1.2.6
1.2.9
1.3
이것은 "자연 정렬"이라고도 불릴 수 있습니다. PHP와 같은 프로그래밍 언어에서는 다음과 같은 방식으로 수행됩니다.natsort
기능. 하지만 Excel에서는 이런 방식으로 정렬하는 방법을 찾을 수 없는 것 같습니다.
몇 가지 맥락을 추가로 제공하는 데 도움이 되도록 다음을 수행합니다. 이 숫자는 섹션과 하위 섹션을 나타냅니다(소수점이 아닌 목록 항목).
1. Section
1. Sub-section
2. Sub-section
1. Item
6. Item
9. Item
10. Item
11. Item
3. Sub-section
답변1
값을 분할하는 테이블을 만들 수 있습니다.
각 열에 대해 제목(1행)과 수식(2행 이상)을 사용합니다.
A1: text A2: (your section numbers)
B1: dot1 B2: =FIND(".",A2,1)
C1: dot2 C2: =IFERROR(FIND(".",A2,B2+1),LEN(A2)+1)
D1: num1 D2: =VALUE(MID(A2,1,B2-1))
E1: num2 E2: =IFERROR(VALUE(MID(A2,B2+1,C2-B2-1)),0)
F1: num3 F2: =IFERROR(VALUE(MID(A2,C2+1,LEN(A2)-C2)),0)
이는 다음과 같이 나타납니다.
A B C D E F
1 text dot1 dot2 num1 num2 num3
2 1.1 2 4 1 1 0
3 1.1.3 2 4 1 1 3
4 2.10.7 2 5 2 10 7
그런 다음 열 num1, num2 및 num3을 기준으로 사용자 정의 정렬을 수행할 수 있습니다.
답변2
사용자 정의 함수를 삽입하여 좋은 결과를 얻었습니다. UDF는 섹션 번호(백만 단위), 하위 섹션 번호(천 단위), 항목 번호(단위), 하위 항목(있는 경우)(1000분의 1), 하위 하위 항목(백만 분의 1) 등의 합계를 나타내는 값을 반환합니다. 예를 들어,
1.2.3
1,002,003
동안 돌아올 것이다
1.51.5.5
반환 1,051,005.005
- 이 숫자는 정렬에 사용될 수 있습니다.
워크시트 내 문자열 함수를 사용하거나 여러 열을 정렬하는 것보다 이것이 덜 번거롭다는 것을 알았습니다.
UDF는 다음과 같습니다.
Function LList(stInVal As String) As Double
Dim iPower As Integer
Dim vSplit As Variant
Dim i As Long
iPower = 6
vSplit = Split(stInVal, ".", -1)
For i = 0 To UBound(vSplit)
LList = LList + CInt(vSplit(i)) * 10 ^ (iPower - 3 * i)
Next i
End Function
답변3
Doug는 이에 대해 자세히 설명합니다. 나는 그것이 의미가 있기를 바랍니다!
답변4
방금 같은 문제에 직면했습니다 ...
빠른 해결책을 원하고 "." 사용에 대해 고민하지 않는다면 간단히 "."을 모두 찾아서 "_"로 바꾸십시오. 이렇게 하면 Excel에서 계층 구조 방식으로 정렬할 수 있습니다.
정렬이 거의 작동할 것입니다. 이제 데이터에 "밑줄"을 추가하기만 하면 됩니다. 따라서 문자 "1"이 하나인 데이터는 "1_"(데이터의 문자 수)이 됩니다.