Identificar una fila en Excel cumpliendo dos condiciones

Tengo una lista de verificación en la que he de generar un informe por capítulos según las desviaciones (grado B, grado C y grado D) encontradas. Si las columnas D y E están en blanco, se considera que las filas que lo cumplen tienen una desviación de cualquiera de los tres grados antes mencionados (sólo una por fila).

Quisiera saber si hay alguna forma de generar en otra hoja la salida de los datos según estas columnas y en orden (entre paréntesis las columnas correspondientes a la hoja de origen de datos):

Nº orden (el que se genere correlativo) / Nº requisito (columna B) / Requisito IFS (columna C) / Evaluación (columnas D a H) / Explicación (columna I).

Adjunto imágenes de la hoja origen y de la que quiero conseguir.

2 respuestas

Respuesta
1

Desafortunadamente el ejemplo de tu segunda imagen está vacía, entonces me quedan las siguiente dudas:

1. Si la fila tiene vacía las columnas D y E, ¿copio los datos a la segunda hoja?

2. Qué pasa con la fila 9, por ejemplo, también tiene vacías las columnas D y E, ¿también copio esta fila? O sería más preciso verificar las columnas F, G y H, si alguna de estas 3 tiene una "X", ¿entonces qué copie la fila?

3. Podrías poner un ejemplo de una fila que se va a copiar y cómo quedaría la columna destino de "Evaluación", es decir, comentas que en la columna destino de "Evaluación" van las columnas D a H, pero cómo las pongo, concatenada con espacio o con comas, mejor muéstrame un ejemplo.

Envíame tus comentarios en ese orden.

Buenos días, Dante.

Ante todo, gracias por contestar.

Te respondo por orden.

1. Si la fila tiene vacía las columnas D y E, ¿copio los datos a la segunda hoja?

Las filas cuyas columnas: D, E, F, G, H e I están vacías no se copian, puesto que estas filas son los epígrafes de los grupos de requisitos.

2. Qué pasa con la fila 9, por ejemplo, también tiene vacías las columnas D y E, ¿también copio esta fila? 

La fila 9 forma parte del tipo de filas que te he comentado en la anterior pregunta. 

O sería más preciso verificar las columnas F, G y H, si alguna de estas 3 tiene una "X", ¿entonces qué copie la fila?

Correcto. Tendría que copiar la fila en la que apareciese una "X" en cualquiera de esas 3 columnas. Aunque no se si sería más fácil agrupar todas las opciones en una misma columna (Evaluación, p.e.) y agregar un listado desplegable con validación de datos en los que las opciones fuesen (NA, M, KO, A, B, C, D). No se si hacerlo así facilitaría la tarea de copiar las filas

3. Podrías poner un ejemplo de una fila que se va a copiar y cómo quedaría la columna destino de "Evaluación", es decir, comentas que en la columna destino de "Evaluación" van las columnas D a H, pero cómo las pongo, concatenada con espacio o con comas, mejor muéstrame un ejemplo.

Te adjunto un ejemplo de origen y salida.

Por otro lado, también quisiera que se copiasen las filas cuya columna D estuviesen puntuadas como NA (te adjunto otro ejemplo con nombres de archivos: origenNA y salidaNA)

Muchas gracias y un cordial saludo.

Nacho C.

Me parece mejor opción poner en la columna D todas las evaluaciones, de esa forma puedes filtrar en una sola columna la evaluación que necesites. También es más práctico en una sola columna, ya que puedes crear una tabla dinámica y obtener estadísticas de una sola columna.

Te anexo la macro, cambia "Hoja1" y "Hoja2" por los nombres de tus hojas.

La macro revisa la columna D, si la columna es diferente de vacío, entonces copia la fila a otra hoja. Por ejemplo:

En el ejemplo la macro copiaría las filas 2 y 3.

El resultado sería este:


Sub Identificar_Evaluaciones()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")        'origen
    Set h2 = Sheets("Hoja2")        'destino
    '
    h2.Rows("2:" & Rows.Count).Clear
    j = 2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "D") <> "" Then
            h1.Rows(i).Copy h2.Rows(j)
            h2.Cells(j, "A") = j - 1
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. 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”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Identificar_Evaluaciones
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Buenos días, Dante.

He modificado a la columna D todas las posibles opciones de evaluación de los requisitos. Al hacer esto las condiciones de salida cambian, ya que solo ha de generarse el informe si:

OPCIÓN 1: la columna D es = a KO, M, B, C o D a una hoja de salida (a partir de la fila 55, incluida)

OPCIÓN 2: la columna D es = a NA a la misma hoja de salida (a partir de la fila 89, incluida)

Ambas opciones se incluyen.

¿Podrías modificar la macro para que se contemple este cambio?

Adjunto ejemplos de ambas opciones, ambas salidas serían en la misma hoja, aunque en filas de inicio distintas.

Saludos y muchas gracias.

Nacho C.

Pero ahí tendrás otro problema, si las filas que empiezan en la fila 55 llegan hasta la fila 89, se van a empezar a encimar.

Te anexo la macro con los cambios

Sub Identificar_Evaluaciones()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")        'origen
    Set h2 = Sheets("Hoja2")        'destino
    '
    'h2.Rows("2:" & Rows.Count).Clear
    j = 55
    k = 89
    n = 1
    m = 1
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "D") <> "" Then
            If h1.Cells(i, "D") = "NA" Then
                h1.Rows(i).Copy h2.Rows(k)
                h2.Cells(k, "A") = n
                n = n + 1
                k = k + 1
            Else
                h1.Rows(i).Copy h2.Rows(j)
                h2.Cells(j, "A") = m
                m = m + 1
                j = j + 1
            End If
        End If
    Next
    MsgBox "Fin"
End Sub
Respuesta
1

https://youtu.be/d4VgP82naPI 

https://youtu.be/793MqY6oj18 

Mira estos ejemplos relacionados te pueden servir

O quizás este

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas