Referenciar una celda

08/09/2007 - 19:38 por Ramon | Informe spam
Hola
Casi no se nada de Excel y no se si lo que quiero se puede hacer, ya me
direis

Quiero que una celda adquiera el valor de la misma celda de la hoja anterior
y de la fila inferior, pero referenciarla de forma relativa, de forma que si
copio la hoja en otra nueva siga haciendo lo mismo, por ejemplo , la celda
C4 de la hoja actual adquiere el valor de la celda C5 de la hoja anterior
No se si me he explicado bien
Gracias
Ramon

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/09/2007 - 23:52 | Informe spam
hola, Ramon !

Casi no se nada de Excel y no se si lo que quiero se puede hacer, ya me direis
Quiero que una celda adquiera el valor de la misma celda de la hoja anterior y de la fila inferior
pero referenciarla de forma relativa, de forma que si copio la hoja en otra nueva siga haciendo lo mismo
por ejemplo, la celda C4 de la hoja actual adquiere el valor de la celda C5 de la hoja anterior ...



puedes definir una funcion personalizada mediante vba en un modulo de codigo estandar/general/normal/... [p.e.]
a) inicia el editor de vba: atajo de teclado = {Alt}+{F11}
b) inserta un modulo: [menu] insertar / modulo
c) copia/pega las siguientes instrucciones en la ventana del modulo recien creado [Modulo1]

Function DeLaHojaAnterior()
Application.Volatile True
With Application.Caller
DeLaHojaAnterior = _
.Parent.Parent.Worksheets(.Parent.Index - 1) _
.Range(.Address).Offset(1)
End With
End Function

en la celda 'C4' de la hoja_X [NO en la primera del libro] usas la funcion como las *integradas* [p.e.] =DeLaHojaAnterior()
y te devolvera el contenido de la celda 'C5' de la hoja anterior [por indice en el libro] AUN si se encuentra *oculta*

notas: no tiene prevencion/correccion/... de -posibles- errores [p.e. si la usas en la primer hoja... no hay *hoja anterior*]
al usarla en celdas, el *Application.Caller* pasa a ser el objeto celda desde la que se llama a la funcion
el *.Parent* de una celda es un objeto hoja y [a su vez] el *.Parent* de un objeto hoja es un objeto libro
la funcion esta *preparada* para devolver exclusivamente la celda *siguiente* [hoja anterior] de la celda *llamadora*
y podrias agregar argumentos para la hoja anterior/siguiente/n_? y la referencia fila/columna +/- etc. etc. etc.
y... espero que no pienses *abusar* con el uso de funciones personalizadas de este tipo :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Ramon
09/09/2007 - 12:33 | Informe spam
Gracias Hector
Pruebo y te cuento
Un saludo
Ramon

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

Casi no se nada de Excel y no se si lo que quiero se puede hacer, ya me
direis
Quiero que una celda adquiera el valor de la misma celda de la hoja
anterior y de la fila inferior
pero referenciarla de forma relativa, de forma que si copio la hoja en
otra nueva siga haciendo lo mismo
por ejemplo, la celda C4 de la hoja actual adquiere el valor de la celda
C5 de la hoja anterior ...



puedes definir una funcion personalizada mediante vba en un modulo de
codigo estandar/general/normal/... [p.e.]
a) inicia el editor de vba: atajo de teclado = {Alt}+{F11}
b) inserta un modulo: [menu] insertar / modulo
c) copia/pega las siguientes instrucciones en la ventana del modulo recien
creado [Modulo1]

Function DeLaHojaAnterior()
Application.Volatile True
With Application.Caller
DeLaHojaAnterior = _
.Parent.Parent.Worksheets(.Parent.Index - 1) _
.Range(.Address).Offset(1)
End With
End Function

en la celda 'C4' de la hoja_X [NO en la primera del libro] usas la funcion
como las *integradas* [p.e.] =DeLaHojaAnterior()
y te devolvera el contenido de la celda 'C5' de la hoja anterior [por
indice en el libro] AUN si se encuentra *oculta*

notas: no tiene prevencion/correccion/... de -posibles- errores [p.e. si
la usas en la primer hoja... no hay *hoja anterior*]
al usarla en celdas, el *Application.Caller* pasa a ser el objeto celda
desde la que se llama a la funcion
el *.Parent* de una celda es un objeto hoja y [a su vez] el *.Parent* de
un objeto hoja es un objeto libro
la funcion esta *preparada* para devolver exclusivamente la celda
*siguiente* [hoja anterior] de la celda *llamadora*
y podrias agregar argumentos para la hoja anterior/siguiente/n_? y la
referencia fila/columna +/- etc. etc. etc.
y... espero que no pienses *abusar* con el uso de funciones personalizadas
de este tipo :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#3 Ramon
09/09/2007 - 13:12 | Informe spam
Bueno Hector
Lo he probado y funciona correctamente, solo hay una cosa que tampoco se
como evitar y que te agradeceria si es posible me ayudaras a conseguir, y es
que en celdas en las que en la hoja anterior no hay nada en la hoja
siguiente donde esta la llamada a la funcion , me pone un " 0 ", ademas son
celdas que normalmente contienen texto o nada.
Gracias por tu ayuda
Ramon

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

