Access (VBA)

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

 
(Windows 10 Home : Access 2007)
For-NEXT での値の取得について
投稿日時: 19/12/06 17:03:20
投稿者: のりまろん

 
 For〜to  NEXT の処理中で 他のクエリからの値の取得に悩んでいます。
 
  Dim db As dao.Database
    Dim rs1 As dao.Recordset
    Dim rs2 As dao.Recordset
    Dim rs3 As dao.Recordset
  Dim j As Long
    Dim k As Long
    Dim i As Long
    Dim h As Long
     
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("縞追加@")
    Set rs3 = db.OpenRecordset("縞追加A")
    Set rs2 = db.OpenRecordset("縞構成", dbOpenDynaset)
    k = DMax("並順", "縞構成") + 1
    i = rs1.RecordCount
    h = rs3.RecordCount
 
       rs1.MoveFirst
        
       For j = 1 To i
            rs2.AddNew
            rs2!ID = rs1!ID
            rs2!フィールド = rs1!フィールド
            rs2!並順 = k
            k = k + 1
            rs2!本数 = rs1!本数
            If h > 1 Then
            rs2!繰返 = rs3!繰返・・・(rs1!フィールドと同じ値で その中でも少ないもの)
            Else
            rs2!繰返 = rs1!繰返
            End If
            rs2.Update
            rs1.MoveNext
       Next j
          
       rs1.Close: Set rs1 = Nothing
       rs2.Close: Set rs2 = Nothing
       rs3.Close: Set rs3 = Nothing
       db.Close: Set db = Nothing
 
  縞追加@クエリの全レコードを縞構成のテーブルに追加するコードですが
  縞追加A(縞追加@をグループ化して2レコード以上の差異が出たもの)が2レコード以上あれば
  縞追加Aのフィールにある繰返の少ない値を rs2!繰返 に代入したいのです
 
  縞追加@のデータとして
   ID   フィールド  本数  繰返
   1     A      2   36
   1     A      2   37
   1     B      3   10
   1     B      3   10
   1     C      4   10
   1     D      2   15
  
 
  縞追加Aのデータとしては 
 
  フィールド   繰返
    A      36
    A      37
 
 追加後の縞構成のデータは
   ID   フィールド  本数  繰返
   1     A      2   36
   1     A      2   36 ・・ここが変わってる
   1     B      3   10
   1     B      3   10
   1     C      4   10
   1     D      2   15
 
 こんな感じです
 
  処理としては
 
  縞追加Aのレコードが2以上であれば
 
  縞追加@のフィールド(A)=縞追加Aのフィールド(A) その縞追加Aの2つのレコードの     繰返の低い値(36)を代入する
 
  2レコードなければ そのまま rs1!繰返の値を代入する
 
            If h > 1 Then
            rs2!繰返 = DMIN("繰返", "縞追加A") 縞追加@のフィールドと同じもの
            Else
            rs2!繰返 = rs1!繰返
            End If
 このような処理がしたいです
 
 どなたかご教授いただけないでしょうか?
  

回答
投稿日時: 19/12/06 17:54:06
投稿者: sk

引用:
縞追加A(縞追加@をグループ化して2レコード以上の差異が出たもの)

引用:
縞追加@のフィールド(A)=縞追加Aのフィールド(A)
その縞追加Aの2つのレコードの繰返の低い値(36)を代入する

引用:
rs2!繰返 = DMIN("繰返", "縞追加A")

rs2!繰返 = DMin("繰返", "縞追加@", "[フィールド]='" & rs1![フィールド] & "'")
 
引用:
縞追加A(縞追加@をグループ化して2レコード以上の差異が出たもの)

引用:
縞追加Aのレコードが2以上であれば

引用:
2レコードなければ そのまま rs1!繰返の値を代入する

単に「[縞追加@]の[フィールド]ごとの[繰返]の最小値」を
取得したいだけなら、これらの判定は全く不要なのでは。

投稿日時: 19/12/06 18:26:56
投稿者: のりまろん

Skさま
ありがとうございます!
 
  縞追加@のデータとして
   ID   フィールド  本数  繰返
   1     A      2   36
   1     A      2   37
   1     B      3   11
   1     B      3   10
   1     C      4   10
   1     D      2   15
  
  
  縞追加Aのデータとしては 
  
  フィールド   繰返
    A      36
    A      37
    B      11
    B      10
 
  となるからと考えておりました
 
 これらの判定は全く不要なのでは。
 
  なるほど そうですね
 
  グループ化を A B C にして 最小値のみ 代入すればいいんですね
  
  すごく勉強になりました
 
  Set rs3 = db.OpenRecordset("縞追加@") を うまくグループ化して
 
  縞追加Aとか削除して、簡素なコードにしてみます。
  
  SKさま ありがとうございました。