es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ocultar todas las columnas excepto las especificadas.

Pude encontrar un código que oculta todas las columnas especificadas para un informe en el trabajo que estoy tratando de automatizar poco a poco. El informe en cuestión tiene alrededor de 20 columnas y solo necesito realmente 8 de ellas.

Puedo usar fácilmente el código para escribir alrededor de 12 líneas y ocultarlas. Sin embargo, parece que sería más fácil de leer y mucho más eficiente escribir el código opuesto. Soy bastante nuevo en VBA y este es mi primer proyecto real en el que puedo usar el programa hasta ahora.

Proyecto actual:

Sub Ocultar_Columnas()

Dim UltimaColumna As Long
UltimaColumna = Cells(3, Columns.Count).End(xlToLeft).Column

For i = 1 To UltimaColumna

If Cells(3, i).Value = "Nombre del Cliente" Or Cells(3, i).Value = "Dirección" Or Cells(3, i).Value = "Número de Teléfono" o ... 'continuar perpetuamente
Then Columns(i).Hidden = True

Next

End Sub
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que has encontrado un código que puede ocultar columnas específicas en Excel. Sin embargo, solo necesitas 8 de las 20 columnas en tu informe y te preguntas si sería más fácil escribir el código inverso para mostrar solo las 8 columnas que necesitas. Como principiante en VBA, este es tu primer proyecto real donde puedes usar el programa. Actualmente, tu código se ve así:

    Sub Ocultar_Otras_Columnas()
    
    Dim UltimaColumna As Long
    UltimaColumna = Cells(3, Columns.Count).End(xlToLeft).Column
    
    For i = 1 To UltimaColumna
        If Cells(3, i).Value = "Nombre del Cliente" Or Cells(3, i).Value = "Dirección" Or Cells(3, i).Value = "Número de Teléfono" o ... 'continuar hasta el infinito
        Then Columns(i).Hidden = True
    Next
    
    End Sub
    

    Puede ser más eficiente escribir un código que muestre explícitamente solo las 8 columnas que necesitas, en lugar de ocultar las columnas restantes. Aquí tienes un ejemplo de cómo puedes modificar tu código para lograr eso:

    Sub Mostrar_Columnas()
    
    Dim col As Variant
    Dim encabezados As Variant
    Dim idx As Long
    
    encabezados = Array("Nombre del Cliente", "Dirección", "Número de Teléfono", ... 'continuar hasta el infinito)
    
    For Each col In ActiveSheet.UsedRange.Columns
        If Not IsError(Application.Match(col.Cells(3, 1).Value, encabezados, False))) Then
            col.Hidden = False
            idx = idx + 1
        Else
            col.Hidden = True
        End If
    
        If idx >= UBound(encabezados) - LBound(encabezados) + 1 Then Exit For 'salir del bucle cuando se muestren todas las columnas necesarias
    Next
    
    End Sub
    

    En este código modificado, la subrutina Mostrar_Columnas recorre todas las columnas de la hoja de cálculo activa y verifica si el valor del encabezado de la tercera fila coincide con alguno de los nombres de encabezado en el arreglo encabezados (que contiene los 8 encabezados que necesitas). Si hay una coincidencia, se muestra la columna (es decir, se establece la propiedad Hidden en False) y se incrementa un contador idx. Si no hay coincidencia, se oculta la columna (es decir, se establece la propiedad Hidden en True). El bucle se detiene temprano cuando se muestran todas las columnas necesarias.

    Este código es más eficiente porque solo necesita mostrar las columnas que necesitas, en lugar de ocultar las demás columnas, lo que podría llevar más tiempo de procesamiento. También es más fácil de entender y mantener, ya que los encabezados se enumeran explícitamente en un arreglo.

Comments are closed.