Access 대소문자에 관계없이 레코드를 오름차순 또는 내림차순으로 정렬합니다. 그러나 VBA(Visual Basic for Applications) 코드의 몇 줄을 작성하면 ASCII 문자 값을 기준으로 텍스트를 정렬할 수 있습니다. ASCII 값을 기준으로 정렬하면 대문자와 소문자를 구분하고 대소문자를 구분하는 순서가 됩니다.
다음 표에서는 Access의 오름차순 정렬 순서가 대소문자를 구분하는 정렬 순서와 어떻게 다른지 보여 줍니다.
사전 정렬 순서 |
오름차순 순서 |
대소문자 구분 순서 |
---|---|---|
c |
a |
A |
D |
A |
B |
a |
B |
C |
d |
b |
D |
B |
c |
a |
C |
C |
b |
A |
D |
c |
b |
d |
d |
오름차순 열의 결과가 처음에는 다소 예측할 수 없는 것으로 보일 수 있지만, 그렇지 않습니다. 오름차순 열에서 "a"는 "A" 앞에 나타나고 "B"는 "b" 앞에 나타납니다. 이 문제는 텍스트 값으로 평가될 때 소문자 또는 대문자 구분 없이 "A" = "a" 및 "B" = "b"이기 때문입니다. Access는 값의 원래 순서를 고려합니다. 사전 정렬 순서 열에서 "a"는 "A" 앞에 있고 "B"는 "b" 앞에 있습니다.
대소문자를 구분하는 정렬 작업을 수행하면 텍스트 값이 ASCII 값으로 바뀝니다. 예를 들어 A = 65, a = 97, B = 66, b = 98 등이 있습니다.
VBA 코드 작성
-
VBA 모듈을 생성하고 선언 섹션에 다음 줄을 입력합니다(아직 없는 경우).
Option Explicit
-
Visual Basic Editor의 모듈에 다음 절차를 입력합니다.
Function StrToHex (S As Variant) As Variant ' ' Converts a string to a series of hexadecimal digits. ' For example, StrToHex(Chr(9) & "A~") returns 09417E. ' Dim Temp As String, I As Integer If VarType(S) <> 8 Then StrToHex = S Else Temp = "" For I = 1 To Len(S) Temp = Temp & Format(Hex(Asc(Mid(S, I, 1))), "00") Next I StrToHex = Temp End If End Function
이전 사용자 정의 함수인 StrToHex를 쿼리에서 호출할 수 있습니다. 정렬 필드의 이름을 이 함수에 전달하면 필드 값은 대소문자를 구분하는 순서로 정렬됩니다.
-
이제 이 함수를 호출할 쿼리를 만듭니다.
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
-
테이블 추가(액세스에 테이블 표시)를 선택합니다.
-
원하는 필드를 그리드로 끕니다.
-
첫 번째 빈 열의 필드 행에 Expr1: StrToHex([SortField])를 입력합니다.
StrToHex는 이전에 생성한 사용자 정의 함수입니다. SortField는 대/소문자를 구분하는 값을 포함하는 필드의 이름입니다.
-
정렬 셀에서 오름차순 또는 내림차순을 클릭합니다.
오름차순을 선택할 경우 소문자로 시작하는 값 앞에 대문자로 시작하는 값이 나타납니다. 내림차순 정렬을 적용하면 그 반대입니다.
-
데이터시트 보기로 전환합니다.
Access는 대/소문자를 구분하는 순서로 정렬된 레코드를 표시합니다.