Estimada Comunidad: Recurro a ustedes esperando que se encuentren muy bien: Les escribo para hacer consulta sobre como podría generar números aleatorios con VBA, los cuales se vayan enlistando a medida que vayan saliendo. Mi idea es simular un sorteo aleatorio de las personas que se deberán encargar de la limpieza de un lugar y que, una vez les haya tocado limpiar, quede registrado en una hoja excel el día que les ha tocado. Además, lo ideal es que no se repitan hasta que todos hayan pasado por 1 día de limpieza. De lo anterior desprendo que lo necesario es lo siguiente:
1) Generar 3 números aleatorios que no se repitan entre sí.
2) Verificar si ya han limpiado anteriormente (en el registro). Si ya limpiaron, volver a generar aleatorios. Si no han tirado. Registrar y terminar proceso.
De esta manera podría garantizar que tres personas serán generadas aleatoriamente y se verificará si ya han salido sorteados anteriormente.
Mi trabajo hasta el momento es el siguiente:
'GENERAR NÚMERO ALEATORIO.
'(Módulo NroAleatorio)
Option Explicit
Dim min As Integer
Dim max As Integer
Private Function Aleatorio(min As Integer, max As Integer) As Integer
Aleatorio = Int((min - max + 1) * Rnd + max)
End Function
Public Function AleatorioSP() As Integer
DefineValores
AleatorioSP = Int((min - max + 1) * Rnd + max)
End Function
Private Sub DefineValores()
min = Hoja1.Range("C30")
max = Hoja1.Cells(31, 3)
End Sub
Option Explicit
Sub Loteria()
Dim Nros As String
Dim Temp As Integer
Dim i As Integer
'
For i = 1 To Hoja1.Range("C32")
'For i = 1 To 3
'Temp = NroAleatorio.AleatorioCP(1, 45)
Temp = NroAleatorio.AleatorioSP
If InStr(1, Nros, CStr(Temp)) = 0 Then
Nros = Nros & ", " & CStr(Temp)
Else
i = i - 1
End If
Next
MsgBox "Las personas que deberán ser parte de la comisión de limpieza la semana X son los asociados al numero " & Nros
MsgBox "La persona asociada al número es " & matriz(Nros)
End Sub
Lo interesante es que hasta el momento genero un número aleatorio pero no puedo compilar al no poder mezclar el valor generado aleatoriamente con la matriz generada.
Dudas: Esta bien realizado?
Consultas a vosotros: Si logro compilar vinculando la matriz a los números generados, como puedo ir escribiendo los números generados aleatoriamente en un registro (Hoja Registro) y luego ir verificando en ella si ya ha salido anteriormente el número?
Agradezco muchisimo su ayuda y espero que todos se encuentren sanos y vigorosos en estos días dificiles.
Estimada Comunidad: Recurro a ustedes esperando que se encuentren muy bien: Les escribo para hacer consulta sobre como podría generar números aleatorios con VBA, los cuales se vayan enlistando a medida que vayan saliendo. Mi idea es simular un sorteo aleatorio de las personas que se deberán encargar de la limpieza de un lugar y que, una vez les haya tocado limpiar, quede registrado en una hoja excel el día que les ha tocado. Además, lo ideal es que no se repitan hasta que todos hayan pasado por 1 día de limpieza. De lo anterior desprendo que lo necesario es lo siguiente:
1) Generar 3 números aleatorios que no se repitan entre sí.
2) Verificar si ya han limpiado anteriormente (en el registro). Si ya limpiaron, volver a generar aleatorios. Si no han tirado. Registrar y terminar proceso.
De esta manera podría garantizar que tres personas serán generadas aleatoriamente y se verificará si ya han salido sorteados anteriormente.
Mi trabajo hasta el momento es el siguiente:
'GENERAR NÚMERO ALEATORIO.
'(Módulo NroAleatorio)
Option Explicit
Dim min As Integer
Dim max As Integer
Private Function Aleatorio(min As Integer, max As Integer) As Integer
Aleatorio = Int((min - max + 1) * Rnd + max)
End Function
Public Function AleatorioSP() As Integer
DefineValores
AleatorioSP = Int((min - max + 1) * Rnd + max)
End Function
Private Sub DefineValores()
min = Hoja1.Range("C30")
max = Hoja1.Cells(31, 3)
End Sub
Option Explicit
Sub Loteria()
Dim Nros As String
Dim Temp As Integer
Dim i As Integer
'
For i = 1 To Hoja1.Range("C32")
'For i = 1 To 3
'Temp = NroAleatorio.AleatorioCP(1, 45)
Temp = NroAleatorio.AleatorioSP
If InStr(1, Nros, CStr(Temp)) = 0 Then
Nros = Nros & ", " & CStr(Temp)
Else
i = i - 1
End If
Next
MsgBox "Las personas que deberán ser parte de la comisión de limpieza la semana X son los asociados al numero " & Nros
Dim matriz(30) As String
matriz(1) = "July"
matriz(2) = "Patricia"
matriz(3) = "Jessica"
matriz(4) = "Marcela"
matriz(5) = "Javiera"
matriz(6) = "Felipe"
matriz(7) = "Janet"
matriz(8) = "Jordan"
matriz(9) = "Carol"
matriz(10) = "David"
matriz(11) = "Alejandra"
matriz(12) = "Jessica"
matriz(13) = "Karem"
matriz(14) = "Karen"
matriz(15) = "Monica"
matriz(16) = "Jaime"
matriz(17) = "Gustavo"
matriz(18) = "Catherine"
matriz(19) = "Moira"
matriz(20) = "Andrés"
matriz(21) = "Javier"
matriz(22) = "Francisco"
matriz(23) = "Matías"
matriz(24) = "Mirtha"
matriz(25) = "Sandra"
matriz(26) = "Cristian"
matriz(27) = "Alfonso"
matriz(28) = "Konny"
matriz(29) = "Graciela"
matriz(30) = "Carolina"
matriz(31) = "Tiare"
matriz(32) = "Yasna"
matriz(33) = "Miguel"
matriz(34) = "Jorge"
matriz(35) = "Pedro"
matriz(36) = "Patricio"
matriz(37) = "Camilo"
MsgBox "La persona asociada al número es " & matriz(Nros)
End Sub
Lo interesante es que hasta el momento genero un número aleatorio pero no puedo compilar al no poder mezclar el valor generado aleatoriamente con la matriz generada.
Dudas: Esta bien realizado?
Consultas a vosotros: Si logro compilar vinculando la matriz a los números generados, como puedo ir escribiendo los números generados aleatoriamente en un registro (Hoja Registro) y luego ir verificando en ella si ya ha salido anteriormente el número?
Agradezco muchisimo su ayuda y espero que todos se encuentren sanos y vigorosos en estos días dificiles.
Saludos desde Chile.
PS: Adjunto mi archivo.
aleatorio.xlsm