Casi no se nada de Excel y no se si lo que quiero se puede hacer, ya me
direis
Quiero que una celda adquiera el valor de la misma celda de la hoja
anterior y de la fila inferior
pero referenciarla de forma relativa, de forma que si copio la hoja en
otra nueva siga haciendo lo mismo
por ejemplo, la celda C4 de la hoja actual adquiere el valor de la celda
C5 de la hoja anterior ...



puedes definir una funcion personalizada mediante vba en un modulo de
codigo estandar/general/normal/... [p.e.]
a) inicia el editor de vba: atajo de teclado = {Alt}+{F11}
b) inserta un modulo: [menu] insertar / modulo
c) copia/pega las siguientes instrucciones en la ventana del modulo recien
creado [Modulo1]

Function DeLaHojaAnterior()
Application.Volatile True
With Application.Caller
DeLaHojaAnterior = _
.Parent.Parent.Worksheets(.Parent.Index - 1) _
.Range(.Address).Offset(1)
End With
End Function

en la celda 'C4' de la hoja_X [NO en la primera del libro] usas la funcion
como las *integradas* [p.e.] =DeLaHojaAnterior()
y te devolvera el contenido de la celda 'C5' de la hoja anterior [por
indice en el libro] AUN si se encuentra *oculta*

notas: no tiene prevencion/correccion/... de -posibles- errores [p.e. si
la usas en la primer hoja... no hay *hoja anterior*]
al usarla en celdas, el *Application.Caller* pasa a ser el objeto celda
desde la que se llama a la funcion
el *.Parent* de una celda es un objeto hoja y [a su vez] el *.Parent* de
un objeto hoja es un objeto libro
la funcion esta *preparada* para devolver exclusivamente la celda
*siguiente* [hoja anterior] de la celda *llamadora*
y podrias agregar argumentos para la hoja anterior/siguiente/n_? y la
referencia fila/columna +/- etc. etc. etc.
y... espero que no pienses *abusar* con el uso de funciones personalizadas
de este tipo :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#4 Héctor Miguel
09/09/2007 - 23:52 | Informe spam
hola, Ramon !

... funciona... solo hay una cosa que tampoco se como evitar... si es posible... conseguir
... en celdas en las que en la hoja anterior no hay nada... donde esta la llamada a la funcion me pone un "0"
ademas son celdas que normalmente contienen texto o nada...



modifica el codigo de la funcion +/- a lo siguiente:

Function DeLaHojaAnterior() As String
Application.Volatile True
With Application.Caller
With .Parent.Parent.Worksheets(.Parent.Index - 1) _
.Range(.Address).Offset(1)
DeLaHojaAnterior = IIf(Len(.Text), .Text, "")
End With
End With
End Function

saludos,
hector.
Respuesta Responder a este mensaje
#5 Ivan
10/09/2007 - 00:53 | Informe spam
hola chicos, productivo hilo (al menos para mi)

ahora que Ramon [creo que] tiene resuelto su problema, si me lo
permittis un par de consultas para Hector

[a lo mejor es que estoy un poco espeso <llevo un diita ...> y esta
1ª consulta es una tonteria en si misma, pero no acabo de verlo claro
(ni seguramente explicar bien la duda)]

1º) > DeLaHojaAnterior = IIf(Len(.Text), .Text, "")

aunque supongo que es otro uso de 0 =falso / <> 0 = verdadero, en
este caso no acabo de ver el funcionamiento ¿cual es la 'paja mental'
que se hace excel en este caso para asignar el .text a 'verdadero' y
no a 'falso'? o es que con iif (y supongo que con el si de hoja) el
simple hecho de asignar vedadero/falso en si mismos al 1er argumento
es suficiente?

2º) > y... espero que no pienses *abusar* con el uso de funciones
personalizadas de este tipo :))

aunque no tengo intencion de abusar (inicialmente ni siquiera de usar
fuera de algun experimento para aprender), cual es el riesgo en [el
posible abuso de ] este tipo de funciones

bueno, como veis son dudas creadas por la curiosidad mas que nada,
pero que a veces te 'comen la neurona'...

un saludo
Ivan

PD:(por cierto, un buen dato lo de Caller <a la saca>)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida