Macro para generar aleatorios

23/09/2003 - 21:32 por Ing. Héctor Montero S. | Informe spam
Hice un archivo en Excel con la siguiente función
=IF(RANDBETWEEN(1;5)=1;"HX";IF(RANDBETWEEN(1;5)=2;"TF";IF(RANDBETWEEN(1;5)=3
;"JR";IF(RANDBETWEEN(1;5)=4;"UY";IF(RANDBETWEEN(1;5)=5;"WQ";"DR")))))&RANDBE
TWEEN(20;99)&RANDBETWEEN(75;99)&IF(RANDBETWEEN(6;10)=6;"BC";IF(RANDBETWEEN(6
;10)=7;"PY";IF(RANDBETWEEN(6;10)=8;"ZT";IF(RANDBETWEEN(6;10)=9;"HE";IF(RANDB
ETWEEN(6;10);"LW";"MS")))))&RANDBETWEEN(100;999)&RANDBETWEEN(10;99)
TF7982BC42931

El objetivo es generar valores alfanumericos, sin embargo existen muchas
limitaciones y la mayor es quiz[as que se necesita generar 21000 celdas
random, por lo que el archivo queda de unos 12MB.

Quisiera saber si se puede generar un código que me llene desde A2 Hasta
21001 un código alfanumérico de forma que sean 2 letras, 3 numeros, 2 letras
4 numeros, en forma aleatoria, EJEMPLO: TF7982BC42931.

Y que cada vez que se necesite genere el random y vuelva a generar números
aleatorios en el mismo lugar, y que adicionalmente todo quede ordenado en
forma ascendente.
Gracias a todos y todas por la colaboración tan valiosa que prestan.
HMS

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
23/09/2003 - 22:12 | Informe spam
Prueba con:

Sub GenerarAleatorios()
Dim lngFila As Long
Dim strC As String

lngFila = 3

While lngFila <= 21001
strC = Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Right("000" & Int((999 - 0 + 1) * Rnd + 0), 3)
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Right("0000" & Int((999 - 0 + 1) * Rnd + 0), 4)

Worksheets("Hoja1").Cells(lngFila, 1) = strC

strC = ""
lngFila = lngFila + 1
Wend
End Sub

Tarda unos 6 segundos en un P4 a 2 Gh., y el libro "pesa" aproximadamente 1,1 Mbs.
Un saludo


Fernando Arroyo
MS MVP - Excel

PS: He supuesto que no quieres que aparezca la ñ...

"Ing. Héctor Montero S." escribió en el mensaje news:
Hice un archivo en Excel con la siguiente función
=IF(RANDBETWEEN(1;5)=1;"HX";IF(RANDBETWEEN(1;5)=2;"TF";IF(RANDBETWEEN(1;5)=3
;"JR";IF(RANDBETWEEN(1;5)=4;"UY";IF(RANDBETWEEN(1;5)=5;"WQ";"DR")))))&RANDBE
TWEEN(20;99)&RANDBETWEEN(75;99)&IF(RANDBETWEEN(6;10)=6;"BC";IF(RANDBETWEEN(6
;10)=7;"PY";IF(RANDBETWEEN(6;10)=8;"ZT";IF(RANDBETWEEN(6;10)=9;"HE";IF(RANDB
ETWEEN(6;10);"LW";"MS")))))&RANDBETWEEN(100;999)&RANDBETWEEN(10;99)
TF7982BC42931

El objetivo es generar valores alfanumericos, sin embargo existen muchas
limitaciones y la mayor es quiz[as que se necesita generar 21000 celdas
random, por lo que el archivo queda de unos 12MB.

Quisiera saber si se puede generar un código que me llene desde A2 Hasta
21001 un código alfanumérico de forma que sean 2 letras, 3 numeros, 2 letras
4 numeros, en forma aleatoria, EJEMPLO: TF7982BC42931.

Y que cada vez que se necesite genere el random y vuelva a generar números
aleatorios en el mismo lugar, y que adicionalmente todo quede ordenado en
forma ascendente.
Gracias a todos y todas por la colaboración tan valiosa que prestan.
HMS




Respuesta Responder a este mensaje
#2 Ing. Héctor Montero S.
24/09/2003 - 01:22 | Informe spam
Pregunta
Copio tu ccódigo en la hoja con VIEW CODE, Botón derecho pegar?
Disculpa mi ignorancia en el tema
Gracias

"Fernando Arroyo" wrote in message
news:
Prueba con:

Sub GenerarAleatorios()
Dim lngFila As Long
Dim strC As String

lngFila = 3

While lngFila <= 21001
strC = Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Right("000" & Int((999 - 0 + 1) * Rnd + 0), 3)
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Chr(Int((90 - 65 + 1) * Rnd + 65))
strC = strC & Right("0000" & Int((999 - 0 + 1) * Rnd + 0), 4)

Worksheets("Hoja1").Cells(lngFila, 1) = strC

strC = ""
lngFila = lngFila + 1
Wend
End Sub

Tarda unos 6 segundos en un P4 a 2 Gh., y el libro "pesa" aproximadamente
1,1 Mbs.
Un saludo


Fernando Arroyo
MS MVP - Excel

PS: He supuesto que no quieres que aparezca la ñ...

"Ing. Héctor Montero S." escribió en el mensaje
news:
Hice un archivo en Excel con la siguiente función



=IF(RANDBETWEEN(1;5)=1;"HX";IF(RANDBETWEEN(1;5)=2;"TF";IF(RANDBETWEEN(1;5)=3



;"JR";IF(RANDBETWEEN(1;5)=4;"UY";IF(RANDBETWEEN(1;5)=5;"WQ";"DR")))))&RANDBE



TWEEN(20;99)&RANDBETWEEN(75;99)&IF(RANDBETWEEN(6;10)=6;"BC";IF(RANDBETWEEN(6



;10)=7;"PY";IF(RANDBETWEEN(6;10)=8;"ZT";IF(RANDBETWEEN(6;10)=9;"HE";IF(RANDB
ETWEEN(6;10);"LW";"MS")))))&RANDBETWEEN(100;999)&RANDBETWEEN(10;99)
TF7982BC42931

El objetivo es generar valores alfanumericos, sin embargo existen muchas
limitaciones y la mayor es quiz[as que se necesita generar 21000 celdas
random, por lo que el archivo queda de unos 12MB.

Quisiera saber si se puede generar un código que me llene desde A2 Hasta
21001 un código alfanumérico de forma que sean 2 letras, 3 numeros, 2


letras
4 numeros, en forma aleatoria, EJEMPLO: TF7982BC42931.

Y que cada vez que se necesite genere el random y vuelva a generar números
aleatorios en el mismo lugar, y que adicionalmente todo quede ordenado en
forma ascendente.
Gracias a todos y todas por la colaboración tan valiosa que prestan.
HMS




Respuesta Responder a este mensaje
#3 Fernando Arroyo
25/09/2003 - 09:01 | Informe spam
"Ing. Héctor Montero S." escribió en el mensaje news:%235%
Gracias mi hemano!!!!
Funciona perfecto
HMS




Me temo que tengo que rectificarte: al revisar el código he comprobado que no funciona perfecto, sino casi perfecto. Si te fijas, el 4º dígito por la derecha siempre es un cero, en todas las celdas. Esto es debido a que "me comí" un 9 en la línea

strC = strC & Right("0000" & Int((999 - 0 + 1) * Rnd + 0), 4)

la cual debería ser

strC = strC & Right("0000" & Int((9999 - 0 + 1) * Rnd + 0), 4)

Un saludo.


Fernando Arroyo
MS MVP - Excel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida