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

Hola de nuevo.

Puede que no me haya explcado bien y por eso no me entiendes. Intentaré hacerlo mejor y con más detalles ahora.

El fondo de la cuestión es que yo quiero conseguir valores aleatorios comprendidos entre dos números. Para eso utilizo la función aleatorio. Pero hay un problema y es que la función aleatorio o aleatorio.entre arroja valores repetidos. Yo no quiero que se repitan los valores. Por esto, en la columna G tengo las siguiente fórmulas (en el rango G5:G15):

Para las 3 primeras filas (copiando y arrastrando la primera hasta G7) quiero números aleatorios entre 1 y 40:
=SI(SUMA($H$5:$H$15)<>11&SUMA($L$5:$L$15)>6500000& SUMA(I5:I15)>2;REDONDEAR(ALEATORIO()*(40-1)+1;0);REDONDEAR(ALEATORIO()*(40-1)+1;0))

Para las 4 siguientes filas (copiando y arrastrando la primera hasta G11) quiero números aleatorios entre 41y 106:
=SI(SUMA($H$5:$H$15)<>11&SUMA($L$5:$L$15)>6500000& SUMA(I5:I15)>2;REDONDEAR(ALEATORIO()*(106-41)+41;0);REDONDEAR(ALEATORIO()*(106-41)+41;0))

Para las 4 siguientes filas (copiando y arrastrando la primera hasta G15) quiero números aleatorios entre 107 y 182:
=SI(SUMA($H$5:$H$15)<>11&SUMA($L$5:$L$15)>6500000& SUMA(I5:I15)>2;REDONDEAR(ALEATORIO()*(182-107)+107;0);REDONDEAR(ALEATORIO()*(181-107)+107;0))

Luego, en la columna H tengo un Control cuya fórmula es:

=CONTAR.SI($G$5:$G$15;G5) (Y arrastramos hasta H15)

Éste mostrará todo 1 si no hay valores repetidos y 2 cuando los haya.

En la columna I tengo el identificador de los números aleatorios obtenidos en forma de nombres (esto como digo más abajo lo he desplazado hacia la columna K al realizar otras pruebas incluyendo condiciones). Es decir, en la columna G se generan los valores aleatorios y en I es donde los valores se convierten en nombres mediante un buscarv.

El procedimiento es generar 11 valores aleatorios pulso F9, copiar el resultado si no han repetidos y pegarlo en otra hoja. Y así cada vez que quiero otros 11 resultados. Entonces, lo que quiero hacer es una macro mediante la cual no tenga que estar todo el rato pulsando F9 para generar otros 11 valores, copiando esos valores y pegándolos en otra hoja. Quiero hacer todo eso automáticamente y el número de veces que yo elija. De modo que en otra hoja tendré bloques de 11 filas (que son los valores generados en cada tanda) unos junto a los otros sin pisarse.

El código que yo estaba utilizando era este:

Código:
Sub Creador()
'
' Creador Macro
'
' Acceso directo: CTRL+j
'
    Dim i As Integer
    Calculate
    Range("K5:K15").Select
    For i = 1 To 10
    If Sheets("Creador").Cells(19, 12) = "BIEN" And Sheets("Creador").Cells(17, 12) > 6000000 Then

    Selection.Copy
    Sheets("Rol").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
    ActiveCell.Offset(0, 1).Select
    
    Calculate
    Range("K5:K15").Select
    Next i
    
End Sub
He desplazado los resultados de I hacia K y en esas dos columnas he introducido otras fórmulas que me sirven luego para establecer condiciones como uedes ver en el bucle if.

Con este código, a veces, se encuentran 11 resultados que cumplen las condiciones y se pegan en la hoja "Rol" en el rango A1:A11. Me gustaría que se pudieran ir pegando sucesivamente, por ejemplo, en A1:A11, 11 resultados, luego en B1:B11 otros 11 rresultados, así hasta la columna J. Después volvemos a la columna A. Debajo de los 11 anteriores pegamos otros 11, es decir, en A12:22. Otros 11 en B12:B22, otros 11 en C12:C22 y así hasta la columna J otra vez. Es decir, cada 2 tandas de filas de 11 serían 20 simulaciones. La cosa sería hacer como 100 o así por lo que el rango total sería A1:J110. Y habría 100 simulaciones de 11 cada una.

No se si ahora ha quedado algo más claro lo que quiero hacer.

Un saludo.