VBA | Si contiene, entonces copiar; de lo contrario, pasar al siguiente.

Resuelto
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

5 respuestas

  1. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    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
    0
  2. Kirilov Mensajes publicados 108 Estado Miembro 1
     
    Hola,

    Encontrarás la estructura del archivo aquí: http://www.cjoint.com/c/GJziCkcuipV

    Gracias por tu ayuda,

    Kirilov
    0
  3. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    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
    0
  4. Kirilov Mensajes publicados 108 Estado Miembro 1
     
    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
    0
    1. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
       
      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
      0
  5. Kirilov Mensajes publicados 108 Estado Miembro 1
     
    MUCHAS GRACIAS.
    ¡Funciona a la perfección y me va a hacer ahorrar un montón de tiempo!

    Atentamente,

    Kirilov
    0