Excel. Copiar celdas "si" en siguiente fila vacía.
En una hoja de Excel tengo una lista de gastos y quiero que en cada fila de gasto en la última celda si aparece una F me copie la fecha el concepto y el importe en otra lista de otra hoja pero en la primera fila disponible porque también puedo meter gastos directamente, y lo mismo en otra hoja distinta cuando haya una J.
1 Respuesta
H o l a:
Puedes poner una imagen de lo que tienes en tu "hoja de lista de gastos", para ver en qué columnas tienes la información.
Pon otra imagen de la "otra hoja" para ver cómo quieres que queden los datos cuando es "F"
Pon una tercera imagen de la "hoja distinta" para ver cómo quieres que queden los datos cuando es "J".
Procura que en las imágenes se vean los nombres de las 3 hojas, las columnas y las filas de excel.
Si puedes ilustrar en las imágenes con colores qué datos se están pasando de una hoja a otra.
Sal u dos
La idea es que en la hoja 111 iré metiendo por filas datos con fecha, concepto e ingreso 1 ó ingreso 2 ó gasto 1 ó gasto 2. Cuando en la columna F aparezca una "F" tendría que copiar los datos de la fila (fecha, concepto y gasto 1 ó gasto 2) en la hoja "Caja Fran" y cuando haya una "J" lo copiaría en la hoja "Caja Javi" (en color rojo). Cuando no aparezca ni F ni J pués no se copia en ningún lado. Lo que sí sería importante que cuando lo copie en cualquiera de las 2 cajas lo haga en la siguiente fila vacía ya que yó también iré metiendo datos en esas cajas directamente.
Espero haberme explicado, si nó me lo dices por favor.
Muchas gracias de antemano.
Hay algo que no entendí.
En la hoja 111 tienes 2 columnas de ingreso: ingreso1 e ingreso2, si la hoja 111 tiene datos en ambas columnas, entonces en la hoja "CAJA JAVI", ¿en cuál columna las pongo si solamente tienes una?
Para lo que es gasto, supongo que si en la hoja 111, está en gasto1 va a la columna de gasto1 y lo mismo para la columna de gasto2.
E spero tus comentarios.
No, los ingresos no se copiarían, sólo gasto 1 ó gasto 2 en Caja Javi o Caja Fran dependiendo si en columna F hay una "J" o una "F"; si no pongo ni "J" ni "F", no se copia nada.
Respecto a tu segundo comentario es correcto.
H o l a:
Te anexo una macro para copiara las celdas
Sub CopiarCeldas() 'Por.Dante Amor Set h1 = Sheets("111") ' For i = 11 To h1.Range("A" & Rows.Count).End(xlUp).Row Select Case UCase(h1.Cells(i, "F")) Case "F" Set h2 = Sheets("CAJA FRAN") Case "J" Set h2 = Sheets("CAJA JAVI") End Select ' u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 If u < 11 Then u = 11 h2.Cells(u, "A") = h1.Cells(i, "A") h2.Cells(u, "B") = h1.Cells(i, "B") h2.Cells(u, "G") = h1.Cells(i, "I") h2.Cells(u, "H") = h1.Cells(i, "J") Next MsgBox "Celdas copiadas", vbInformation, "COPIAR CELDAS" End Sub
Sigue las Instrucciones para un botón y ejecutar la macro
- Abre tu libro de Excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la macro
- Ahora para crear un botón, puedes hacer lo siguiente:
- Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
- Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
- Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
- Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: CopiarCeldas
- Aceptar.
- Para ejecutarla dale click a la imagen.
Sal u dos
Lo he hecho con el siguiente resultado:
al hacer click en la imagen=
y si doy a depurar=
El botón lo puedo poner en cualquier lugar de cualquier hoja?
Cuando copio la macro en el panel, ¿como cierro el panel, guardando, cerrando y volviendo al libro...?
Cambia la macro por esta:
Sub CopiarCeldas() 'Por.Dante Amor Set h1 = Sheets("111") ' For i = 11 To h1.Range("A" & Rows.Count).End(xlUp).Row salir = False Select Case UCase(h1.Cells(i, "F")) Case "F" Set h2 = Sheets("CAJA FRAN") Case "J" Set h2 = Sheets("CAJA JAVI") Case Else salir = True End Select ' If salir = False Then u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 If u < 11 Then u = 11 h2.Cells(u, "A") = h1.Cells(i, "A") h2.Cells(u, "B") = h1.Cells(i, "B") h2.Cells(u, "G") = h1.Cells(i, "I") h2.Cells(u, "H") = h1.Cells(i, "J") End If Next MsgBox "Celdas copiadas", vbInformation, "COPIAR CELDAS" End Sub
Para regresar a excel presiona nuevamente ALT + F11
Sal u dos
He detectado un problemilla.
Es que cuando le doy al botón me copia las filas que he insertado nuevas pero también me vuelve a copiar todas otra vez, por lo que si le he dado 5 veces al botón tengo 5 copias en la Caja que sea. Lo ideal es que no vuelva a copiar lo ya copiado.
Normalmente este proceso lo realizas manualmente, copias unos registros y los pegas en Fran o en Javi, al otro día tienes que copiar otros registros, cómo sabes tú, ¿cuáles registros ya copiaste y cuáles son los nuevos que tienes que copiar?
Ante todo darte las garcias por tus respuestas.
El problema es que añado una fila de gastos en 111, ejecuto la macro y perfecto, se copia en la caja correspondiente, pero si más tarde añado una nueva fila en 111 y ejecuto la macro me copia la nueva fila añadida y las anteriores nuevamente, y así cada vez que ejecuto la macro, me lo vuelve a copiar todo de nuevo.
No tengo ni idea de Visual B y no se si se podrá pero creo que a la macro habría que incorporarle algo así como:
- que no copie lo ya anteriormente copiado, ó
- que copie sólo la nueva fila añadida, ó
- que no copie las filas superiores a la última añadida, ó algo así.
Espero haberme explicado y gracias nuavamente.
Olvídate de la macro.
No te preocupes de cómo hacerlo en VBA.
Quiero que me expliques cómo lo haces actualmente.
Hice todo lo que me dijistes, creé el botón y le asigné la macro.
Después en hoja 111 añado una fila nueva y click en botón y me lo copia a la caja correspondiente. Pero si meto una nueva fila en ese momento o mas tarde vuelvo a dar click a botón y me la copia pero también vuelve a copiar la anterior otra vez, se me duplica todo cada vez que le doy al botón.
Olvida la macro.
Cómo lo hacías antes de la macro.
Quiero que me expliques cómo identificas cuándo ya copiaste los registros .
Antes de la macro lo hacía manualmente, es decir metía un registro en 111 y si ese registro correspondía a un gasto de F o J me iba a la Caja de F o J y volvía a teclear el registro.
Utiliza la siguiente macro.
Lo que hará la macro es marcar la columna "M" si el registro ya fue copiado, de esa forma identificará cuáles ya se copiaron y cuáles no se han copiado.
Sub CopiarCeldas() 'Por.Dante Amor Set h1 = Sheets("111") ' For i = 11 To h1.Range("A" & Rows.Count).End(xlUp).Row salir = False If h1.Cells(i, "M") = "" Then Select Case UCase(h1.Cells(i, "F")) Case "F" Set h2 = Sheets("CAJA FRAN") Case "J" Set h2 = Sheets("CAJA JAVI") Case Else salir = True End Select ' If salir = False Then u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 If u < 11 Then u = 11 h2.Cells(u, "A") = h1.Cells(i, "A") h2.Cells(u, "B") = h1.Cells(i, "B") h2.Cells(u, "G") = h1.Cells(i, "I") h2.Cells(u, "H") = h1.Cells(i, "J") h1.Cells(i, "M") = "X" End If End If Next MsgBox "Celdas copiadas", vbInformation, "COPIAR CELDAS" End Sub
sal u dos
- Compartir respuesta