Ocultar filas con macro según los valores del resto de columnas aun insertando más columnas.

Primero muchísimas gracias me habéis ayudado en muchas macros solo con respuestas a otras preguntas pero a esta no le encuentro la solución con lo que ya hay.

Tengo una tabla con muchos datos, un total de filas de 743 y de columnas hasta AG. En la columna A tengo fechas y en el resto de columnas pagos, pero no todas las fechas tienen pagos. Quiero poder ocultar aquellas filas que no tengan valores, sabiendo que la la primera columna es irrelevante, es decir si las columnas de la B a la AG están en blanco que me oculte esa fila.

Además quiero poder seguir introduciendo columnas y que siga funcionando de la misma forma.

1 Respuesta

Respuesta
2

Entrá al Editor de macros (con atajo de teclado ALT y F11).

Insertá un módulo y allí copiá este código:

Estoy imaginando que tus datos empiezan en fila 2 (ajusta esa línea) y que no habrá otras columnas ocupadas más que las de pago que irás incrementando, sino aclara para que te ajuste el código.

Sub ocultaFilas()
'x Elsamatilde
'primer fila de datos
ini = 2
'última fila a recorrer
fini = range("A" & rows.count).end(xlup).row
For i = ini To fini
    colfin = Range("IV" & i).End(xlToLeft).Column
    canti = Application.WorksheetFunction.CountA(Range(Cells(i, "B"), Cells(i, colfin)))
    If canti = 1 And colfin = 1 Then
        Range("A" & i).EntireRow.Hidden = True
    End If
Next i
Msgbox "Fin del proceso."
End Sub

Ciertamente mi información comienza en la fila 2, perdón por omitir el dato.

Eso estaba viendo con mi jefe, a lo mejor queremos poner un sumatorio al final de cada fila, el problema es que no se como vamos entonces a meter nuevas columnas, imagino que me grabare insertando una nueva columna en la columna 2.

¿Se podría hacer el código para dejar una o dos columnas de sumatorio al final pero además que al ir insertando más columnas siga funcionando la macro? Si es mucho lío dejo columnas en blanco y cuando haga falta meter más datos modificar en el código la situación de los sumatorios.

Ahora en cuanto pruebe el código os digo, muchísimas gracias de adelanto.

Funciona a la perfección justo lo que necesitaba muchísimas gracias, si pudiésemos hacer esos cambios seria genial.

Muchas gracias Elsa.

Si vas a tener alguna (s) columna (s) para totales al final, imagino que sería algo así:

Observa que llego hasta cierto día y luego iré insertando más columnas para el resto del mes, manteniendo la de total al final.

En este caso debes cambiar la instrucción de la línea 'colfin = ...' por esta otra:

colfin = Range("IV" & i).End(xlToLeft). Column - 1

Aquí le debes restar la cantidad de columnas para totales que tengas, en mi caso es solo 1.

Otro modo, como ya lo mencionaste sería tener todas las col creadas y ocultas ... pero lo anterior es más prolijo.

Da un error "1004": error definido por la aplicación o el objeto en la línea "canti=..."

Una duda, ¿qué significa "IV"?

Muchas gracias, siento no terminar ya.

Cuando te aparece el error presiona el botón Depurar para que te ubique en el Editor en la línea de amarillo... enviame imagen porque no sé si estás copiando bien las instrucciones o qué otra particularidad tendrá la hoja.

Sdos!

IV es la última columna en las viejas versiones Excel y ahora llegan a muchas columnas más... pero creo que no utilizarás más que estas.

Espero que se lea bien.

Veo que la instrucción colfin tiene un espacio y no veo porque. Cuando depuradora, pasa el mouse por la variable colfin a ver qué valor tiene.

Debieras copiar esa hoja en algún libro vacío y enviármelo ... porque no hay razón 'visible para que esto suceda. Esta probado en mi ejemplo que también está a tu disposición.

Sdos!

Solo veo que hay un espacio demás antes de Column en línea anterior.

La verdad que entre que estás como Anónimo y no te puedo enviar mi muestra y que tampoco se ve tu hoja no es muy fácil ayudarte.

La macro enviada corre perfectamente en mi muestra (que está a tu disposición). Pero desconozco qué particularidad puede tener tu hoja.

¿Puede ser que en esa fila tampoco hay datos en col A? ... En ese caso 'colfin' sería 1-1 = 0 lo que hará que falle la línea siguiente.

Si así fuera, antes de la línea amarilla agregá esta otra:

If colfin > 0 then 

y antes del Next i esta otra:

End If 

Pero en este caso no se ocultará la fila... y eso tendrás que confirmarlo.

Si no está aquí el problema enviame solo copia de tu hoja en un libro vacío para revisarla.

Sdos!

Quiero enviártelo, pero no se como adjuntarlo, lo que hice fue, sin cambiar el código, porque tengo información en la columna A, rellenar toda la ultima columna porque solo había algunos datos, no da el error que daba antes pero no me oculta ninguna.

Elsa no te preocupes, ya lo he solucionado, es un poco rudimentario pero funciona. lo que he hecho es, al principio del codigo ocultar la columna de total, ejecutar tu codigo y luego volver a mostrar la columna de total.

Dejo el codigo por escrito por si alguien lo necesita.

Sub OCULTAR_COLUMNAS()
ultcol = Range("XFD1").End(xlToLeft).Column
For i = 1 To ultcol
If Cells(1, i).Value = "TOTAL" Then
Columns(Cells(1, i).Column).EntireColumn.Hidden = True
End If
Next
End Sub

Muchisimas gracias de verdaz no se como lo hubiese solucionado sin tu ayuda.

Tengo otra pregunta hecha y nadie me contesta, si tienes tiempo y te apetece seguir aguntandome te dejo el enlace.

Buscar una celda por coordenadas que están en otras celdas 

Muchas gracias de nuevo.

Mis correos aparecen en mi sitio que dejo al pie. Te diría que me lo envíes pero viendo que ya lo resolviste a tu modo y valoraste (tan pobremente ) dejo cerrado el tema,

En general nos resistimos a responder a Anóminos: generalmente amparados en el anonimato no comentan, no valoran o lo hacen con poco interés o justicia.

Ante este comentario: '... Muchisimas gracias de verdaz no se como lo hubiese solucionado sin tu ayuda... me pregunto si la respuesta no daba para algo más.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas