アプリ版:「スタンプのみでお礼する」機能のリリースについて

1)アクセスのクエリで、日付が変わるごとに"*"が自動的に入る式を教えてください。
 (A列マークを参照)

2)1)に下記の条件を追加した場合の式も、教えてください。
  伝票IDをひとつの区切りとして、同日であっても(図A)5行を超えた場合は"*"を入れたいです。


iifの式からできるかと思い、色々しているのですが出来ずに困っております。
よろしくご教授頂きます様お願い致します。
(図の赤と青のラインは見やすいかと思いラインを入れています。)

「アクセスのクエリ日付が変わるごとに*を自」の質問画像

A 回答 (1件)

なかなか回答がつかないようですので、老婆心から。


直接の回答とは言えませんし、すでにご存知かもしれませんが、
一つの参考となさってくださいませ。


実際、勘違いされている方も多く見えるのですが、
エクセルのような表計算ソフトは
「どのセルにどんなデータが入力されている」と言うものをファイル単位で持ちます。
つまり、ファイル内のセル同士の比較ですので、前後の行との比較が容易に出来ます。
これが100行後ろのセルでも、1000行前の違う列のセルでも、
セル番地を直接指定できますから、基本的には常に正しいセルを参照します。

対し、アクセスのようなデータベースソフトはレコード単位でデータを保持します。
同じテーブルに保存されていても、実はレコード同士の相関関係は一切無いのです。
表示上、一見整然と並んでいるように見えますが、
ランダムに保存されているレコードを拾い集めて、ソートして表示しているだけです。
このソートの条件によって、前後の行が入れ替わる可能性は大いにあるのです。
ソート条件も主キーも指定していないテーブルで
「おいおい、入力した順番と違うじゃん」と言った経験はありませんか?
簡単に言うと、これはアクセスが「見つけた順」に表示してしまうからです。
なので、通常の考え方では「前の行」と比較して・・と言うのは通用しません。



さて、アクセスでお望みの処理をクエリで実現させるには、
「このレコードは上から何番目」である、とアクセスが識別できるフィールド、
要するに「連番」フィールドを付加し、ある「連番」を振られたレコードと、
「一つ大きい(あるいは小さい)連番」を振られたレコードとを
比較する方法がまず考えられます。


一つ一つ説明しているとかなりの文字数を要しますし、
図で頂いた条件からでは正確な回答を出すのは不可能ですから、とりあえずヒントだけ。

連番を振るのにはDCount関数が便利です。
見てお察しいただけると思いますが、データの件数を(条件付きで)数える関数です。
これを使って「あるフィールドが自分より若いレコードを数えて+1」してやれば、
これが「連番」として機能してくれます。

レコードを比較するにはDLookup関数を使うと比較的楽です。
これもお察しいただけると思いますが、
ある条件に合致するレコードのフィールドを見に行ってくれる関数です。
これで「自分の連番より一つ大きい(小さい)連番を付加されたレコード」を見に行き、
それを以て、自分のフィールドと比較してやれば良いです。
この比較にはIIf関数が有効かもしれませんね。

各関数については、別途お調べいただけたらよろしいかと思います。
Webで検索をかけると相当の数がヒットしてきます。

今回はそんな時間は・・とおっしゃるのであれば、
素直に、添付された図のようにエクセルに吐き出して処理した方が早いかもしれません。




レポート上で・・と言うのであれば、比較的楽ではあるんですけどね。
普段は不可視である非連結であるラベルを用意しておいて、
条件が有ったら(日付が変わったらなど)可視にする、
と言うのを詳細のフォーマット時にでも書いておけば良いので。


以上、参考までに。
    • good
    • 0
この回答へのお礼

DCountで検索し、色々な式に当てはめて、実験した結果、
2)の質問の答えまでは、さすがにたどり着きませんでしたが、
1)については、思い通り作ることができました。

ヒントがなければ、時間ももっとかかったかと思います。
ご回答いただきありがとうございました。

お礼日時:2012/12/13 14:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!