
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 Cells
y Rows
luego usar la condición para decidir si la fila debe ejecutarse. Realmente lo divides en Rows
primero y haces lo Cells
de cada fila. Esto se hace más fácilmente si sabes dónde Missing Data
aparecerá.
Códigoincluye sus condiciones y agrega un bucle externo para pasar Selection
por 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.
Tenga en cuenta que ejecuté ese código con la NumberFormat
condició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 Data
esté 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.).