Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Crear Array con Strings y que devuelva uno de los valores en random

Estas en el tema de Crear Array con Strings y que devuelva uno de los valores en random en el foro de Visual Basic clásico en Foros del Web. Buenos dias gente, Estoy aprendiendo un poco de vb y aun me falta algun empujoncito más con algun temario, haber si vosotros podeis decirme como ...
  #1 (permalink)  
Antiguo 29/11/2011, 03:25
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Pregunta Crear Array con Strings y que devuelva uno de los valores en random

Buenos dias gente,

Estoy aprendiendo un poco de vb y aun me falta algun empujoncito más con algun temario, haber si vosotros podeis decirme como perfeccionar.

Resulta que estoy intentando crear un array con valores random. Concretamente quiero crear un array de 7 espacios con un string en cada una (en mi caso poner las horas) y que me devuelva una de las horas.

Código vb:
Ver original
  1. Dim lista(6) As String
  2.    
  3.         lista(0) = "8:00"
  4.         lista(1) = "8:20"
  5.         lista(2) = "8.40"
  6.         lista(3) = "9:00"
  7.         lista(4) = "9:20"
  8.         lista(5) = "9:40"
  9.         lista(6) = "10:00"

Como aún desconozco como funciona de momento solo he planteado esto...cómo seguiria el código?

Ex: Si saliera que lista=3 me tendria que imprimir por pantalla, ya sea con MsgBox o en la tabla del excel, la hora 9:00.

Grácias por vuestro tiempo :)

Saludos.
  #2 (permalink)  
Antiguo 29/11/2011, 09:47
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Hola, revisa el siguiente enlace de Recursos Visual Basic que va a despejar todas tus dudas respecto a Numeros Aleatorios

Un saludo
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 30/11/2011, 04:51
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Buenas erbuson!

Tenia la esperanza que encontrarias mi mensaje jejeje xD.

La cosa es que generar un número aleatorio ya lo se hacer (a mi manera, pero funciona jejeje). El problema que tengo es que no se como a partir del numero aleatorio que obtenga, que instrucción tengo que escribir para decirle: Si sale 3 dame 9:00.

No sé si me he explicado con claridad.

Saludos :)
  #4 (permalink)  
Antiguo 30/11/2011, 07:49
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Si entiendo lo que preguntas, estás encallado en lo mas facil:

NumeroAleatorio = Random ..... Tal como lo calcules

despues

Msgbox Lista(NumeroAleatorio)

Si no te he entendido bien, corrígeme
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 05/12/2011, 16:21
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Buenas erbuson,

He echo lo siguiente, haber que te parece:

Código vb:
Ver original
  1. Dim A(0 To 6) As String
  2. Dim R As Long
  3. A(0) = "8.00"
  4. A(1) = "8.20"
  5. A(2) = "8.40"
  6. A(3) = "9.00"
  7. A(4) = "9.20"
  8. A(5) = "9.40"
  9. A(6) = "10.00"
  10. R = Randomize(A)
  11.  
  12. Range("K2").Value = R

No me funciona esta claro jejeje, que me falla? Simplemente quiero que me de uno de estos arrays aleatoriamente.

Se te ocurre alguna manera sencilla?

Grácias.
  #6 (permalink)  
Antiguo 05/12/2011, 17:18
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Se me ocurre, que lo mejor es que te explique como va lo de los número aleatorios porque veo que no lo tienes nada claro.

La funcion Rnd(1) devuelve el siguiente numero en una secuencia aleatoria
La funcion Randomize lo que hace es inicializar esta secuencia por loq eu no devuelve ningun resultado.

Rnd(1) te devuelve un numero decimal siempre menor de 1.

Para consegur un numero aleatorio entre 0 y 6 debe multiplicarse el valor aleatorio por 7 y tomar el entero ya que la parte entera al ser el multiplicador menor de 1 siempre estará entre 0 y 6

Esta es la solución a tu problema:

