最小値や最大値だけでなく、IDが34まで増えたときに19から22の間だけ、27から34の間だけで数値を並び替えて同じようにIDの連番をチェックするときは、どうすればいいんだろうと疑問に思ったからです。
チェックしたい範囲を引数で渡すようにすればいいでしょう。
ただし、指定した範囲だけチェックしたいのなら、その範囲のレコードを抽出して並び替える必要があります。
同じ処理をするのなら、きっともっと良い方法があるんだろうと邪推しました。お願いできますか?
引数を省略できる設定があります。引数の前に Optional をつけます。
引数を省略したは全レコードをチェック、引数が指定してあればその引数間のレコードを対象にするというふうにすればいいでしょう。
上記を考慮すると下記のようなコードになります。
Public Sub SequenceCheck4(Optional MinId As Long = 0, Optional MaxID As Long = 0)
If MinId = 0 Then MinId = DMin("ID", "T1")
If MaxID = 0 Then MinId = DMax("ID", "T1")
Dim StepNum As Long, SeqNum As Long, stOrder As String
If DLookup("数値", "T1", "ID=" & MinId) < DLookup("数値", "T1", "ID=" & MaxID) Then
StepNum = 1 '昇順
SeqNum = MinId
stOrder = "昇順"
Else
StepNum = -1 '降順
SeqNum = MaxID
stOrder = "降順"
End If
' CurrentDb.Execute "UPDATE T1 SET 連番チェック = Null WHERE Not 連番チェック Is Null;"
Dim sSQL As String
sSQL = "SELECT * FROM T1 Where ID>=" & MinId & " And ID<=" & MaxID & " ORDER BY 数値, ID"
If stOrder = "降順" Then sSQL = sSQL & " DESC"
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(sSQL)
Do Until rs.EOF
rs.Edit
If rs!ID <> SeqNum Then
rs!連番チェック = stOrder & "×"
Else
rs!連番チェック = Null
End If
rs.Update
SeqNum = SeqNum + StepNum
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
使用例
'27から34の間だけ連番チェック
Call SequenceCheck4(27, 34)
'全レコードを連番チェック
Call SequenceCheck4()
通報 ...