VBA | Si contiene, entonces copiar; de lo contrario, pasar al siguiente.
Resuelto
Kirilov
Mensajes publicados
108
Estado
Miembro
-
Kirilov Mensajes publicados 108 Estado Miembro -
Kirilov Mensajes publicados 108 Estado Miembro -
Hola,
Estoy trabajando en un archivo de Excel que necesito dividir en varias hojas según un criterio.
Me gustaría utilizar una macro que permita decir: Si la celda AD1=2 entonces copiar/pegar la fila 1 en la hoja2 y pasar a la siguiente Y si la celda AD1=3 entonces copiar/pegar la fila 1 en la hoja3, etc.
Todo esto para 4 criterios.
Pero soy un verdadero desastre en VBA y no consigo escribirlo.
Otra dificultad posible, ya que la he encontrado a veces al copiar/pegar: una parte de las celdas contiene texto que a menudo (y a menudo) supera los 255 caracteres y al copiar/pegar se ven truncados.
¡Muchas gracias por tu ayuda!
Atentamente,
Kirilov
Configuración: Windows / Chrome 61.0.3163.100
Estoy trabajando en un archivo de Excel que necesito dividir en varias hojas según un criterio.
Me gustaría utilizar una macro que permita decir: Si la celda AD1=2 entonces copiar/pegar la fila 1 en la hoja2 y pasar a la siguiente Y si la celda AD1=3 entonces copiar/pegar la fila 1 en la hoja3, etc.
Todo esto para 4 criterios.
Pero soy un verdadero desastre en VBA y no consigo escribirlo.
Otra dificultad posible, ya que la he encontrado a veces al copiar/pegar: una parte de las celdas contiene texto que a menudo (y a menudo) supera los 255 caracteres y al copiar/pegar se ven truncados.
¡Muchas gracias por tu ayuda!
Atentamente,
Kirilov
Configuración: Windows / Chrome 61.0.3163.100
Enlaces relacionados:
- Excel si la celda contiene texto entonces...
- si la celda contiene X, Y o Z entonces escribir ...
- si se cumplen varias condiciones, entonces macro; de lo contrario, no hacer nada.
- Fórmula: si una fórmula contiene un número, entonces
- si la playa contiene texto entonces ....
- Si la columna contiene una palabra clave, copiar la fila a la pestaña 2 sin VBA
5 respuestas
-
Hola,
Para el código VBA, es necesario conocer precisamente el contexto, así que si pudieras proporcionarnos un ejemplo de la estructura de los datos, sin elementos personales, con los resultados deseados explicados claramente, sería más fácil ayudarte.
Para comunicar tu libro de trabajo, lo descargas en https://www.cjoint.com/ (instrucciones) y colocas aquí el enlace obtenido.
--
Siempre zen
La perfección se alcanza, no cuando ya no hay nada que añadir, sino cuando no hay nada que quitar. Antoine de Saint-Exupéry -
Hola,
Encontrarás la estructura del archivo aquí: http://www.cjoint.com/c/GJziCkcuipV
Gracias por tu ayuda,
Kirilov -
Hola,
Con esta macro deberías realizar tu copia.Public Sub copiar() Dim lig As Long With Sheets("Matriz") For lig = 2 To .Cells(Rows.Count, "AD").End(xlUp).Row If .Cells(lig, "AD") = 1 Or .Cells(lig, "AD") = 2 Then .Range("A" & lig & ":AN" & lig).Copy _ Destination:=Sheets("VAL_1").Cells(Sheets("VAL_1").Cells(Rows.Count, "A").End(xlUp).Row + 1, 1) End If Next lig End With End Sub
Si la lanzas varias veces, la copia siempre se realizará de forma consecutiva.
--
Siempre zen
La perfección se alcanza, no cuando no hay nada más que agregar, sino cuando no hay nada más que quitar. Antoine de Saint-Exupéry -
Hola Gbinforme,
Acabo de probar y, lamentablemente, no funciona.
La macro solo copia/pega el último registro que contiene en la celda AD el valor 1, a excepción de todos los demás. Al menos, esa es la impresión que me da.
Kirilov-
re
es porque tu columna A está vacía prueba asíPublic Sub copiar() Dim lig As Long With Sheets("Matriz") For lig = 2 To .Cells(Rows.Count, "AD").End(xlUp).Row If .Cells(lig, "AD") = 1 Or .Cells(lig, "AD") = 2 Then .Range("A" & lig & ":AN" & lig).Copy _ Destination:=Sheets("VAL_1").Cells(Sheets("VAL_1").Cells(Rows.Count, "AD").End(xlUp).Row + 1, 1) End If Next lig End With End Sub
-
-
MUCHAS GRACIAS.
¡Funciona a la perfección y me va a hacer ahorrar un montón de tiempo!
Atentamente,
Kirilov