Ver Mensaje Individual
  #9 (permalink)  
Antiguo 20/09/2008, 06:04
STDSTC
 
Fecha de Ingreso: octubre-2007
Mensajes: 22
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Excel: Pegar datos con bucle

Gracias por el archivo. Creo que es de más utilidad que lo que tenía antes. Me ha parecido muy curiosa la forma de obtener los números aleatorios sin repetición.

Ya he conseguido que me cree todas las simulaciones de 11 que quiera, eso si poniendo el rango a mano en el array, en este caso de la columna A1 hasta J1 (¿no hay forma de evitar tener que ponerlos todos a mano, algo del tipo A1:J1?)

Código:
Public Sub Genera_11_Numeros()
  Application.Calculate
  Rangos = Array("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1")
  For i = 0 To 9
With Sheets("Generador")
  For ii = 0 To 6 Step 3
    .[A1].Offset(0, ii).CurrentRegion.Sort Key1:=.[B1].Offset(0, ii)
  Next ii
End With
Range("L1:L11").Copy
Sheets("Resultados").Range(Rangos(i)).PasteSpecial Paste:=xlPasteValues
Next i
End Sub
Y otra cosa importante, cuando obtengo las simulaciones de 11 en las X columnas que he definido en el primer bucle for algunas de ellas no son válidas por que no cumplen la condición que quiero mantener que es esta:

Código:
If Sheets("Generador").Cells(15, 13) = "BIEN" And Sheets("Generador").Cells(13, 13) > 6000000 Then

.
Yo esa condición la incluyo al final
Código:
Public Sub Genera_11_Numeros()
  Application.Calculate
  Rangos = Array("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1")
  For i = 0 To 9
With Sheets("Generador")
  For ii = 0 To 6 Step 3
    .[A1].Offset(0, ii).CurrentRegion.Sort Key1:=.[B1].Offset(0, ii)
  Next ii
End With
  If Sheets("Generador").Cells(15, 13) = "BIEN" And Sheets("Generador").Cells(13, 13) > 6000000 Then
Range("L1:L11").Copy
Sheets("Resultados").Range(Rangos(i)).PasteSpecial Paste:=xlPasteValues
  End If
Next i
End Sub
Pero claro, esto hace que en la primera corrida de la simulación, si no se cumple la condición, la columna A1 quede vacía, si no se cumple en la segunda corrida, la columna B2 también queda vacía y así hasta la columna J. Es decir, sólo se rellena cuando se cumple la condición, por lo que casi siempre que pulso el botón van a quedar columnas vacías de las 10 que he definido (de la A a la J).

¿Cómo puedo introducir esa condición en el código de modo que cuando no se cumpla, no deje la columna vacía y pase a la siguiente, sino que continue en esa columna hasta que halle unos valores que cumplan la condición y cuando los halle siga hasta terminar de rellenar las columnas definidas, en este caso hasta la columna J?

Todo esto es para no tener que ir seleccionando los resultados que han salido correctos de los que no y que salgan todos correctos.

Un saludo.