Macro excel cambiar rangos siguiente rango

Hola
Llevo una semana recorriendo páginas del google en busca de una macro que me pueda facilitar las cosas
y hoy por fin encuentro vuestra página
espero que me podáis ayudar
ademas creo que para quien sepa tiene que ser una cosa muy facilita
tengo hecha esta macro :
Como veréis es muy repetitiva pero el cuento es que tengo que hacer estas operaciones diez mil veces
las operaciones son muy fáciles
copio los datos del rango A2:F2 de la hoja2 y los pego en la hoja 3 rango N2:O:2
realiza unas operaciones y el resultado que esta en AQ2:AX2 en la hoja 3 lo copio y lo pego en la hoja2 en los rangos I2:N2
Aquí es donde quedo parado
Después tendría que ver el rango siguiente A3:F3 si la suma no es =0 (osea si tiene algún valor) volver a repetir los pasos así hasta A:65536:F65536 o hasta que aparezcan vacíos los campos del rango
los rangos que varían son los de la hoja2 desde A2:F2 hasta A65536:F65536 y los de la hoja2 I2:N2 hasta I65536:N65536
en la hoja3 no varían siempre se repiten en el mismo rango N2:O2 y AQ2:AX2
espero que me podáis ayudar probare todas las posibles opciones que me facilitéis
Muchas gracias
Sub Macro1()
'
' Macro1 Macro
' Macro grabada por Cabovilano
'
' Acceso directo: CTRL+y
'
Range("A2:F2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja3").Select
Range("N2").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=6
Range("AQ2:AX2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja2").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A3:F3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja3").Select
Range("N2").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=6
Range("AQ2:AX2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja2").Select
Range("I3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A4:F4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja3").Select
Range("N2").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=6
Range("AQ2:AX2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja2").Select
Range("I4").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A5:F5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja3").Select
Range("N2").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=6
Range("AQ2:AX2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Hoja2").Select
Range("I5").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

1 respuesta

