Access。番号順にしたいのに、並び替えがうまくいきません。どうしたらいいの?
<Access:CLng関数>
頻繁にAccessをつかっていなかったりすると、Excelと同じように処理をしても、上手くいかないケースというのがあります。
例えば、Accessでテーブルのあるフィールドで並び替えをしようと思って、クエリをつくってみたものの、昇順・降順で並んでくれないことがあります。
それじゃ、テーブル上で直接並び替えを行ってみても、昇順・降順で並んでくれないことがあります。
次のようなテーブルです。
NOフィールドを番号順で並び替えをしたいわけです。
Accessに慣れてくると、「あっー」って感じのテーブルなんですが…
とりあえず、クエリで昇順にしてみて、確認してみましょう。
クエリデザインをつかって、作成していきます。
NOフィールドの並び替えに、「昇順」を設定します。では、実行して確認してみましょう。
何の変化してないように見えますが、一応変化はしているんですが…昇順には並んでいません。
ところが、説明のために準備している、「コード」フィールドで並び替えを設定してみると、どうなるのか確認してみましょう。
結果、きちんと昇順に並んでいます。
なぜこのようなことが起こるのでしょうか?
それは、それぞれのフィールドの「型」が影響しています。
元のテーブルがどのような「型」になっているのか確認してみましょう。
NOは、短いテキスト型。すなわち、「文字型」です。
コードは、数値型。
文字型なので、「1」のつぎに「12」が来てしまい、昇順に並んでくれません。
どうしたらいいのでしょうか?
そこで、登場する関数があります。
それが、「CLng関数」。
この関数は、文字型を数値型に変換する関数です。
なお、「CDbl関数」が小数も扱うフィールドの時に使用する関数で、「CCur関数」が金額を扱うフィールドの時に使用する関数と、データ型によって関数が異なりますので、注意が必要です。
先程のクエリを「CLng関数」をつかった、演算フィールドに変更して確認してみましょう。
NO: CLng([T商品マスタ].[NO]) と演算フィールドにしました。
CLng関数は、
CLng(テーブル名.フィールド名)という形式です。
それでは、実行して確認してみましょう。
今回は、希望通りに、昇順で並んでいることが確認できました。
今回のように、思ったように変わらない時などは、データ型を確認してみるというのもいいかもしれませんね。
Excelにも「データ型」のトラブルはありますので、Excelだけしか使っていないから大丈夫というわけでもありません。