Excel - Funcion Aleatoria

 
Vista:

Funcion Aleatoria

Publicado por Seiryu (1 intervención) el 03/12/2013 21:49:47
Buenas tardes, tengo esta macro, que me escribe en la hoja 4 , el nombre de una lista de contactos, hasta ahí, sin problema, el caso es que me interesaría que me los escribiera de forma aleatoria sin repetir.

Tengo entendido que la función Randomize es la adecuada para esto, pero no sé como hacerlo..si por ejemplo quiero que los nombres me los liste de 1 a 20, hago así:

Randomize
R = ((20 - 1 + 1) * Rnd + 1)

Pero no sé como hacer para que esas 20 aleatoriedades las asigne a mi lista y vaya cambiándolas de manera aleatoria, es para realizar torneos, y por eso me interesa realizarlo de esta manera para que no se repitan..

Esta es la macro:

Sub Nombres()
Lin = 6
While Worksheets("Hoja3").Cells(Lin, 2) <> ""
X = Worksheets("Hoja3").Cells(Lin, 2)
XX = Worksheets("Hoja3").Cells(Lin, 3)
XXX = Worksheets("Hoja3").Cells(Lin, 4)
Nombre = X & " " & Left(XX, 1) & " " & Left(XXX, 1)
Worksheets("Hoja4").Cells(Lin, 1) = Nombre
Lin = Lin + 1
Wend
End Sub

Tal cual la macro lo que me hace es escribir de manera ordenada las 20 personas, en la hoja 4.

Y digamos que lo que quiero para simplificar, es que me coja la variable Nombre, y me la escriba de manera aleatoria entre (1-20) en mi hoja 4.

Quiero hacerlo a través de VBA con macros..

Gracias

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

Funcion Aleatoria

Publicado por JuanC (1237 intervenciones) el 04/12/2013 00:36:17
un pequeño ejemplo con 5 valores...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
'//By JuanC - Dic. 2013
 
Option Explicit
Option Base 1
 
Const COUNT = 5
 
Sub sasa()
Dim n%, i%, j%
Dim vNombres(COUNT) As String
 
vNombres(1) = "a"
vNombres(2) = "b"
vNombres(3) = "c"
vNombres(4) = "d"
vNombres(5) = "e"
 
Randomize
 
i = 0
For j = 1 To COUNT
    n = Int(((COUNT - i) * Rnd) + 1)
    Cells(i + 1, 1).Value = vNombres(n)
    vNombres(n) = vNombres(COUNT - i)
    i = i + 1
Next j
 
End Sub


Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Cacho
Val: 81
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Funcion Aleatoria

Publicado por Cacho (66 intervenciones) el 04/12/2013 03:47:27
Hola! Seiryu (y Juan C)
Esta variante se basa en lo que imagino (por el código que has mostrado) es tu estructura de datos, a partir de la celda B6 de la hoja Hoja3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Nombres_3()
Dim Q&, R&, S&, i&, j&, mTxt$, mColl As New Collection
 
R = 6: S = 6
Q = Worksheets("Hoja3").Cells(R, "b").End(xlDown).Row - (R - 1)
For i = 1 To Q
  mColl.Add R + i - 1, CStr(i)
Next
 
Do While Q > 0
  j = WorksheetFunction.RandBetween(1, Q)
  With Worksheets("Hoja3")
    mTxt = .Cells(mColl(j), "b") & " " & _
      Left(.Cells(mColl(j), "c"), 1) & " " & _
      Left(.Cells(mColl(j), "d"), 1)
  End With
  Worksheets("Hoja4").Cells(S, "a") = mTxt
  mColl.Remove j: S = 1 + S: Q = Q - 1
Loop
End Sub

Saludos, Cacho R.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar