Instrucion for each rango in range("a1:a100")

04/01/2009 - 22:50 por Anonimo | Informe spam
Un saludo antes que nada.

Utilizo excel 2007.

La pregunta es la siguiente: es posible que la instrucion for each rango in
range("a1:a100") por ejempo pueda empezar desde la ultima celda del rango,
como por ejemplo con

for i0 to 1 step -1

Es decir, que vaya para atras, y no del primero al ultimo.

Gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/01/2009 - 00:49 | Informe spam
hola, !

... es posible que la instrucion for each rango in range("a1:a100") por ejempo pueda empezar desde la ultima celda del rango
como por ejemplo con for i0 to 1 step -1 ...



un bucle "for each...next" siempre "avanza" en el orden de la matriz o coleccion
aun si inviertes el orden del rango ("a100:a1") excel lo interpretara ordenado ("a1:a100")
o sea, solo te queda la opcion de un bucle "for contador = max to min step -1" (p.e.)

Sub En_Reversa()
Dim n As Integer, x As Integer
For n = 10 To 1 Step -1
x = x + 1
Range("a" & n) = x
Next
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#2 Anonimo
05/01/2009 - 11:02 | Informe spam
EXCEL 2007

Hola, Hector y demás familia excel.

Mira, lo que quiero conseguir concretamente es lo siguiente: Tengo 3
columnas, que ocupan el rango c6:e36, doce hojas, una por cada mes del año,
y en el rango c6:c36 tengo los dias correspondientes al mes de la pestaña.
En la columna d6:d36 pongo unos datos numericos, que oscilan entre 110 y 85,
pero que no estan en todas las filas, por ejemplo en Enero de 31 dias, tengo
datos en 24. Lo que quiero conseguir es que en la columna e me ponga la
diferencia entre el dato que corresponda en la columna d, y el dato justo
anterior de la columna d.

Veamos a ver si me explico un poco mejor:

FECHA DATO RESTO
01 - ENE 100 0
02 - ENE 98 -2
03 - ENE 99 1
04 - ENE
05 - ENE 95 -4
06 - ENE
07 - ENE
08 - ENE 91 -4

Además me gustaria que fuese mediante código.

Gracias de antemano
Respuesta Responder a este mensaje
#3 Héctor Miguel
05/01/2009 - 19:37 | Informe spam
hola, !

op1: podrias usar una formula +/- como la siguiente, a partir del dia 2 de cada mes
[E7] =si(d7<>"",d7-buscar(2,1/(d$6:d6<>""),d$6:d6),"")

op2: si lo quieres por codigo (usando la misma formula anterior) solo requieres dos lineas
la primera "pone" la formula en el rango [E7:E36]
la segunda convierte a valores constantes el resultado de las formulas (por si no quieres conservar las formulas)

Sub Restar_previo()
[e7:e36].formula = "=if(d7<>"""",d7-lookup(2,1/(d$6:d6<>""""),d$6:d6),"""")"
[e7:e36].value = [e7:e36].value
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
... Tengo 3 columnas... doce hojas, una por cada mes... y en el rango c6:c36 tengo los dias... al mes de la pestana.
En... d6:d36... datos numericos... pero que no estan en todas las filas, por ejemplo en Enero de 31 dias, tengo datos en 24.
Lo que quiero conseguir es que en la columna e me ponga la diferencia entre el dato que corresponda en la columna d
y el dato justo anterior de la columna d.

Veamos a ver si me explico un poco mejor:

FECHA DATO RESTO
01 - ENE 100 0
02 - ENE 98 -2
03 - ENE 99 1
04 - ENE
05 - ENE 95 -4
06 - ENE
07 - ENE
08 - ENE 91 -4

Además me gustaria que fuese mediante codigo...
Respuesta Responder a este mensaje
#4 Anonimo
05/01/2009 - 22:32 | Informe spam
Como siempre me vale, Hector. Pero me podrías explicar la formula en si,
porque leo la ayuda pero no veo el porque de algunos datos que pones

[E7] =si(d7<>"",d7-buscar(2,1/(d$6:d6<>""),d$6:d6),"")

[e7] obvio lo tengo claro
si(d7<>"" tambien lo tengo claro es el condicional para si no hay valor en
d7 que ponga ""

lo que no entiendo es lo siguiente: lo que devuelve
buscar(buscar(2,1/(d$6:d6<>""),d$6:d6)

Me lo puedes explicar y de esa forma tambien aprendo a trabajar mejor

Gracias y feliz año, que aun no habia tenido el placer de saludarte




"Héctor Miguel" escribió en el mensaje de
noticias news:
hola, !

op1: podrias usar una formula +/- como la siguiente, a partir del dia 2 de
cada mes
[E7] =si(d7<>"",d7-buscar(2,1/(d$6:d6<>""),d$6:d6),"")

op2: si lo quieres por codigo (usando la misma formula anterior) solo
requieres dos lineas
la primera "pone" la formula en el rango [E7:E36]
la segunda convierte a valores constantes el resultado de las
formulas (por si no quieres conservar las formulas)

Sub Restar_previo()
[e7:e36].formula =
"=if(d7<>"""",d7-lookup(2,1/(d$6:d6<>""""),d$6:d6),"""")"
[e7:e36].value = [e7:e36].value
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
... Tengo 3 columnas... doce hojas, una por cada mes... y en el rango
c6:c36 tengo los dias... al mes de la pestana.
En... d6:d36... datos numericos... pero que no estan en todas las filas,
por ejemplo en Enero de 31 dias, tengo datos en 24.
Lo que quiero conseguir es que en la columna e me ponga la diferencia
entre el dato que corresponda en la columna d
y el dato justo anterior de la columna d.

Veamos a ver si me explico un poco mejor:

FECHA DATO RESTO
01 - ENE 100 0
02 - ENE 98 -2
03 - ENE 99 1
04 - ENE
05 - ENE 95 -4
06 - ENE
07 - ENE
08 - ENE 91 -4

Además me gustaria que fuese mediante codigo...




Respuesta Responder a este mensaje
#5 Héctor Miguel
06/01/2009 - 01:57 | Informe spam
hola, !

lo que no entiendo es lo siguiente: lo que devuelve: buscar(2,1/(d$6:d6<>""),d$6:d6) ...



1) la funcion buscar(... devuelve el primer valor manor o igual al valor buscado
2) la division: 1/(d$6:d6<>"") devuelve el cociente de 1 dividido por $d6:d6<>""
o sea, una matriz de fracciones crecientes (o valores de FALSO que se convierten en cero)
3) el rango final (el mismo d$6:d6) le da a la funcion buscar(... su forma vectorial (de donde toma la devolucion)

(en resumen) si no se va a encontrar el 2 (porque el maximo resultado seria 1)...
la funcion "regresara" al ultimo valor encontrado y lo devuelve como resultado en la formula
(consulta la ayuda en linea {F1} en relacion con las formas de la funcion buscar(...) :))

saludos,
hector.

__ previos __
op1: podrias usar una formula +/- como la siguiente, a partir del dia 2 de cada mes
[E7] =si(d7<>"",d7-buscar(2,1/(d$6:d6<>""),d$6:d6),"")

op2: si lo quieres por codigo (usando la misma formula anterior) solo requieres dos lineas
la primera "pone" la formula en el rango [E7:E36]
la segunda convierte a valores constantes el resultado de las formulas (por si no quieres conservar las formulas)

Sub Restar_previo()
[e7:e36].formula = "=if(d7<>"""",d7-lookup(2,1/(d$6:d6<>""""),d$6:d6),"""")"
[e7:e36].value = [e7:e36].value
End Sub

__ OP __
... Tengo 3 columnas... doce hojas, una por cada mes... y en el rango c6:c36 tengo los dias... al mes de la pestana.
En... d6:d36... datos numericos... pero que no estan en todas las filas, por ejemplo en Enero de 31 dias, tengo datos en 24.
Lo que quiero conseguir es que en la columna e me ponga la diferencia entre el dato que corresponda en la columna d
y el dato justo anterior de la columna d.

Veamos a ver si me explico un poco mejor:

FECHA DATO RESTO
01 - ENE 100 0
02 - ENE 98 -2
03 - ENE 99 1
04 - ENE
05 - ENE 95 -4
06 - ENE
07 - ENE
08 - ENE 91 -4

Además me gustaria que fuese mediante codigo...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida