Rango como variable de una función
Publicado por bluek81 (1 intervención) el 04/04/2020 12:03:40
Un saludo a todos. Estoy aprendiendo a programar en VB para aplicaciones y me surge el siguiente problema:
Defino una función que tiene como variables un valor (Double) y dos rangos de valores X e Y. Es una función simple para interpolar.
Luego quiero hacer uso de este función en una rutina y es ahí donde me da el error (abajo pongo el código).
No sé la forma en la que debo incluir el rango de valores para que me funciones bien: al ejecutar la macro se para en la línea donde debe empezar a calcular los m(i)
Bueno, muchas gracias!!
Defino una función que tiene como variables un valor (Double) y dos rangos de valores X e Y. Es una función simple para interpolar.
Luego quiero hacer uso de este función en una rutina y es ahí donde me da el error (abajo pongo el código).
No sé la forma en la que debo incluir el rango de valores para que me funciones bien: al ejecutar la macro se para en la línea donde debe empezar a calcular los m(i)
Bueno, muchas gracias!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Function interpolacion(p As Double, X As Range, Y As Range)
Dim nfilas As Integer
nfilas = X.Rows.Count
Dim m() As Double
Dim c() As Double
ReDim m(1 To nfilas - 1) ' en esta matriz metemos las pensientes de cada segmento
ReDim c(1 To nfilas - 1)
For i = 1 To nfilas - 1 ' si hay n puntos habrá n-1 rectas
m(i) = (Y(i + 1, 1) - Y(i, 1)) / (X(i + 1, 1) - X(i, 1))
c(i) = Y(i + 1, 1) - m(i) * X(i + 1, 1)
Next i
If p < X(1, 1) Then interpolacion = m(1) * p + c(1) Else
For i = 1 To nfilas - 1
If p >= X(i, 1) Then interpolacion = m(i) * p + c(i) Else interporlacion = "error"
Next i
End Function
Sub biaxial()
Dim beta1 As Double
Dim alfa1 As Double
Dim npuntos As Integer
Dim RMnx() As Double
Dim RMny() As Double
Dim RNnx() As Double
Dim RNny() As Double
ReDim RMnx(1 To 18)
ReDim RMny(1 To 18)
ReDim RNnx(1 To 18)
ReDim RNny(1 To 18)
For i = 1 To 18
RMnx(i) = Sheets("aux1").Cells(3 + i, 5)
RNnx(i) = Sheets("aux1").Cells(3 + i, 6)
RMny(i) = Sheets("aux1").Cells(3 + i, 13)
RNny(i) = Sheets("aux1").Cells(3 + i, 14)
Next i
beta1 = Sheets("confi").Cells(20, 5)
alfa1 = Log(0.5) / Log(beta1)
npuntos = 30
Dim datos() As Double
ReDim datos(1 To npuntos, 1 To npuntos)
For i = 1 To npuntos
datos(i, 1) = Sheets("muro").Cells(64 + i, 4)
datos(i, 2) = interpolacion(datos(i, 1), Sheets("aux1").Range("E4:E23"), Sheets("aux1").Range("F4:F23"))
Next i
End Sub
Valora esta pregunta


0