Excel - Rango como variable de una función

 
Vista:

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!!



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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder