Ocultar columnas que no contengan datos en excel

En Excel necesitaría ocultar las columnas completas que en ninguna de sus celdas contuviesen datos para así reducir su anchura pues los datos están vinculados a otra hoja y son variables. La columna que no tiene ningún dato en ninguna de sus celdas hoy seria innecesaria, mañana tal vez si lo sea.

2 respuestas

Respuesta
2

Con la siguiente macro ocultas todas las columnas que no tengan datos

Sub OcultaColumnas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    For i = 1 To Columns.Count
        If WorksheetFunction.CountA(Columns(i)) = 0 Then
            Columns(i).EntireColumn.Hidden = True
        End If
    Next
End Sub

gracias de nuevo. lo he probado pero no me sirve porque solo funciona si las celdas están vacías en estas celdas hay vínculos a otra hoja  ejemplo(='1'!Z6) y entonces no están vacías realmente. He probado con un filtro y funciona, pero solo oculta filas no columnas y no se como aplicar el filtro a las columnas. Te reitero mi agradecimiento

La macro oculta columnas, eso es lo que pediste.

"Ocultar columnas que no contengan datos"

¿O a qué le llamas columna?

Las columnas en excel son las que tienen letras.

Las filas son las que tienen números.

Si en una celda tienes una fórmula, y esa fórmula te regresa vacío, realmente la columna no está vacía, tiene una fórmula.

Muchísimas gracias por tu atención y tu rápida respuesta. Es cierto, el enunciado de mi pregunta esta mal expresado. Las celdas tienen formula, aunque en algunos casos regresa vacío, con lo que tienen datos. La idea es ocultar las columnas (las de las letras) que a lo largo de su recorrido no contengan ninguna celda con valor superior a cero, de este modo esa columna que no "suma" nada no ocupa sitio en el papel A4 que tengo que imprimir pues son 50 columnas posibles, aunque con valores tal vez sean 20 (es variable) y así si me cabria con un tamaño de fuente aceptable. Lo del filtro parece no estar mal pero no se como configurarlo para que me oculte columnas, solo oculta filas. Gracias de nuevo por todo, es importante para mi resolver este problema que tengo

El filtro solamente oculta filas.

Te anexo la macro para ocultar las columnas que tengan vacío o 0

Sub OcultaColumnas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    f = ActiveSheet.UsedRange.SpecialCells(11).Row
    c = ActiveSheet.UsedRange.SpecialCells(11).Column
    For j = 1 To c
        oculta = False
        For i = 1 To f
            If Cells(i, j) = "" Or Cells(i, j) = 0 Then
                oculta = True
                col = j
            Else
                oculta = False
                Exit For
            End If
        Next
        If oculta Then
            Columns(j).EntireColumn.Hidden = True
        End If
    Next
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta

Estupendo. funciona perfectamente, pero hay un problema y es mi encabezado. Se ocultan las columnas en las que el encabezado no tiene definición pero las que tienen algo escrito en el encabezado no se ocultan. El encabezado esta en la fila 3. ¿Se podría hacer que considerase desde la fila 4 hacia abajo? (la tabla abarca el rango a3:ab27). Enormes gracias por tu atención, felicitaciones por la estupenda web, nos ayuda mucho a los que somos simplemente aficionados a excel.

Cambia en la macro

For i = 1 To f

Por esto

For i = 4 To f

Respuesta
1

Tengo una serie de preguntas para poder responderte mejor.

  • ¿Estos datos están siempre "a derecha" o pueden estar en cualquier lugar de la hoja?
  • ¿Hay alguna fila que se pueda usar de referencia para saber si está toda la columna vacia?
  • En lugar de ocultar las filas, no te serviría definir el área de scroll (¿por dónde el usuario puede moverse)?

enormes gracias por tu atención. Los datos pueden estar en cualquier celda de la tabla pues cada celda tiene un vinculo que apunta a otra hoja pero en muchos casos ese valor es cero, la idea es que si en toda la columna todas las celdas son ceros la columna se pueda ocultar porque la hoja se imprime en papel A4 y hay 50 columnas pero muchas de ellas son inútiles (hoy, mañana serán otras), por eso no sirve lo del scroll.  No se si lo he explicado bien pero de todos modos muchísimas gracias.

gracias de nuevo. lo he probado pero no me sirve porque solo funciona si las celdas están vacías en estas celdas hay vínculos a otra hoja  ejemplo(='1'!Z6) y entonces no están vacías realmente. He probado con un filtro y funciona, pero solo oculta filas no columnas y no se como aplicar el filtro a las columnas. Te reitero mi agradecimiento

Ok, ahora me confundiste porque decís que la celda puede no estar vacia pero si lo que tiene no es un dato "válido", la debería considerar como vacía. El tema ahora es: ¿Cómo se daría cuenta la macro que la celda está "vacía"?

Te dejo una macro que revisa que toda la columna no esté vacia ("") o con valor cero (0) y en caso que sí ocurra eso, termina ocultando la columna (el problema con esta macro que al tener que hacer la verificación en cada celda, tenés 16384 columnas x 1048576 filas que revisar, lo que es probable que termine colapsando -además de demorar "muchísimo" la ejecución). Por esta razón es que te digo si puedes acotar un poco la búsqueda, porque más allá que se pueda hacer, la verdad que la demora que va a tener el proceso va a ser que en la práctica no sirva

Sub xx()
Dim lFila As Long, lCol As Long
   lCol = 1
   Do While lCol <= ActiveSheet.Columns.Count
      On Error GoTo llegoAlFinal
      lFila = 1
      Do While ActiveSheet.Cells(lFila, lCol).Value = "" Or ActiveSheet.Cells(lFila, lCol).Value = 0
         lFila = lFila + 1
      Loop
10 lCol = lCol + 1
   Loop
   Exit Sub
llegoAlFinal:
'si llega acá es porque iteró hasta la ultima celda y falló
   ActiveSheet.Columns(lCol).ColumnWidth = 0
   Err.Clear
   On Error GoTo 0
   GoTo 10
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas