Jump to content
Sign in to follow this  
falexramos

Ocultar columna en 0.

Recommended Posts

Oculta la columna si cumple el criterio, que la columna este en valor 0.

Sub Ocultar_columnas_0()
Dim x As Integer
Dim y As Integer

y = 0
Range("J5").Select
For x = 10 To 256
Cells(5, x).Select
If
IsNull(ActiveCell.value) Or ActiveCell.value = "" Then
MsgBox ("Fin del
Proceso, Se modificaron: " & y & " Columnas en Ceros")
Exit
Sub
Else
Selection.End(xlDown).Select
If ActiveCell.value = 0
Then
Selection.EntireColumn.Hidden = True
y = y + 1
End If
End
If
Next x

End Sub[/CODE]

Es algo que quice compartir, espero le sirva alguien mas.

Share this post


Link to post
Share on other sites

Hola a todos:

Con el permiso de falexramos y aprovechando para contestar a rulesagain, he realizado mi propia versión de la macro.

Muestra/oculta de forma automática las columnas en función del rango usado, si contienen la totalidad de las celdas vacías y/o a cero.

También permite ignorar filas y columnas al principio del rango usado.

Option Explicit

Sub OcultarMostrarColumnasMA(Optional ACero As Boolean = True, _
Optional Vacia As Boolean = True, _
Optional FilasIgnoradas As Long = 0, _
Optional ColumnasIgnoradas As Long = 0)


'Definimos las variables
Dim Filas, Columna, Columnas, FilaInicial
Dim ColumnaInicial, FilasVacias, Celda, x, y

'Determinamos rango de filas
FilaInicial = ActiveSheet.UsedRange.Row + FilasIgnoradas
Filas = ActiveSheet.UsedRange.Rows.Count - FilasIgnoradas

'Determinamos rango de columnas
ColumnaInicial = ActiveSheet.UsedRange.Column + ColumnasIgnoradas
Columnas = ActiveSheet.UsedRange.Columns.Count - ColumnasIgnoradas

'Recorremos las columnas del rango
For Columna = ColumnaInicial To ColumnaInicial + Columnas - 1

FilasVacias = 0

'Contamos las celdas vacias en el rango activo de la columna
For Each Celda In ActiveSheet.Range(Cells(FilaInicial, Columna), _
Cells(FilaInicial + Filas - 1, Columna))
If (Vacia = True And Celda.Value = Empty) Or _
(ACero = True And Celda.Value = 0) Then
FilasVacias = FilasVacias + 1
End If
Next

'Mostramos/ocultamos la columna en función del número de celdas vacías
If FilasVacias = Filas Then
ActiveSheet.Columns(Columna).Hidden = True 'Ocultamos
Else
ActiveSheet.Columns(Columna).Hidden = False 'Mostramos
End If

Next

End Sub


Sub OcultarMostrarColumnas()
OcultarMostrarColumnasMA
End Sub


[/CODE]

La macro contiene 4 parámetros, todos ellos opcionales:

[b]ACero[/b] .Si hemos de tener en cuentas las celdas vacías, [b]asume True[/b]

[b]Vacia[/b] .Si hemos de tener en cuentas las celdas a cero(valor numérico), [b]asume True[/b]

[b]FilasIgnoradas [/b].Número de filas a ignorar al principio del rango usado, asume [b]cero(0)[/b]

[b]ColumnaIgnoradas [/b].Número de Columnas a ignorar al principio del rango usado, asume [b]cero(0)

Ejemplos de llamada:

[color=#008000]Todo el rango, se tienen en cuenta las celdas vacías y a cero [/color][/b]

[b]OcultarMostrarColumnasMA[/b]

[b][color=#008000]Todo el rango, se tienen en cuenta las celdas vacias[/color][/b]

[b]OcultarMostrarColumnasMA False, True[/b]

[color=#008000][b]Todo el rango, se tienen en cuenta las celdas a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, False[/b]

[color=#008000][b]Ignoramos las filas 1-5, se tienen en cuenta las celdas vacías y a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, True, 5[/b]

[color=#008000][b]Ignoramos las filas 1-5, y las columnas 1-3, se tienen en cuenta las celdas vacías y a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, True, 5, 3

[/b]

Si se desea automatismo total, colocar la llamada a la macro en el evento Change de la hoja o del libro.

Saludos

Share this post


Link to post
Share on other sites

rulesagain prueba con esto haber si es lo que necesitas

Sub Ocultar_filas_0()
Dim x As Long
Dim y As Integer
Application.ScreenUpdating = False
y = 0
Range("J2").Select
For x = 1 To Rows.Count
Cells(x, 1).Select
If IsNull(ActiveCell.value) Or ActiveCell.value = "" Then
MsgBox ("Fin del Proceso, Se modificaron: " & y & " Filas en Ceros")
Exit Sub
Else
Selection.End(xlToRight).Select
If ActiveCell.value = 0 Then
Selection.EntireRow.Hidden = True
y = y + 1
End If
End If
Next x
Application.ScreenUpdating = True
End Sub[/CODE]

una modificacion que le hizo Adrian "Macro Antonio" y la mejoro.

Share this post


Link to post
Share on other sites
Hola a todos:

Con el permiso de falexramos y aprovechando para contestar a rulesagain, he realizado mi propia versión de la macro.

Muestra/oculta de forma automática las columnas en función del rango usado, si contienen la totalidad de las celdas vacías y/o a cero.

También permite ignorar filas y columnas al principio del rango usado.

Option Explicit

Sub OcultarMostrarColumnasMA(Optional ACero As Boolean = True, _
Optional Vacia As Boolean = True, _
Optional FilasIgnoradas As Long = 0, _
Optional ColumnasIgnoradas As Long = 0)


'Definimos las variables
Dim Filas, Columna, Columnas, FilaInicial
Dim ColumnaInicial, FilasVacias, Celda, x, y

'Determinamos rango de filas
FilaInicial = ActiveSheet.UsedRange.Row + FilasIgnoradas
Filas = ActiveSheet.UsedRange.Rows.Count - FilasIgnoradas

'Determinamos rango de columnas
ColumnaInicial = ActiveSheet.UsedRange.Column + ColumnasIgnoradas
Columnas = ActiveSheet.UsedRange.Columns.Count - ColumnasIgnoradas

'Recorremos las columnas del rango
For Columna = ColumnaInicial To ColumnaInicial + Columnas - 1

FilasVacias = 0

'Contamos las celdas vacias en el rango activo de la columna
For Each Celda In ActiveSheet.Range(Cells(FilaInicial, Columna), _
Cells(FilaInicial + Filas - 1, Columna))
If (Vacia = True And Celda.Value = Empty) Or _
(ACero = True And Celda.Value = 0) Then
FilasVacias = FilasVacias + 1
End If
Next

'Mostramos/ocultamos la columna en función del número de celdas vacías
If FilasVacias = Filas Then
ActiveSheet.Columns(Columna).Hidden = True 'Ocultamos
Else
ActiveSheet.Columns(Columna).Hidden = False 'Mostramos
End If

Next

End Sub


Sub OcultarMostrarColumnas()
OcultarMostrarColumnasMA
End Sub


[/CODE]

La macro contiene 4 parámetros, todos ellos opcionales:

[b]ACero[/b] .Si hemos de tener en cuentas las celdas vacías, [b]asume True[/b]

[b]Vacia[/b] .Si hemos de tener en cuentas las celdas a cero(valor numérico), [b]asume True[/b]

[b]FilasIgnoradas [/b].Número de filas a ignorar al principio del rango usado, asume [b]cero(0)[/b]

[b]ColumnaIgnoradas [/b].Número de Columnas a ignorar al principio del rango usado, asume [b]cero(0)

Ejemplos de llamada:

[color=#008000]Todo el rango, se tienen en cuenta las celdas vacías y a cero [/color][/b]

[b]OcultarMostrarColumnasMA[/b]

[b][color=#008000]Todo el rango, se tienen en cuenta las celdas vacias[/color][/b]

[b]OcultarMostrarColumnasMA False, True[/b]

[color=#008000][b]Todo el rango, se tienen en cuenta las celdas a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, False[/b]

[color=#008000][b]Ignoramos las filas 1-5, se tienen en cuenta las celdas vacías y a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, True, 5[/b]

[color=#008000][b]Ignoramos las filas 1-5, y las columnas 1-3, se tienen en cuenta las celdas vacías y a cero [/b][/color]

[b]OcultarMostrarColumnasMA True, True, 5, 3

[/b]

Si se desea automatismo total, colocar la llamada a la macro en el evento Change de la hoja o del libro.

Saludos

Macro antonio.. buenisima macro.. como hago para acortar columnas, entre la B y la AT...

gracias

Share this post


Link to post
Share on other sites

Hola Buenas tardes,

Como puedo hacer para esta macro de ocultar los valores en cero de la fila 13 del rango de columnas del 33 al 65
la macro cumple su cometido pero si quiero volver a mostrar todo incluido los valores en cero como seria ?
Agradeceré mucho si me apoyan, grcs

Sub Ocultar_Columna_y_mostrar()
Sheets("Hoja1").Select
For Col = 33 To 65
If Cells(13, Col) = 0 Then
Columns(Col).EntireColumn.Hidden = True
Else
Columns(Col).EntireColumn.Hidden = False
End If
Next
End Sub

Share this post


Link to post
Share on other sites
En 13/4/2013 at 2:40 , Antoni dijo:

Sube un archivo y explica exactamente que es lo que deseas hacer.

 

En 11/4/2013 at 13:37 , Antoni dijo:

Hola nonano:

Esta macro oculta/muestra el rango "B:AT".

 


Sub OcultarMostrar()


   Range("B:AT").EntireColumn.Hidden = Not Range("B:AT").EntireColumn.Hidden


End Sub


[/CODE]

 

Saludos

 

Hace 17 minutos , rogermv27 dijo:

Hola Buenas tardes,

Como puedo hacer para esta macro de ocultar los valores en cero de la fila 13 del rango de columnas del 33 al 65
la macro cumple su cometido pero si quiero volver a mostrar todo incluido los valores en cero como seria ?
Agradeceré mucho si me apoyan, grcs

Sub Ocultar_Columna_y_mostrar()
Sheets("Hoja1").Select
For Col = 33 To 65
If Cells(13, Col) = 0 Then
Columns(Col).EntireColumn.Hidden = True
Else
Columns(Col).EntireColumn.Hidden = False
End If
Next
End Sub

Realice estos cambios y si funciono a lo que quiero, si esta bien la macro me corrigen por favor, muchas gracias por su tiempo

Sub Ocultar_Columna_y_mostrar()
Sheets("Hoja1").Select
For Col = 33 To 78
If Cells(13, Col) = 0 Then
Columns(Col).EntireColumn.Hidden = Not Columns(Col).EntireColumn.Hidden
Else
Columns(Col).EntireColumn.Hidden = False
End If
Next
End Sub
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.

Sign in to follow this  



  • Posts

    • Buenos Días: Como programo la macro para que recorra la columna B y si encuentra la fecha de hoy tome la cantidad de la columna pequeña y se la sume a la cantidad de la columna mediana logicamente sobre la misma fila. El resultado deberá ser el nuevo dato de la columna mediana y debera borrar el dato de la cantidad en la columna pequeña PRUEBA.xlsx
    • Buenos días compañer@s, espero que estéis tod@s bien, a ver si me podéis ayudar. He creado una medida que me suman todas las categorías de las ventas [TOTAL_VENTAS], doce campos en total. Con ella he creados dos medidas más: VENTAS_AÑO_ACTUAL=CALCULATE([TOTAL_VENTAS];DATOS_BP[ANYO]=2020) VENTAS_AÑO_ANTERIOR=CALCULATE([TOTAL_VENTAS];DATOS_BP[ANYO]=2019) Hasta ahí todo bien. Mi pregunta es, cómo puedo hacer para que la medida calcule el año en curso y el año anterior sin necesidad de tener que poner 2020 y 2019?. Muchas gracias como siempre Saludos  
    • Así funciona: Sub Crear() Application.ScreenUpdating = False If Trim([C9]) = "" Then MsgBox "*** Cédula en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([E9]) = "" Then MsgBox "*** Riesgo en blanco ***", vbCritical, "Alerta" Exit Sub End If If Trim([C11]) = "" Then MsgBox "*** Nombre en blanco ***", vbCritical, "Alerta" Exit Sub End If Set Cnn = New ADODB.Connection With Cnn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\Datos\01.Adeudos.accdb" .Open End With With Sheets("Registro") Set Rs = New ADODB.Recordset Sql = "SELECT Count(*) FROM pen WHERE [Num Id]='" & .Range("C9") & "'" Rs.Open Sql, Cnn, 3, 3, adCmdText Datos = Rs.GetRows If Datos(0, 0) > 0 Then MsgBox "El registro ya existe en la base de datos!!!", vbCritical, "SACI" Else Sql = "INSERT INTO pen ([Num Id], Nombre, Riesgo, [Monto Caso], Moroso, [Nun_Patrono], [Nom_Patrono]) " Sql = Sql & "VALUES ('" & .Range("C9") & "', " & _ "'" & .Range("C11") & "', " & _ "'" & .Range("E9") & "', " & _ "'" & .Range("G9") & "', " & _ "'" & .Range("G11") & "', " & _ "'" & .Range("C13") & "', " & _ "'" & .Range("E13") & "' )" MsgBox "Datos actualizados con Exito!!!", vbInformation, "SACI" A_ingesarDatos = True End If End With Cnn.Execute (Sql) Cnn.Close Set Cnn = Nothing End Sub  
    • Hola buenas a todos, me presento como nuevo usuario, saludos a todos !!
    • Hacer eso con "una formula" se puede con Office 365. Si no tiene Office 365 el adjunto que le comparto NO le va a servir y deberá esperar alguna otra propuesta.   Filtrar con función.xlsx
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy