Msgbox cuando se cumpla condición.

La semana pasada respondiste a una pregunta mía enviándome esta macro que, conforme voy poniendo datos en la columna A, marca con una “x” la celda que está debajo de la que coincide con su valor en el rango C1:AQ1 y si algún número se repite en la columna “A”, marca otra “x” debajo de la celda correspondiente.

Private Sub Worksheet_Change(ByVal Target As Range)

'Por.Dante Amor

    If Not Intersect(Target, Range("A:A")) Is Nothing Then

        If Target.Count = 1 Then

            Set b = Range("C1:AQ1").Find(Target, LookAt:=xlWhole)

            If Not b Is Nothing Then

                u = Cells(Rows.Count, b.Column).End(xlUp).Row + 1

                Cells(u, b.Column) = "x"

            End If

        End If

    End If

End Sub

La macro funciona perfectamente pero yo no sé integrar en ella las necesidades nuevas que he intentado resolver.

La cuestión es el control de los resultados EN TIEMPO REAL. Mientras los datos a analizar son pocos, se puede hacer bien contando a ojo, pero cuando son muchos la tarea es confusa y poco eficaz. Por ello necesito que Excel me resalte las celdas que me interesen según las necesidades de cada análisis.

He pensado como solución un msgbox que salte en pantalla y me diga “atención (y el dato que corresponda a la celda de la fila 1)” cuando se cumpla una condición, en este caso, en el momento en que en alguna de las columnas del rango C:AQ aparezca la segunda “x”.

Y otro msgbox que haga lo mismo pero cuando haya 2 “x” en las celdas anexas.

¿Podrias, por favor indicar, algunos comentarios en la macro que me envíes para que entienda más el código y pueda hacer yo reformas posteriores con otras condiciones?.

1 respuesta

Respuesta
1

Con la siguiente macro te manda un aviso cuando tienes 2 o más "x" en una misma columna y te pone el dato de la fila 1 y la columna.

Esta parte no la entiendo: "Y otro msgbox que haga lo mismo pero cuando haya 2 “x” en las celdas anexas.", ¿a qué te refieres con celdas anexas? Puedes poner ejemplos.

Te anexo la macro documentada.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        'si solamente modificas una celda
        If Target.Count = 1 Then
            '
            'busca el dato de la columna en el rango C1:AQ1
            Set b = Range("C1:AQ1").Find(Target, LookAt:=xlWhole)
            If Not b Is Nothing Then
                'si lo encuentra
                'obtiene la última fila de la columna en donde encontró el dato
                u = Cells(Rows.Count, b.Column).End(xlUp).Row + 1
                'pone la "x"
                Cells(u, b.Column) = "x"
                'cuenta cuantas "x" hay en la columna
                contar = Application.CountIf(Columns(b.Column), "x")
                If contar >= 2 Then
                    'si hay 2 o más, envía un mensaje
                    MsgBox "Atención " & Cells(1, b.Column)
                End If
            End If
        End If
    End If
End Sub

Podrías crear una pregunta por cada petición.

Saludos. Dante Amor

Recuerda valorar la respuesta.

¿Y cuántas "x" contiguas se deben revisar?

¿Se van a revisar hacia la izquierda y hacia la derecha?

Y si está toda la fila llena de "x", es decir, ¿todas están contiguas?

Podrías valorar esta respuesta y crear una nueva y me describes, cada caso que pueda ocurrir, en la nueva pregunta. Si lo deseas, al final del título de la nueva pregunta puedes poner que va dirigida a Dante Amor.

Saludos. Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas