Formula que usa Vectores o Arrays

actjfc

Active Member
Joined
Jun 28, 2003
Messages
416
Amigos,

Estoy desarrollando una pequena funcion que quiero usarla como una matrix o arrays, ustedes saben susando {= }. Lo que yo quiero que haga es simple. La matriz original tiene "x" numero de filas (variable) y la nueva matriz construida debe mostrar las acumulacion de los valores que aparecen en la filas.

Me explico:

Matrix original:

1 2 3

4 5 6

7 8 9

Matrix despues de aplicar la funcion Test usando {}

1 3 6
4 9 15
7 15 24

Por favor revisen mi codigo abajo y diganme que estoy haciendo incorrectamente.

Function Test(rng) As Variant

Dim Matrix As Variant

Dim RowCount As Long
Dim ColCount As Long

Dim i As Long, j As Long

RowCount = rng.Rows.Count
ColCount = rng.Columns.Count

For i = 1 To RowCount
For j = 1 To ColCount

Matrix(i, j) = Matrix(i, j - 1) + rng(i, j)

Test = Matrix(i, j)

Next j
Next i

End Function

Gracias
 

Excel Facts

What did Pito Salas invent?
Pito Salas, working for Lotus, popularized what would become to be pivot tables. It was released as Lotus Improv in 1989.
Code:
Function Test(rng As Range) As Variant

   Dim Matrix As Variant

   Dim RowCount As Long
   Dim ColCount As Long

   Dim i As Long, j As Long

   RowCount = rng.Rows.Count
   ColCount = rng.Columns.Count
   
   'Definir el tamaño de la matriz
   ReDim Matrix(1 To RowCount, 1 To ColCount)

   For i = 1 To RowCount
      For j = 1 To ColCount
         'Si no se revisa para j = 1
         'genera error en la linea Matrix(i, j - 1)
         If j = 1 Then
            Matrix(i, j) = rng(i, j)
         Else
            Matrix(i, j) = Matrix(i, j - 1) + rng(i, j)
         End If
      Next j
   Next i
   
   'Se asigna todo la matriz como resultado
   Test = Matrix

End Function

Saludos.
 
Upvote 0
Gracias Juan Pablo,

Modifique el codigo de la siguiente forma. (perdon pero tambien pregunte lo mismo en el foro en Ingles, porque no habia recibido respuesta en Espanol). Sin embargo, la unica ayuda efectiva que he recibido es la suya. Ademas en ingles tomo otra ruta, ahora se esta hablando de Subrutinas y yo necesito poner esto como una funcion. Gracias! .

La formula como Ud. la sugiere funciona "bien", sin embargo la modifique para que tome en cuenta sus otras sugerencias. Pero, ahora no funciona. Tambien me gustaria que se pueda definir el rango de entrada como absoluto. $Rn$Cn, esto es clave para las funciones planeo desarrollar despues, ya que actualmente si se ponen referencias absolutas, entonces la formula no funciona, incluso la formula original como ud. la propone tampoco funcionaria.

Gracias otra vez por su ayuda!

(En Espanol puedo expresar mis ideas mejor que en ingles, viva el idioma Espanol!!)

Public Function Test(rng As Range) As Variant

Dim Matrix As Variant
Dim R As Long
Dim C As Long

Dim ReturnColumn As Boolean

R = rng.Rows.Count
C = rng.Columns.Count

ReturnColumn = False

If R > 1 Then
If C > 1 Then
ReDim Matrix(R, C)
Else
ReDim Matrix(R)
ReturnColumn = True
End If
Else
ReDim Matrix(C)
End If

For i = 1 To R
For j = 1 To C
If j = 1 Then
Matrix(i, j) = rng(i, j)
Else
Matrix(i, j) = Matrix(i, j - 1) + rng(i, j)
End If
Next j
Next i

If ReturnColumn = True Then
Test = Application.WorksheetFunction.Transpose(Matrix)
Else
Test = Matrix
End If

End Function
 
Upvote 0

Forum statistics

Threads
1,223,952
Messages
6,175,589
Members
452,653
Latest member
craigje92

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top