|
Hola, ahora si quedo mejor que original.
He validado dos cosas:
1.- La cantidad Introducida de celdas a borrar debe ser menor o igual a la cantidad de celdas del rango.
2.- Si una celda aleatoria se repite para borrar se elegira otra aletoriamente, asi hasta completar la cantidad que se desea borrar.
Sub celda_aleatoria()
Dim fila_inicial As Double
Dim fila_final As Double
Dim columna_inicial As Double
Dim columna_final As Double
Dim Cantidad_Total_Celdas As Double
Dim Cantidad_Celdas_Borrar As Double
Dim fila_elegida As Double
Dim columna_elegida As Double
Dim Celda_Borrar As String
Dim Celdas_Elegidas As String
'Iniciamos randomize para que funcione el Rnd
Randomize
'obtenemos un registro al azar, para lo cual,
'informamos primero de la fila inicial y final
'(para Excel 2007, cambiar estos datos)
fila_inicial = InputBox("Ingrese la Fila Inicial", "Fila Inicial")
fila_final = InputBox("Ingrese la Fila Final", "Fila Final")
'lo mismo para las columnas
columna_inicial = InputBox("Ingrese la Columna Inicial", "Columna Inicial")
columna_final = InputBox("Ingrese la Columna Final", "Columna Final")
'Calcula la Cantidad Total de Celdas
Cantidad_Total_Celdas = (fila_final - fila_inicial + 1) * (columna_final - columna_inicial + 1)
'Cantidad de Celdas a Borrar
Ingresa_Cantidad_Celdas:
Cantidad_Celdas_Borrar = InputBox("Ingrese la Cantidad de Celdas que desea Borrar, la Cantidad debe ser menor o igual a " & Cantidad_Total_Celdas, "Cantidad de Celdas a Borrar")
If Cantidad_Celdas_Borrar > Cantidad_Total_Celdas Then
MsgBox "La Cantidad de Celdas que desea borrar es mayor que la cantidad Total de Celdas del rango, por favor intente Nuevamente", vbExclamation, "Error en Dato"
GoTo Ingresa_Cantidad_Celdas
End If
'generamos el número de la fila al azar
Do While Cantidad_Celdas_Borrar > 0
fila_elegida = Int((fila_final - fila_inicial + 1) * Rnd + fila_inicial)
'lo mismo para la columna
columna_elegida = Int((columna_final - columna_inicial + 1) * Rnd + columna_inicial)
'Guardo en una Variable la Celda a Elegida
Celda_Borrar = fila_elegida & "," & columna_elegida
'Verifico que la Celda a Borrar no se repita
If InStr(1, Celdas_Elegidas, Celda_Borrar) = 0 Then
'Guardo la celda elegida a Borrar en una variable
Celdas_Elegidas = Celdas_Elegidas & "-" & fila_elegida & "," & columna_elegida
'Nos situamos en la celda elegida
Cells(fila_elegida, columna_elegida).ClearContents
'Decremento la variable Cantidad_Celdas_Borrar
Cantidad_Celdas_Borrar = Cantidad_Celdas_Borrar - 1
End If
Loop
End Sub
Saludos Leone.
|