access初心者です。テーブルに以下のようなデータがあるとします
ID 数値
19 1.91
20 1.88
21 1.89
22 1.86
この時に数値を昇順に並び替えても、IDが連番に並んでいるか調べたいです。
クエリの昇順だと20と21が逆になっているので、今のままなら21がアウトですよ。と分かるようにしたいです。
お願いいたします
通報 ...
access初心者です。テーブルに以下のようなデータがあるとします
ID 数値
19 1.91
20 1.88
21 1.89
22 1.86
この時に数値を昇順に並び替えても、IDが連番に並んでいるか調べたいです。
クエリの昇順だと20と21が逆になっているので、今のままなら21がアウトですよ。と分かるようにしたいです。
お願いいたします
数値フィールドで昇順に並べ替えたらIDの昇順連番は担保されません。
レコードセット取得して前のレコードと今のレコードの値を比較したらいいんじゃないですかね?
「数値を昇順」で「ID」は降順になっていてほしいということですか?
並び替え前のテーブルと、並び替えたクエリを数値フィールドで繋ぐってことでしょうか?
「数値を昇順」で「ID」は降順 ではなくて、「数値を昇順」で並べたときに、IDが連番になっていれば降順でも昇順でも構わないんです。
全体が昇順または降順ということですか。
それとも途中から昇順、降順が入れ替わることはありますか。
例えば、最初は昇順だったが、途中から降順に変わるとか。
また、昇順か降順かの判断基準はありますか。
もう少しデータ数の多いサンプルデータを提示してもらえますか。また、降順の場合のサンプルデータと昇順の場合のサンプルデータも提示してもらえますか。
新しいフィールドを追加して、並び順を登録すればいいんじゃない?
繰返構文、変数値、インクリメント。
下記のような仕様だと仮定して。
数値を昇順にした場合、ID全体が昇順または降順で連番になっているかどうかをチェック。←まさに、やりたいことです!
途中から昇順、降順が変わることはない。←IDは必ず、昇順か降順で飛び番号はありません
連番になっていないIDは、イミディエイトウィンドウに出力。
↑ではなく、テーブルに昇順×とや、降順で×とか表示したいです。できるのならば、フィールドは作成します
お願いいたします
テーブルに表示させたいなら、テーブルに表示用のフィールドを追加することになります。
例えば、
連番チェック
という名前のテキスト型のフィールドを追加したとして、下記のような感じです。フォームに読み込んで表示するとして、フォームの読み込み時イベントに
[イベント プロシージャ]
を設定して、お二人ともありがとうございました。
初心者の私には、即答できないので実際に この構文を加工させていただいて実行してみたいと思います。
ちなみに hatenaさんの場合も、フォームの読み込み時イベントでよろしいですか?
テーブルデータを入力または更新したタイミングですね。つまり連番が崩れる可能性のあるタイミングでチェックするということです。
そういえばこれ、数値を昇順にすると
全部アウトじゃない?
少なくとも、「21がアウトですよ」はどういう基準でそれがアウトなのか意味が分かりませんね
>> 11のhirotonの回答はその辺適当です
ご指摘ありがとうございました。21がアウトですよ の説明です
最大値の22、最小値の19は合っているけれど、数値で並べ替えると22の次が21番が連番じゃなくて
20番になっているからアウトですよ ってことを調べたかったんです。
前回ご指摘をいただいたように4件しか表示していなかったのですみません。
件数を増やしました。再度ご教授お願い致します。
ID 数値
19 1.91
20 1.90
21 1.89
22 1.86
23 1.88
24 1.81
25 1.81
とデータがあったとき数値を昇順に並び替える
25 1.81
24 1.81
22 1.86
23 1.88
21 1.89
20 1.90
19 1.91
ID 25から24までは連番 21から19番も連番だけど 24から22は連番にならないから「ここからアウト」だよ
ってことを調べたいのです。お願いいたします
その後、どうしたいの?最終的に、やっている事がレッドカードになる場合、質問不成立です。
質問不成立です
すみません。
数値が重複する場合があるんですね。
だとすると、前回の私の回答では、うまくいかない場合があるので、ちょっと修正します。
数値が同じ場合、IDの並び順が不定になるので、IDの並び順も指定しておく必要がありました。
数値が重複する場合があるんですね。
はい、あります。その場合もあると お伝えしなければいけなかったのですね。すみません。
伝達事項の少ない中で、ご返信本当にありがとうございます。
上記を参考に作成してみます。また壁に当たるかと思いますが、ご指導お願いいたします
hatenaさま 参考にさせていただき、今テーブルに入力しているID19から22のチェックができるようになりました。今後チェックするIDが34まで増え、19から22、その途中27から34も一度にチェックしたい時などには、どのように書き換えればよろしいでしょうか?DMin("ID", "T1")やDMax("ID", "T1")を19や34にして複数同じなものを作る以外のスマートの方法をお願いできますか?
IDが増えても(レコード件数が増えても)、コードを修正する必要はないです。
全レコードを対象にチェックします。
実際にやってみてうまくいかなかったのでしょうか。
もし、そうなら、どのようなデータでどのような結果になったのか、どこが想定と違うのか説明してください。
DMin関数とDmax関数を使用して、テーブルに保存されているIDの最小値から最大値の中でチェックできました。本当にありがとうございます。うまくいかなかったというよりは
最小値や最大値だけでなく、IDが34まで増えたときに19から22の間だけ、27から34の間だけで数値を並び替えて同じようにIDの連番をチェックするときは、どうすればいいんだろうと疑問に思ったからです。
MinId = DMin("ID", "T1"): MaxID = DMax("ID", "T1")の部分を、MinId =19 や MinId =27 MaxID =22 や MaxID=34と書き換えてSub を2つ作れば、私でもできるけど...
同じ処理をするのなら、きっともっと良い方法があるんだろうと邪推しました。お願いできますか?
チェックしたい範囲を引数で渡すようにすればいいでしょう。
ただし、指定した範囲だけチェックしたいのなら、その範囲のレコードを抽出して並び替える必要があります。
引数を省略できる設定があります。引数の前に Optional をつけます。
VBA 省略可能な引数 Optional と名前付き引数
引数を省略したは全レコードをチェック、引数が指定してあればその引数間のレコードを対象にするというふうにすればいいでしょう。
上記を考慮すると下記のようなコードになります。
使用例
上記の様に変更して、
引数を省略したは全レコードをチェック、引数が指定してあればその引数間のレコードを対象に...
()の中で使い分けができるなんて!!とても助かります。
これで細かいチェックもできます!ありがとうございました