Como entender y utilizar "value" = 31 - 29, en VBA y me cambie los rangos

De esta macro
Columns("B:NI").Hidden = True
Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False
Entiendo que Columns("B:NI"). Hidden = True va a ocultar de B a NI
la macro en si esta en enlazada en un control de nuemo
para cambiar de número la celda "A7" que contiene números del 1 al 12 osea 12 meses
al subir o bajar se ocultan todas las celdas y solo deja el rango del mes

la macro funciona bien
y entiendo que "Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False"  oculta y muestra las celdas dependiendo el valor de la A/ que esta enlazada con el control 
Pero no se si alguien me pueda explicar a detalle el algoritmo se sigue o como funciona a detalle

en especial a parte de A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)
Por que trae -29 y el otro +1
Ya que intente hace una que oculte de 10 en 10 y no de 31 en 31 pero no se que valores poner después de los value
A7").Value * ?? - ?? ), Columns(Range("A7").Value * ?? + ?)

Si alguien me puede decir como funcionan sumar o restar valores, para que al entender yo pueda hacer diferentes macro, como por ejemplo uno de una semana que muestre 7 días de 52 semanas
espero darme a entender

1 Respuesta

Respuesta
1

Te explico lo que hace cada línea.

Primero, como bien comentas, esta línea, lo que hace es ocultar todas las columnas desde la B y hasta la NI

Columns("B:NI"). Hidden = True

Para explicar la siguiente línea, debes visualizar que los días de cada mes han sido acomodados en 31 columnas, aunque febrero, abril, junio, septiembre y noviembre, tienen menos de 31 días, en la hoja de excel pusieron columnas de más para que el mes abarcara 31 columnas, por ejemplo, el mes de febrero, va de la columna AG hasta la columna BK, números de columnas de la 33 a la 63; y en la columna 64 empieza el 1 de marzo.

Te explico la sintaxis de la línea y luego te lo explico con un ejemplo:

Range(Columns(n), Columns(m)). Hidden = False

La línea significa que va a mostrar el rango de columnas, desde la columna INICIAL n y hasta la columna FINAL m.


Si cambio el valor de n = 2 y m = 32, me va a mostrar las columnas de B a AF. Aunque visualmente tú ves columnas A, B, C, D..., internamente excel las controla con número 1,2,3,4...

Intenta con lo siguiente:

Sub pruebas()
    Columns("B:NI").Hidden = True
    n = 2
    m = 32
    Range(Columns(n), Columns(m)).Hidden = False
End Sub

Verás que te ha dejado visibles las columnas del mes de "enero".


Ahora si cambias los valores de n = 33 y m = 63 

Sub pruebas()
    Columns("B:NI").Hidden = True
    n = 33
    m = 63
    Range(Columns(n), Columns(m)).Hidden = False
End Sub

Lo que hace la macro es mostrar las columnas desde la 33 y hasta la 63:

Range(columns(33), columns(63)).Hidden = false

Verás "febrero"


Ahora tú tienes esto:

Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False

Esta parte,  es una fórmula

Range("A7").Value * 31 - 29

y el resultado te va a dar un número y ese número es la columna INICIAL (n)

Esta otra parte es otra fórmula

Range("A7").Value * 31 + 1

 Y el resultado te va a dar un número y ese número es la columna FINAL (m)


Vamos a sustituir en las fórmulas el valor de la celda A7, por ejemplo, si en la celda A7 tienes el número 2, entonces quedaría así:

Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False
Range(Columns(2 * 31 - 29), Columns(2 * 31 + 1)).Hidden = False
Range(Columns(62 - 29), Columns(62 + 1)).Hidden = False
Range(Columns(33), Columns(63)). Hidden = False

Lo que hace la macro es mostrar desde la columna 33 y hasta la columna 63. Como lo vimos en el ejemplo de "Febrero".


Es por eso que la fórmula multiplica el valor de la celda A7 por 31, para mostrar siempre 31 columnas.

Luego le resta 29, porque la columna inicial es la columna B (columna número 2). Para el mes de enero es 31 * 1 - 29 = 31 -29 = 2, columna inicial 2, en la segunda parte le suma 1 porque la columna donde empiezan los días es la columna 2, entonces al resultado de multiplicar por 31 le suma 1 y esa es la columna final.


Si quieres mostrar 7 días, la fórmula quedaría así:

    Columns("B:NI").Hidden = True
    Range(Columns(Range("A7").Value * 7 - 5), Columns(Range("A7").Value * 7 + 1)). Hidden = False

Pero va a mostrar siempre 7 días, pero iniciando siempre el 1 de enero. El problema se va a presenta cuando llegues a la semana del 26 de febrero, porque te va a mostrar columnas sin días, como te comenté los días en tu hoja están acomodados para mostrar el mes en 31 columnas. Si quieres que se muestren semanas de 7 días, vas a tener que eliminar esas columnas vacías.


Listo, ahí tienes toda la explicación y la opción para poner 7 días.

[No olvides valorar la respuesta.

.

[

.

¡Gracias! 

En serio, no se si no lo había visto antes, pero no me respondieron hace meses esa misma pregunta. Quería saber como funcionaba y como poder hacerla. 

Muchas gracias, en serio, más claro que el agua.  No creo. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas