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:
Mostrar la cita
#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:
Mostrar la cita
=IF(RANDBETWEEN(1;5)=1;"HX";IF(RANDBETWEEN(1;5)=2;"TF";IF(RANDBETWEEN(1;5)=3
Mostrar la cita
;"JR";IF(RANDBETWEEN(1;5)=4;"UY";IF(RANDBETWEEN(1;5)=5;"WQ";"DR")))))&RANDBE
Mostrar la cita
TWEEN(20;99)&RANDBETWEEN(75;99)&IF(RANDBETWEEN(6;10)=6;"BC";IF(RANDBETWEEN(6
Mostrar la cita
;10)=7;"PY";IF(RANDBETWEEN(6;10)=8;"ZT";IF(RANDBETWEEN(6;10)=9;"HE";IF(RANDB
Mostrar la cita
letras
Mostrar la cita
#3 Fernando Arroyo
25/09/2003 - 09:01 | Informe spam
"Ing. Héctor Montero S." escribió en el mensaje news:%235%
Mostrar la cita
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
Ads by Google
Search Busqueda sugerida