Microsoft Access 掲示板

複数レコードの動的配列をしたい

6 コメント
views
4 フォロー

シリアルナンバーをフォームのテキストボックスに配列しています。最大で70個テキストボックスがあり、テキストボックスの名前はsn1〜sn70という名前で作っています。

そこからテーブルへ転記したいのですが、
テーブルはsn1からsn5までフィールドがあり、フォームのsn1〜sn5までを転記
sn6〜sn10は次のレコードのsn1〜sn5に転記
最大で5個ずつ配列し、値が無くなれば終了したいです。

ADOで転記するプログラムで作っており、シリアル以外は一つしかないのでできるのですが
シリアルのところだけ苦戦しています。
ご存知の方ご教示願います。

チョコラブ
作成: 2021/10/06 (水) 16:00:10
通報 ...
1
hiroton 2021/10/06 (水) 16:39:43 7536f@f966d

なんかデータベース的な作りが良くなさそうですね


書き方はいろいろありますが、1レコード分ずつループするようにして、データが無ければループを終わるようにすればいいでしょう

    Dim i As Long
    For i = 1 To 70 Step 5
        If Nz(Me("sn" & i) & Me("sn" & i + 1) & Me("sn" & i + 2) & Me("sn" & i + 3) & Me("sn" & i + 4)) = "" Then Exit For
        'やりたいこと
    Next
2
チョコラブ 2021/10/07 (木) 08:57:46 1b30c@93fe9

ありがとうございます。
シリアルの変数に+1、+2,+3、+4を足せばよかったのですね・・・。
すごく助かりました!!

5
hiroton 2021/10/07 (木) 10:24:35 c45f5@f966d >> 2

よくよく考えたらデータがきっちり詰めて入力されているなら、データがないレコードは先頭のデータだけチェックすれば大丈夫でした

Dim i As Long
For i = 1 To 70 Step 5
    If Nz(Me("sn" & i)) = "" Then Exit For
    'やりたいこと
Next

それぞれのシリアル値に対して何かしたいときは+1・・・+4でそれぞれ参照できますね

3
チョコラブ 2021/10/07 (木) 09:32:09 1b30c@93fe9

もう一つ聞かせてください。
hirotonさんのプログラムで5個ずつ配列することはできました。
そこで合格数を調べたいのですが、5個ずつ配列するうち、sn1~sn5の間にシリアルがあればカウントし、
合格数に5個あれば5と表示、3個あれば3と表示したいのですが
hirotonさんのプログラムでカウントすることはできますでしょうか。

4
hiroton 2021/10/07 (木) 10:13:40 c45f5@f966d

プログラムの中でカウントする必要あるのかな?
テキストボックスの参照方法は提示した通りなのでそれぞれのテキストボックスがNullじゃなければ1を足していけばいいですね

'やりたいこと
Dim 合格数 As Long
合格数 = 0
If Not IsNull(Me("sn" & i)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 1)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 2)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 3)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 4)) Then 合格数 = 合格数 + 1

繰り返しなのでループにしてもいいでしょう

'やりたいこと
Dim 合格数 As Long
Dim j As Long
合格数 = 0
For j = 0 To 4
    If Not IsNull(Me("sn" & i + j)) Then 合格数 = 合格数 + 1
Next
6
チョコラブ 2021/10/07 (木) 15:38:08 658ea@07c16 >> 4

ありがとうございます!
その通りに動きましたー。
勉強させていただきました。