Excel VBA: omita una fila completa del procesamiento si se cumple la condición

Excel VBA: omita una fila completa del procesamiento si se cumple la condición

Hola a todos, soy relativamente nuevo en la codificación VBA en Excel (versión actual 2010) y estoy tratando de mejorar un programa simple que suprime valores pequeños en las tablas que publica mi organización. El formato de mis datos es el siguiente.

En la columna más a la izquierda (generalmente C) tengo las etiquetas de las filas (por ejemplo, Hospital, Hogar, Otros, Datos faltantes). En la siguiente columna tenemos el número de registros en esa categoría. En la última columna tenemos un valor porcentual para esa fila.

Al informar los resultados, siempre suprimimos los tamaños de celda del 1 al 5. Sin embargo, no suprimimos la cantidad de registros en la fila "Datos faltantes".

He generado la siguiente macro con la ayuda de otros usuarios en este foro, un programa que reemplaza todos los n valores en nuestras tablas con "<6". El motivo de la declaración de formato es que no quiero suprimir los porcentajes y siempre tienen el formato numérico con un solo punto decimal.

Sub SuppressN()
Dim rng As Range, cell As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
For Each cell In rng.Cells
   If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And 
   cell.Value <= 5 Then cell.Value = "<6"
Next
End Sub

Lo que me gustaría hacer es decirle a Excel que si encuentra la cadena "Datos faltantes" no ejecute el códigotodos los valores en esa fila.

Agradezco cualquier ayuda que puedan brindar. ¡Gracias!

Respuesta1

Si desea omitir una fila, puede dividirla Cellsy Rowsluego usar la condición para decidir si la fila debe ejecutarse. Realmente lo divides en Rowsprimero y haces lo Cellsde cada fila. Esto se hace más fácilmente si sabes dónde Missing Dataaparecerá.

Códigoincluye sus condiciones y agrega un bucle externo para pasar Selectionpor Rows.

Sub SuppressN()

    Dim rng As Range
    Set rng = Selection

    If rng Is Nothing Then Exit Sub

    'go through by rows first
    Dim rng_row As Range
    For Each rng_row In rng_data.Rows
        If rng_row.Cells(1, 1) <> "Missing Data" Then
            'if good keep going on all the cells
            Dim cell As Range
            For Each cell In rng_row.Cells
                If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And cell.Value <= 5 Then
                    cell.Value = "<6"
                End If
            Next
        End If
    Next
End Sub

La imagen muestra antes y después.

antes después

Tenga en cuenta que ejecuté ese código con la NumberFormatcondición excluida ya que no quería emularlo. Lo volví a colocar para el código final para que no tengas que cambiar cosas.

Este código requiere que tenga alguna forma confiable de verificar que en algún lugar de la fila Missing Dataesté presente. Acabo de verificar la primera celda de la columna (que suena como lo que usted tiene), pero puede hacerlo de otras maneras (por ejemplo, usando Find, recorriendo y verificando valores, etc.).

información relacionada