|
▼さつき さん:
おはようございます。
前回のコードと見比べて…フィールド名は「契約者名」? 「契約者」?
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」のレコード数が増えてくると、こちらの方が早い…と思われ…ます。
|
|