Como hacer que una variable permanezca constante.

Hola , tengo la siguiente consulta para ver si me puede ayudar.

En el cuadro de abajo tengo el siguiente inconveniente.

La celda donde aparecen las tasa de cambio, en este ejemplo, son las siguientes

1.35580 para el EUR/USD y 1.6218 para la LIBRA /DÓLAR.

El problema que tengo es que debo cambiar diariamente el valor de estas celdas, pero cuando lo hago todas las operaciones anteriores toman el último cambio colocado.

Existe alguna manera de escribir las fórmulas, para que pueda cambiar diariamente las celdas de cambio sin que me altere las operaciones realizadas anteriormente.

CUADRO.

EUR/USD= 1.35580 GBP/USD= 1.62218

FECHA CANTIDAD DIVISA TASA DE CAMBIO TOTAL EN $

01/11/2013 500,00 EUROS 1,35580 677,90

04/11/2013 600,00 LIBRAS 1.62218 973,31

07/11/2013 800,00 EUROS 1,35580 1.084,64

12/11/2013 450,00 LIBRAS 1,62218 729.98

Gracias de antemano por su ayuda.

Saludos.

1 respuesta

Respuesta
1

Yo crearía una página con los cambios diarios y una función que me busque el cambio en función de la divisa y fecha. La función sería:

Option Explicit
Function buscarUltimoCambio(ByVal fecha As Date, ByVal divisa As String) As Double
Dim i As Integer
Dim sh As Worksheet
Dim ultFecha As Date
Dim ultCambio As Double
Set sh = Sheets("cambios")
ultFecha = DateSerial(1900, 1, 1)
ultCambio = 999999999
i = 2
Do While sh.Cells(i, 1) <> "" Or sh.Cells(i + 1, 1) <> "" Or sh.Cells(i + 2, 1) <> ""
If UCase$(sh.Cells(i, 1)) = UCase$(divisa) Then
If sh.Cells(i, 2) > ultFecha Then
ultFecha = sh.Cells(i, 2)
ultCambio = sh.Cells(i, 3)
End If
End If
i = i + 1
Loop
Set sh = Nothing
buscarUltimoCambio = ultCambio
End Function

En la página de cambios pondría en la primera columna la divisa, después la fecha y en la columna "C" el cambio. La línea 1 contiene las cabeceras.

Para llamar a la función pondría:

=buscarUltimoCambio(celda con la fecha; celda con la divisa)

Hola Santiago, gracias por tu pronta respuesta. Como en donde creo esa función que me enviaste, porque cuando voy a insertar función, ya tiene sólo las las funciones de Excel.

Si me pudieras decir donde hacerlo.

Saludos.

A ver, tienes que grabarla en un módulo en VB.

Entra al editor de VB pulsando <Alt><F11> y en el menú 'insertar' crea un módulo.

Ahí es donde se graban las funciones definidas por el usuario.

Por cierto, tendrás que grabar la hoja de cálculo con extensión ".xlsm" (Excel con macros).

Hola Santiago, hice lo que me dijiste y pude crear la función, buscar ultimo cambio, en Visual Basic; luego en una hoja aparte hice lo siguiente:

Celda A1=divisa Celda B1=fecha Celda C1=Tasa de cambio

Celda A2=USDCHF Celda B2=03/12/2013 Celda C2=1,10224

Luego en la otra página donde me interesa que se inserte el valor del cambio de día, en la celda coloque =buscarUltimoCambio(Hoja4!B2;Hoja4!C2) y me da el error #¡VALOR!

Saludos.

¿La página con los cambios se llama "cambios"?

La función está preparada para que si no encuentra el cambio devuelva 999999999. Algo exagerado que hará que te des cuenta de ese problema.

El error que indicas me suena más a que la página tenga un nombre incorrecto.

Por cierto, revisando la función he visto que tiene un fallo. Dónde pone la línea:

If sh.Cells(i, 2) > ultFecha Then

tiene que poner:

If sh.Cells(i, 2) > ultFecha And sh.Cells(i, 2) <= fecha Then

Hola Santiago, gracias por tu tiempo, pero no se hacer lo que me dices.

Saludos.

Prueba con esto:

https://dl.dropboxusercontent.com/u/24578142/cambioMoneda.xlsm

Hola Santiago, eso es lo que necesito. Lo que pasa es que ya tengo un formato diseñado donde en una de las celdas va el cambio, Traté, siguiendo tu ejemplo de adaptarlo a mi formato, pero no me funciona y no se que estoy haciendo mal.

Gracias de todas maneras por tu tiempo y tus conocimientos.

Saludos.

A ver, si vinculas directamente el cambio con los valores que tienes en la parte superior, cada vez que modifiques esas cifras se modificará en toda la página.

Por eso es imprescindible que el cambio aplicado en cada caso se conserve con la fecha del mismo o bien que grabes el valor del cambio en lugar de dejar la celda vinculada. Me refiero a poner en D2 el valor 1'3558 en lugar de la referencia a la celda que tiene ese valor. Si hay una referencia, al cambiar la celda referida te cambia todo.

Si quieres que la línea del día 1 mantenga el cambio que había en esa fecha o dejas el cambio como valor fijo o usas una función que dependa de la fecha.

En una hoja de cálculo, que yo sepa, no hay otra forma de hacerlo. Otra cosa sería si lo hicieras en base de datos, pero no es el caso y es más complejo.

Si quieres pásame tu hoja de cálculo e intento ponerla con el formato que te comento.

Hola Santiago, para pasarte la hoja de cálculo, necesito tu correo electrónico para enviártela como archivo adjunto.

Saludos.

Puedes subirla a un disco virtual (dropbox u otro) y me pasas el enlace.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas