1/11/2018

Access。テキスト型の数値を並べると昇順にならないのでどうしたらいいの?【Val】

Access。テキスト型の数値を並べると昇順にならないのでどうしたらいいの?

<Val関数>

通し番号や連番のフィールドのデータ型は、
短いテキスト型か数値型のどちらにしたらいいのか?
というご質問があります。

そうそう、短いテキスト型と書いていますが、
Access2013から従来のテキスト型は短いテキスト型と呼び名が変わりました。
ちなみに、従来のメモ型は長いテキスト型と呼び名が変わっております。

さて、基本としては、短いテキスト型と数値型の違いですが、
計算することがないなら、短いテキスト型で計算するには数値型というように、
テキストには書かれていることが多いようですが、
計算しないからといって、短いテキスト型にすると、
ちょっとしたことでトラブルになってしまいます。

では、確認しますので、次のテーブルを作って見ます。


店舗IDのデータ型は短いテキストにしております。

そして、入力したデータは、1から25まで入力したとします。

店舗IDを昇順にしたクエリを作ってみましょう。

店舗IDフィールドの並び替えを「昇順」にして、
データシートビューで確認してみましょう。

なんと店舗IDを昇順ではなくて、
1の次が10というように並んでしまっています。

実は短いテキスト型で並び替えを行うと、このようになってしまうのです。

なので、店舗IDを例えば、
”01”というように0(ゼロ)を使って桁数を揃えて上げればよかったのですが、
桁数を考慮しなかったのでこのようになってしまったわけです。

では、並び替えを行うことは出来ないのでしょうか?

そこで、このような短いテキスト型で並び替えを行いたい場合は、
Val関数を使うことで並び替えを行なえます。

デザインビューにして、次のように修正してみましょう。

店舗IDというフィールド名で使えませんので、
idというフィールド名にしていますが、

id: Val([店舗ID])

とフィールドを設定してみましょう。

では、データシートビューにして確認してみましょう。

なんと、今回は、きちんと連番でidフィールドが並んでいますね。

このようにVal関数は、
短いテキスト型に桁数が合致していない数値が入力されている場合、
”見た目上”数値型に変換して、
数値型のように並び替えを行うことが出来るのです。

では、元から数値型にしておけばいいように思えますが、

例えば、フィールドサイズが3桁ですむものを、数値型の整数型にすると、
ファイルサイズが大きくなってしまいますので、
微妙な差かもしれませんが、短いテキスト型で、
表示する桁数を合わせて入力するようにしたほうがいいかと思います。

またVal関数は、
フィールド名:Val([フィールド名])で使用することが出来ます。

とても簡単に設定することが出来ますので、
覚えておくと便利なAccessの関数の一つですね。