Código vb:
Ver original
  1. Dim A(0 To 6) As String
  2.   Dim R As Long
  3.   A(0) = "8.00"
  4.   A(1) = "8.20"
  5.   A(2) = "8.40"
  6.   A(3) = "9.00"
  7.   A(4) = "9.20"
  8.   A(5) = "9.40"
  9.   A(6) = "10.00"
  10.   Randomize  'Inicializa el generador de semillas aleatorias
  11.  R = Int(Rnd(1) * 7)
  12.  
  13.   Range("K2").Value = A(R)    'R será el índice de la matriz

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #7 (permalink)  
Antiguo 06/12/2011, 12:10
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Genial! Ya lo he entendido todo!!

Vaya fallo más tonto el mio pero bueno...jejeje, disculpa mi ignorancia de novato :S.

Voy a seguir practicando.

Muchas grácias otra vez erbuson!

Saludos
  #8 (permalink)  
Antiguo 06/12/2011, 14:36
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

De nada, encantado de ayudar en algo, mientras no sea en Bases de Datos que por razones personales ya lo doy por imposible, en lo demás aqui me tienes.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #9 (permalink)  
Antiguo 09/12/2011, 05:14
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Ahora que lo pienso, si quisiera hacer lo mismo pero leyendo los strings des de las casillas del excel, como se haria? O sea el mismo ejemplo pero de esta manera (para no sobrecargar tanto el programa)??

Saludos!
  #10 (permalink)  
Antiguo 09/12/2011, 10:31
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Hola, hay muchas maneras de hacerlo, la mas simple para que lo entiendas facilmente sería por ejemplo esta:

Código vb:
Ver original
  1. Public Sub DameHora()
  2.  
  3.   Dim A(0 To 6) As String
  4.   Dim R As Long
  5.   A(0) = Range("A1").Value
  6.   A(1) = Range("A2").Value
  7.   A(2) = Range("A3").Value
  8.   A(3) = Range("A4").Value
  9.   A(4) = Range("A5").Value
  10.   A(5) = Range("A6").Value
  11.   A(6) = Range("A7").Value
  12.   Randomize  'Inicializa el generador de semillas aleatorias
  13.  R = Int(Rnd(1) * 7)
  14.  
  15.   Range("K2").Value = A(R)    'R será el índice de la matriz
  16.  
  17. End Sub

Para hacerlo de una manera mas elegante, sería en un bucle For Next

Código vb:
Ver original
  1. Public Sub DameHora()
  2.  
  3.   Dim A(0 To 6) As String
  4.   Dim R As Long, I as Integer
  5.   For I = 0 To 6
  6.     A(I) = Range("A" & Cstr$(I+1)).Value
  7.   Next
  8.   Randomize  'Inicializa el generador de semillas aleatorias
  9.  R = Int(Rnd(1) * 7)
  10.  
  11.   Range("K2").Value = A(R)    'R será el índice de la matriz
  12.  
  13. End Sub

Como puedes ver, el bucle va de 0 a 6 que son los indices de A pero I toma los valores de 1 a 7 (I+1) porque son uno mas en la hoja.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #11 (permalink)  
Antiguo 09/12/2011, 16:49
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Si si lo veo lo veo. Vaya, genial erbuson!

Que sepas que he aprendido más contigo con varios post que con 7 u 8 clases en la universidad.

Muchas grácias otra vez.

Hasta pronto! Un abrazo.
  #12 (permalink)  
Antiguo 10/12/2011, 04:40
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Por cierto, como podria crear un contador de tiempo de 1 minuto? Como seria una versión sencilla?

Saludos!
  #13 (permalink)  
Antiguo 10/12/2011, 04:46
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

O sea, uno ultra sencillo que simplemente cuando apretara el boton se iniciara un contador y cuando llegara a 0 que parara lo que se esta haciendo actualmente. :S
  #14 (permalink)  
Antiguo 10/12/2011, 07:59
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Hola, como pienso que te refieres a hacerlo desde Excel y en VBA, se me ocurre lo siguiente para hacerlo simplemente por código

Código vb:
Ver original
  1. Public Sub Cronometro()
  2.   Dim HoraLimite As Date
  3.   HoraLimite = DateAdd("s", 60, Now)    ' Ahora + 60 segundos
  4.  Do
  5.   Loop While HoraLimite > Now           'Mientras Ahora sea menor que HoraLimite
  6. End Sub

