Calculillo

Hola !
¿Cómo esta? Mi experto favorito.
Oye.
Fíjate que necesito
Hacer lo siguiente:
Tengo una columna con 3424 renglones en cada una de las celdas de las mencionadas (3424) tengo un valor numérico. Lo que debo de hacer es que la macro tome la primera celda y la compare con varios rangos que se encuentran en celdas y son los siguientes:
El valor numérico de cada una de las 3424 celdas se van a buscar en que rango cae:
1)B13limite inferior C13límite superior
2)B14limite inferior C14límitesuperior
3)B15limite inferior C15límite superior
4)B16limite inferior C16límitesuperior
5)B17limite inferior C17límite superior
6)B18limite inferior C18límitesuperior
7)B19limite inferior C19límite superior
Y en el que caiga se aplicará para cada uno de las 3424 celdas la tasa de acuerdo a una fórmula. Es importante que se ubique que tasa se va a aplicar.
Rango1 D1
Rango2 D2
Rango3 D3
Rango4 D4
Rango5 D5
Rango6 D6
Rango7 D7
Depende donde caiga se aplicará la siguiente fórnmula a cada una de las 3424 celdas:
VC: valor de la celda que se esta comparando
3SMA: valor de lo que contenga la celda B1.
Rt:Es la tasa que le corresponde a aplicar de acuerdo a la búsqueda del valor numérico respecto a los siete rango que existen.
IB=(VC-3SMA*Rt)/(1-Rt)
Y el resultado irlo colocadno en el renglón P9. De tal forma que el resultado de la siguiente celda (de las 3424 que corren desde la celda O9:03432) lo mostrará en la celda P10; así hasta recoorer las 3424 celdas.
Sé que para ti esto será muy sencillo espero que me puedes ayudarme.
Gracias Bere
Un beso
No me falles

3 respuestas

Respuesta
1
He supuesto que los valores los tienes en el rango A1:A3424 si no es así, tendrás que cambiar la linea:
VC = Range("A" & i).Value
por otra, por ejemplo, si los tienes en el rango: F3:F3426 seria:
VC = Range("F" & i+2).Value
Por ultimo, 3SMA lo cambié por SMA, si significa que se tiene que multiplicar por tres, pues cambia la linea:
Range("P" & i + 8).Value = (VC - SMA * Rt) / (1 - Rt)
por la linea:
Range("P" & i + 8).Value = (VC - (3 * SMA) * Rt) / (1 - Rt)
Y aqui va el codigo:
Sub Calcular()
Dim i As Integer
Dim VC As Long
Dim SMA As Long
Dim Rt As Long
For i = 1 To 3424
VC = Range("A" & i).Value
SMA = Range("B1").Value
Rt = Buscar_Tasa(VC)
Range("P" & i + 8).Value = (VC - SMA * Rt) / (1 - Rt)
Next i
End Sub
Function Buscar_Tasa(ValorInicial As Long) As Long
Dim i As Integer
For i = 13 To 19
If ValorInicial >= Range("B" & i).Value And ValorInicial <= Range("C" & i).Value Then
GoTo Encontrado
End If
Next i
GoTo Error
Encontrado:
Buscar_Tasa = Range("D" & i - 12).Value
Exit Function
Error:
MsgBox "no se ha encontrado el valor " & ValorInicial & " en los intervalos", , "Error"
Buscar_Tasa = 0
End Function
Tendrás que ponerlo en un Modulo dentro del editor de Visual basic (Insertar > Modulo) y podrás ejecutar la macro "Calcular" desde el menú Herramientas > Macro > Macros...
Bueno, espero que te sirva, ya me dirás como te ha ido
Respuesta
1
No veo necesario una macro. Te expongo mis motivos:
Tenemos una Base donde hemos registrado los límites, tal como dices, solo que no necesito el limite inferior (o superior) depende del planteamiento ya que los valores se solapan: es decir si el lim. Superior es 0, en el siguiente tramo el limite inferior es 1. ¿? Si esto es así, sigo con mi planteamiento.
En mi supuesto he dejado en B3:B8 los límites Superiores, por tanto, uso la fórmula de comparar al "menor o igual que".
=SI(F6<=$B$4;F6*$C$4;SI(F6<=$B$5;F6*$C$5;SI(F6<=$B$6;F6*$C$6;SI(F6<=$B$7;F6*$C$7;SI(F6<=$B$8;F6*$C$8;"fuera de rango")))))
A B C
3 limite inferior limite superior tasas
4 -9999 0 0,1
5 1 999 0,15
6 100 9999 0,12
7 1000 99999 0,2
8 10000 999999 0,05
G H
1 datos resultado
2 -101 -10,1
3 692 103,8
4 864 129,6
5 400 60
58 8,7
782 117,3
535 80,25
509 76,35
670 100,5
188 28,2
732 109,8
Esto en cuanto a buscar y calcular una tasa para un valor que está incluido en un rango que previamente establecemos.
Debes tener en cuenta en la fórmula =SI(...) que es muy importante el orden que le vas dando, ya que irá descartando uno a uno los condicionales que le pasas, si el orden no es el correcto, te saldrá directamente del condicional si pasar por los siguientes tramos de valores.
Supongo que esto te resuelve el resto de dudas, en todo caso, si necesitas mayor aclaración me dices y gustosa te ayudo.
Respuesta
1
El calculo no parece complicado, lo que me tendrías que decir es si los datos de las columnas y filas te refieres a datos dentro de una archivo de excel, por la manera de llamarlos creo que si, confírmame eso y si es así dime como conectas con la hoja de datos, así te envío una fucion preparada para eso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas