Access は、大文字小文字を問わず、レコードを昇順または降順に並べ替えします。 ただし、Visual Basic for Applications (VBA) コードを数行書くことで、テキストを 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 エディターのモジュールに以下の手順を入力します。
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 は、クエリから呼び出すことができます。 この関数に並べ替えフィールドの名前をパスすると、フィールドの値を大文字と小文字を区別して並べ替えます。
-
次に、この関数を呼び出すクエリを作成します。
[作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。
-
[ テーブルの追加] (Access でテーブルを表示 ) を選択します。
-
グリッドに必要なフィールドをドラッグします。
-
最初の空白の列で、[フィールド] 行に Expr1: StrToHex([SortField]) と入力します。
StrToHex は、先ほど作成したユーザー定義済みの関数です。 SortField は、大文字と小文字を区別する値を含むフィールドの名前です。
-
[並べ替え] セルで、[昇順] または [降順] をクリックします。
昇順を選択した場合、大文字から始まる値は、小文字から始まる値の前に表示されます。 降順ソートを適用すると、その逆になります。
-
データシート ビューに切り替えます。
Access は、大文字と小文字を区別して並べ替えたレコードを表示します。