| 
    
     |  | ▼さつき さん: おはようございます。
 
 前回のコードと見比べて…フィールド名は「契約者名」? 「契約者」?
 
 Public Function 横並び()
 
 Dim cn As ADODB.Connection
 Dim rs1 As New ADODB.Recordset
 Dim rs2 As New ADODB.Recordset
 Dim sql As String
 Dim cr As String
 Dim I As Long
 Dim J As Long
 
 'Application.Echo False
 'DoCmd.Hourglass True
 
 rs1.Open "list", cn, adOpenStatic, adLockReadOnly
 Set cn = CurrentProject.Connection '接続
 
 Do Until rs1.EOF
 sql = "SELECT * FROM listyoko WHERE 契約者='" & rs1![契約者] & "'"
 rs2.Open sql, cn, adOpenKeyset, adLockOptimistic
 
 If Not IsNull(rs1![区分].value) Then
 
 
 'データなし(新規)
 If rs2.EOF Then
 rs2.AddNew
 For I = 1 To 4
 rs2(I - 1) = rs1(I)
 Next I
 'データあり(追加)
 Else
 J = 0
 '空のフィールドを検索
 Do Until rs2(J * 3 + 1) = "" Or IsNull(rs2(J * 3 + 1))
 J = J + 1
 Loop
 
 For I = 0 To 2
 rs2(I + J * 3 + 1) = rs1(I + 2)
 Next
 End If
 '更新
 rs2.Update
 rs2.Close
 End If
 rs1.MoveNext
 
 Loop
 
 'オブジェクトの解放
 rs1.Close: Set rs1 = Nothing
 Set rs2 = Nothing
 cn.Close: Set cn = Nothing
 End Function
 
 「rs2」は「rs1」のレコードが動く度に開き直す形となります。
 当然「Open」「Close」の回数が増える訳で、少量のデータでしたら
 前回のコードの方が早い(体感的には変わらないかも…)かと思いますが、
 「rs2」のレコード数が増えてくると、こちらの方が早い…と思われ…ます。
 
 
 |  |