Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
テキスト型をグループ毎に連番
投稿日時: 18/12/02 13:04:14
投稿者: sim2018

お世話になります。
テーブルの番号にクループ毎に連番をふりたいと思っています。
テーブルのフィールドは
-----------------------------------
班 名前 カナ 参加 番号
 1 あ  ア  〇  
 1 い  イ  〇 
 1 う  ウ  〇  
 2 え  エ  〇 
 2 お  オ  〇 
 3 か  カ  〇 
 3 き  キ  〇
 4 く  ク  〇
 ・ ・  ・  ・
 ・ ・  ・  ・
 ・ ・  ・  ・
-----------------------------------
このようになっています。
主キーは設定しません。
「番号」数値型で他は全てテキスト型になっていまして、
「番号」に班ごとに"1"からの連番を"更新クエリ"で振りたいと考えています。
 
いろいろと検索して"DCount "を使えばいいのはわかりましたが、テキスト型のせいなのか
エラーになったしまってなかなかできません。
どなたかわかられる方がいらっしゃいましたらご教授下さい。
宜しくお願いいたします。
 
また、VBAでの構文があればそちらも教えていただけると助かります。
よろしくお願いいたします。 
 
 

回答
投稿日時: 18/12/02 16:29:35
投稿者: hatena
投稿者のウェブサイトに移動

並び順がユニークきまる基準のフィールド(あるいはフィールドの組み合わせ)が必要です。
 
とりあえず、カナの昇順で連番にするなら、更新クエリの「レコードの更新」に下記の式を設定すればいいでしょう。
 
DCount("班","テーブル名","[班]='" & [班] & "' AND [カナ]<='" & [カナ] & "'")
 
カナに重複があるとそこは連番にならずに同じ番号になります。
 
[カナ]と[名前]の2つの組み合わせで並び順を決定するなら、
 
 
DCount("班","テーブル名","[班]='" & [班] & "' AND ([カナ]<'" & [カナ] & "' OR ([カナ]='" & [カナ] & "' AND [名前]<='" & [名前] & "'))")
 
同姓同名がいるとやはり連番にはなりませんし、複雑な式になるので重い処理になります。
 
VBAで連番をふるなら完全な連番は可能です。
が、結構な量のコードを書く必要があります。
 
下記で連番を自動入力する汎用関数を紹介しています。
それを利用すれば1行のコードで連番入力が可能です。
 
グループ毎連番を自動入力する関数 - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-428.html
 
コード例
SetSequenceNumber "連番", "テーブル名", "班", "カナ, 名前"

投稿日時: 18/12/02 18:32:27
投稿者: sim2018

お世話になります。
hatenaさん早速の回答ありがとうございます。
 
DCount("班","テーブル名","[班]='" & [班] & "' AND ([カナ]<'" & [カナ] & "' OR ([カナ]='" & [カナ] & "' AND [名前]<='" & [名前] & "'))")
 
でできました。
 
ちなみにVBAで処理する場合には、モジュールに関数を登録して
クエリでよびだすのでしょうか?
 
初歩的質問ですみません。また、教えていただけると助かります。

回答
投稿日時: 18/12/03 15:09:55
投稿者: hatena
投稿者のウェブサイトに移動

sim2018 さんの引用:
ちなみにVBAで処理する場合には、モジュールに関数を登録して
クエリでよびだすのでしょうか?

前回のリンク先から、「汎用関数」のコードをコピーして標準モジュールに貼り付けます。
 
あとは、コマンドボタンのクリック時など、適切なイベントに下記のコードを記述してください。
 
SetSequenceNumber "連番", "テーブル名", "班", "カナ, 名前"
 
このコードを実行するとテーブルに連番が入力されます。

投稿日時: 18/12/03 20:47:39
投稿者: sim2018

お世話になります。
hatena素早い回答ありがとうございます。
 
コマンドボタンのクリック時などイベントで呼び出し、実行することで追加されることは
わかりました。
 
クエリーからこの関数を実行することはできないなでしょうか?
 
初歩的な質問ですみません、宜しくお願い致します。

回答
投稿日時: 18/12/03 21:41:41
投稿者: hatena
投稿者のウェブサイトに移動

sim2018 さんの引用:
コマンドボタンのクリック時などイベントで呼び出し、実行することで追加されることは
わかりました。
 
クエリーからこの関数を実行することはできないなでしょうか?

 
なぜクエリから実行する必要があるのでしょうか。
というか更新クエリも、別のクエリから実行することは無理ですよね。
 
そうしたい理由をお聞かせください。
 
どうしてもというならできないことはないですが、その必要性が理解できてないので。
 

投稿日時: 18/12/04 08:26:20
投稿者: sim2018

 hatenaさんおはようございます。お世話になります。
 

引用:
更新クエリも、別のクエリから実行することは無理ですよね。

なるほど、そういうレベルの話なのですね。
クエリで実行できる関数のイメージでした。
 
いろいろと教えていただき本当にありがとうございました。

投稿日時: 18/12/04 18:20:27
投稿者: sim2018

hatenaさんおはようございます。お世話になります。
  
引用:
更新クエリも、別のクエリから実行することは無理ですよね。
 
なるほど、そういうレベルの話なのですね。
クエリで実行できる関数のイメージでした。
  
いろいろと教えていただき本当にありがとうございました。