Martha, interesante su pregunta esto tuve que hacerlo hace un tiempo cuando utilizaba Acccess como backend. Lo puede hacer con estas funciones manipulando los índices y ordenarlos, utilizo el método de la burbuja. Copie este código en un módulo
Public Function EliminarRegistrosAlAzar(n As Integer, idVendedorFiltro As Long, codLoteriaFiltro As Long, rifa As Long)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sql As String
Dim totalRegistros As Integer
Dim indicesEliminar() As Integer
Dim i As Integer
Set db = CurrentDb
' Obtener los registros filtrados y ordenados por NroAsignado
sql = "SELECT * FROM tblNrosAsignados " & _
"WHERE idVendedor = " & idVendedorFiltro & " AND CodigoLoteria = " & codLoteriaFiltro & _
" AND idrifa=" & rifa & " ORDER BY NroAsignado"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
If rs.RecordCount = 0 Then
MsgBox "No hay registros que coincidan con los filtros."
Exit Function
End If
rs.MoveLast
totalRegistros = rs.RecordCount
rs.MoveFirst
If n > totalRegistros Then
MsgBox "No hay suficientes registros para eliminar " & n & " al azar."
Exit Function
End If
' Generar una lista de índices únicos al azar
ReDim indicesEliminar(1 To n)
Dim indice As Integer, duplicado As Boolean
Randomize
For i = 1 To n
Do
duplicado = False
indice = Int(Rnd() * totalRegistros) + 1
' Verificar que no esté repetido
Dim j As Integer
For j = 1 To i - 1
If indicesEliminar(j) = indice Then
duplicado = True
Exit For
End If
Next j
Loop While duplicado
indicesEliminar(i) = indice
Next i
' Ordenar los índices para procesarlos desde el final
Call ordenacion_burbuja(indicesEliminar)
' Eliminar los registros según índice
For i = n To 1 Step -1
rs.MoveFirst
rs.Move indicesEliminar(i) - 1
rs.Delete
Next i
MsgBox n & " registros eliminados al azar.", vbInformation, "Eliminando Números asignados"
rs.Close
Set rs = Nothing
Set db = Nothing
End Function
Private Sub ordenacion_burbuja(arr() As Integer)
Dim i As Integer, j As Integer, temp As Integer
For i = LBound(arr) To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(i) > arr(j) Then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
End If
Next j
Next i
End Sub
Construí una tabla de acuerdo con los campos que suministro en la consulta, no obstante, cambie el nombre de la tabla tblNrosAsignados y el nombre de los campos de acuerdo con sus datos,
Ejemplo de llamada:
EliminarRegistrosAlAzar(20,17,1,2).
Elimina 20 registros del idevendedor=17, CodigoLoteria=1 e idrifa=2.
Lo probé y funciona correctamente.