Respuesta
1
A ver si te entiendo donde te quedas parado es en conseguir las lineas de código que te comprueben si la suma de los valores que hay en el rango A3:F3 es 0 que salte al siguiente rango A4:F4 vuelva a comprobar si es 0 y así sucesivamente hasta el final de la hoja. Si fuese distinto de 0 (la suma) que copie los datos y los lleve a la hoja3 en el rango correspondiente si era A2:F2 los pega en N2:O2, si era A25:F25 los debe de pegar en N25:O25 dejando las celdas donde la suma es 0 en la hoja3ponga 0.
Osea que tu premisa es que la suma sea 0 o distinto de 0
Mira a ver si es posible que cada celda junto al rango que quieres sumar osea A2:F2 digamos en la celda F3 puedes poner esta fórmula "=SUMA(A2;F2)" para que tengamos el valor de la suma y extiendes esta fórmula a todas las celdas desde F3 hasta F65536. Con esto conseguiríamos tener una referencia para tomar la condición esta " Si F3 es 0 pasa a la linea siguiente, o esta condición "Si F3 es <> 0 copia el rango A2:F2 y lo pegas en N2:O2
Mirateló y me cuentas
Gracias
Algo parecido
Preguntar si la suma de a3:f3 es = 0 se detiene el proceso
si no es 0 toma los datos de ese rango y los lleva a la hoja tres pero al mismo rango siempre N2:O2 (sin importar el rango de la hoja2)
Los datos que recoge de la hoja3 en AQ2:Ax:2 tampoco cambian de fila
y si puedo meter una casilla sumar rangos en h2 (en la hoja2)por ejemplo
Gracias muy rapido en la respuesta
Bueno perdona si me hago algo pesado es que estoy impaciente por resolver el lio en el que me he metido
te explico
tengo unos datos en la hoja2 que se toman por filas cada fila contiene 6 números en 6 columnas que serian por ejemplo el Range("A2:F2") que se podrían sumar en H2
como la lista de datos se amplia pudiendo llegar hasta la ultima fila Range("A65356:F65356") aunque de momento solo voy en la linea 700
lo que necesito es que la macro se entere de en que linea acaban los datos (hoy seria la linea 701) para que no tenga que seguir procesando rangos vacíos
Ejemplo
Si H700=0 ejecuta la macro sino para y al tener datos copiaría los datos de A700:F700
los llevaría a la hoja3 los pegaría en range("N2:O2")
entonces la hoja3 hace operaciones que responde en Range("AQ2:AX2")
La macro copia los datos de la respuesta y los pega en el range("I700:P700") (antes me equivoque y escribí I2:n2 no corresponderían los campos es hasta la columna p)
Ahora comprobaríamos la H701 y como la suma es 0 la macro se detiene
Espero que ahora este algo más claro
Es que soy tan burro en esto que por no saber no se ni explicarme
Perdona y una vez más .. muchísimas gracias
Perdona un rango de 5 columnas A, B, C, DE, E, F no se puede llevar a un rango de solo 2 N, O explicame que dato quieres llevar
Je je
Sigo siendo burro, perdona
son seis columnas abcdef y se llevan a 6 columnas n,o,p,q,r,s
Que torpe soy
Perdona por molestar tanto
Y gracias por tu tiempo
Tienes razón
Más fácil si te cuento lo que estoy haciendo quizás así me puedas ayudar mejor
Estamos haciendo una peña para las primitivas y como somos muchos podemos hacer muchas apuestas
en la hoja2 anotamos la apuesta que queremos hacer por ejemplo:
fila1 columna a=1,col b=2,col c=3,col d=4,col e=5,col f=6
cada fila sera una apuesta de las que hacemos
Por otro lado
En la hoja3 tenemos todos los sorteos desde que se empezó el juego en españa (entre bonoloto, primitiva y el gordo cuando era 6/49)
También ordenados en filas (por fecha del sorteo)
cogemos una fila de la hoja2 (una apuesta con seis columnas)
La llevamos a la hoja3 colocando nuestra apuesta siempre en la mismas casillas N2:S2
la hoja3 hace unas operaciones de comparación con los sorteos que están metidos (6903 hasta el 13/12/2008) y coloca los resultados en las celdas AQ2:AX2 de la hoja3
entonces la macro recoge esa respuesta y pega el valor en la hoja2 al lado de la apuesta seleccionada
osea si la apuesta seleccionada era la de la fila 2 A2:F2 el valor de la respuesta de la hoja3 AQ2:AX2 pasa a la hoja2 I2:P2
después miramos si en la hoja2 hay más apuestas en la fila3 a3:f3
si hay otra apuesta volvemos a copiar los datos y pegarlos en la hoja3 en la misma fila y en las mismas columnas siempre hoja3 Range(N2:S2")
así iremos repitiendo hasta que en la hoja dos ya no queden más filas con apuestas
Vaya trabajo que me ha dado la dichosa macro, te pego el código y te explico por linea de código:
Sub Macro5()
'
' Macro5 Macro
' Macro grabada el 28/12/2008
'
'Dim apuestas As Range
'apuestas = A2
'Seleccionamos la Hoja2
Sheets("Hoja2").Select
'Seleccionamos el Rango de Celdas A2:F2
Range("A2:F2").Select
'Copiamos el Rango seleccionado
Range("A2:F2").Copy
'Vamos a la hoja3 y pegamos lo copiado en el rango N2:S2
Application.Goto _
(ActiveWorkbook.Sheets("Hoja3").Range("N2:S2"))
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'ojo aquí debes meter tu codigo con las operaciones que haga en la hoja3
'Seleccionamos el Rango AQ2:AX2
ActiveSheet.Range("AQ2:AX2").Select
'Copiamos el Rango Seleccionado
Range("AQ2:AX2"). Copy
'Vamos a la Hoja 2 y pegamos lo copiado en la misma linea de la apuesta que habíamos llevado a la Hoja3, la apuesta ocupaba A2:F2 pues la pegamos a continuación(como tu querías) G2:N2
Application.Goto _
(ActiveWorkbook.Sheets("Hoja2").Range("G2:N2"))
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Ponemos como celda activa A2
Range("A2").Select
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
'Lo que querías hacer, a partir de aquí va a realizar siempre lo mismo hasta que encuentre una celda vacía(que no tiene apuesta) y se parará la macro
'Hasta que no encuemtre una fila vacía...
Do While Not IsEmpty(ActiveCell)
'Hasta que no encuentre una fila vacía que baje una fila para abajo

'ActiveCell.Offset(1, 0).Select
'Copia todo el rango de la apuesta (la que sea en cada caso $A:$F)
Range(ActiveCell, ActiveCell.Offset(0, 5)). Copy
'Lo lleva a la Hoja3 y lo pega siempre en el mismo Rango(como tu decías)N2:S2
Application.Goto _
(ActiveWorkbook.Sheets("Hoja3").Range("N2:S2"))
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'aquí tienes que meter el codigo de tus operaciones otra vez
'Sleccionará el resultado de tus operaciones del Rango AQ2:AX2(siempre el mismo)
ActiveSheet.Range("AQ2:AX2").Select
'Copiará lo seleccionado
Range("AQ2:AX2"). Copy
'Pone activa la hoja2
Sheets("Hoja2").Select
'Deja activa la celda primera de esa fila(A2, A3,A4....) la que sea en cada caso
ActiveCell(1, 7).Select
'Selecciona las celdas para pegar tus operaciones de Hoja3 Rango N2:S2
Range(ActiveCell, ActiveCell.Offset(0, 5)).Select
'Pega tus datos que trae copiados de la Hoja3
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Deja activa la primera celda de esa fila (A1,B1,C1....) la que sea en cada caso
ActiveCell.Offset(0, -6).Select
'Salta a la fila siguiente (Si esta estuviese en blanco se dentendría la macro)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Más no puedo hacer, ya me contarás si te sirve, y si algo os toca algún regalito ya me merezco... jajajajaja, la verdad es que si era difícil.
Perfecto Perfecto
Alucinante
Si no hay como saber
jjjjj
Mínimo la cena la tienes ganada
Y dependiendo como vaya la cosa a lo mejor hasta el coche
;)
Ahora solo falta que las bolas sean tan listas como para acertar los números de nuestras apuestas.
Nosotros se lo ponemos más fácil solo tienen que acertar una de nuestras 700 apuestas
ellos si que lo ponen difícil nos hacen acertar una de sus 13.983.816
Que bien montado tienen el negocio jjj
Lo que no sabia era como bajar el rango, como cambiar de linea
Bueno voy a ver en donde se puntúa para valorarte un 10 en perfecto otro 10 en rapido y otro 10 en desinteresado
Posiblemente aun tenga que volver a acudir a ti dependiendo de las estadísticas y las historias que quieren que busque. Espero que no, que solo sea para quedar en lo de la cena y el coche.
Muchas gracias por estar aquí perdiendo tu tiempo con nosotros los burros
muchos saludos
Si que era difícil si
Más de lo que me imaginaba
Pero...
El que sabe sabe
Por desgracia para ti quedas en mi lista de expertos favoritos
Intentare no ser muy pesado
Muchísimas gracias julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas