10/10/2020

Access。番号順にしたいのに、並び替えがうまくいきません。どうしたらいいの?【SORT:CLng】

Access。番号順にしたいのに、並び替えがうまくいきません。どうしたらいいの?

<Access:CLng関数>

頻繁にAccessをつかっていなかったりすると、Excelと同じように処理をしても、上手くいかないケースというのがあります。

例えば、Accessでテーブルのあるフィールドで並び替えをしようと思って、クエリをつくってみたものの、昇順・降順で並んでくれないことがあります。


それじゃ、テーブル上で直接並び替えを行ってみても、昇順・降順で並んでくれないことがあります。


次のようなテーブルです。

NOフィールドを番号順で並び替えをしたいわけです。


Accessに慣れてくると、「あっー」って感じのテーブルなんですが…

とりあえず、クエリで昇順にしてみて、確認してみましょう。


クエリデザインをつかって、作成していきます。


 NOフィールドの並び替えに、「昇順」を設定します。では、実行して確認してみましょう。


何の変化してないように見えますが、一応変化はしているんですが…昇順には並んでいません。

ところが、説明のために準備している、「コード」フィールドで並び替えを設定してみると、どうなるのか確認してみましょう。


結果、きちんと昇順に並んでいます。


なぜこのようなことが起こるのでしょうか?


それは、それぞれのフィールドの「型」が影響しています。


元のテーブルがどのような「型」になっているのか確認してみましょう。


NOは、短いテキスト型。すなわち、「文字型」です。

コードは、数値型。

文字型なので、「1」のつぎに「12」が来てしまい、昇順に並んでくれません。


どうしたらいいのでしょうか?

そこで、登場する関数があります。


それが、「CLng関数」。

この関数は、文字型を数値型に変換する関数です。


なお、「CDbl関数」が小数も扱うフィールドの時に使用する関数で、「CCur関数」が金額を扱うフィールドの時に使用する関数と、データ型によって関数が異なりますので、注意が必要です。


先程のクエリを「CLng関数」をつかった、演算フィールドに変更して確認してみましょう。

 

NO: CLng([T商品マスタ].[NO]) と演算フィールドにしました。

CLng関数は、

CLng(テーブル名.フィールド名)という形式です。


それでは、実行して確認してみましょう。

今回は、希望通りに、昇順で並んでいることが確認できました。


今回のように、思ったように変わらない時などは、データ型を確認してみるというのもいいかもしれませんね。


Excelにも「データ型」のトラブルはありますので、Excelだけしか使っていないから大丈夫というわけでもありません。