Supongo que habrá otras maneras, ya se sabe que cada maestrillo tiene su librillo, pero así al vuelo se me ha ocurrido esta.

De todos modos, en realidad esto es una pausa de 60 segundos, ya que al estar en un bucle no efectua nada mas durante el proceso de éste.

Si el programa debe estar haciendo algo durante un minuto, debería buscarse otro modo de hacerlo, dependiendo de lo que haga el programa.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Última edición por erbuson; 10/12/2011 a las 14:31
  #15 (permalink)  
Antiguo 10/12/2011, 14:45
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Aqui te dejo una variante que podría utilizarse llámándolo de otro procedimiento para saber si debe terminarse el proceso.

Código vb:
Ver original
  1. Public Function Crono(Optional Segundos As Integer) As Boolean
  2.   ' Funcion cronómetro que se utiliza de dos maneras.
  3.  ' Crono 60  'Inicia el Cronometro para una duracion del 60 segundos
  4.  ' Crono     'Devuelve Verdadero si ha llegado al limite de tiempo
  5.  Static HoraLimite As Date
  6.   If Segundos > 0 Then
  7.     HoraLimite = DateAdd("s", Segundos, Now)    ' Ahora + Segundos
  8.  Else
  9.     If Now >= HoraLimite Then Crono = True
  10.   End If
  11. End Function
  12.  
  13. Public Sub PruebaCronometro()
  14.   Crono 15   'Inicia el cronómetro durante 15 segundos
  15.  Do
  16.     ' En este bucle se efectuaría el proceso deseado
  17.    ' comprobando si el crono ha llegado al limite para salir del bucle
  18.    If Crono Then Exit Do
  19.   Loop
  20. End Sub

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #16 (permalink)  
Antiguo 11/12/2011, 05:19
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Genial!

Y si quisiera hacer la gracia de que se viera como se va reduciendo el contador de 60 segundos a 0, cómo lo haria?

Es que he probado tus codigos y se me bloquea el excel hasta que pasan los 60segundos jajajaja, sera el bucle while?

Saludos! :D
  #17 (permalink)  
Antiguo 11/12/2011, 06:54
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

Hola, aunque no es perfecto, es la idea, así mas o menos funciona,

Código vb:
Ver original
  1. Public Function CronoCero(Optional Segundos As Integer) As String
  2.   ' Si se le indica Segundos, activa el contador
  3.  ' Siempre Devuelve los segundos que faltan
  4.  Static HoraLimite As Date
  5.   If Segundos > 0 Then HoraLimite = DateAdd("s", Segundos, Now)    ' Ahora + Segundos
  6.  CronoCero = Format(HoraLimite - Now, "SS")
  7. End Function
  8.  
  9. Public Sub PruebaCronometro()
  10.   CronoCero 30   'Inicia el cronómetro durante 30 segundos
  11.  Do
  12.     ' En este bucle se efectuaría el proceso deseado
  13.    ' comprobando si el crono ha llegado al limite para salir del bucle
  14.    Range("A1") = CronoCero
  15.     If Val(CronoCero) = 0 Then Exit Do
  16.   Loop
  17.   Range("A1") = ""
  18. End Sub

Te comento que generalmente para esto se utilizaría un formulario con un Timer, pero he intentado solucionarlo así porque por lo que intuyo de momento estás utilizando sólo código.

En cuanto a lo del bloqueo, evidentemente es por el Bucle, por eso te había comentado que este 'crono' debe de ser llamado desde dentro del proceso que estás ejecutando.

Dependiendo de las necesidades, sería la manera de llamarlo. Ten presente que el Do/Loop bloque el sistema mientras no salgas del mismo con alguna instruccion adecuada.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #18 (permalink)  
Antiguo 15/12/2011, 06:58
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Crear Array con Strings y que devuelva uno de los valores en random

erbuson!

He creado un tema nuevo sobre visual basic, haber como lo ves jejeje.

El titulo es: Problemas cogiendo variables con un programa de un concurso.

Saludos y muchas gracias por todo!

Etiquetas: random, strings, tabla, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:01.