Función que devuelve una matriz

2 envíos / 0 nuevos
Último envío
Andrés Montaña
Imagen de Andrés Montaña
Offline
última acción: Hace 4 años 9 meses
alta: 25/07/2018 - 00:10
Puntos: 135
Función que devuelve una matriz

Hola  quiero hacer una Funcion como MMULT pero que hace algo distinto, quiero que haga lo siguiente.

matriz 1

| 1 0 1 |

| 1 0 1 |

| 1 1 1 |

matriz 2

| 1 0 1 |

| 0 0 0 |

| 0 0 1 |

Lafuncion suma termino a termino y si el resultado es dos en la matriz resultante pondra 1

lo que no se hacer es que la funcion devuelva la matriz y lo haga al seleccionar y presionar Ctrl+Mayús+Enter

se que que esto lo pedo hacer con una macro, o sea un procedimiento Sub...End Sub)

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 3 días 15 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Para que tu función devuelva

Para que tu función devuelva una matriz, debes tener varias cosas en cuenta

Define tu función como Variant

Dim mifuncion(rangodeentrada as Range) as Variant

Utiliza una variable Array para almacenar el resultado mientras lo vas calculando

Dim Resultado() as Variant

Si necesitas conocer el rango donde se ha introducido la fórmula con Ctrl Intro, puedes emplear Application.Caller (esto, como es lógico, funciona si la fórmula se llama desde celdas de la hoja de cálculo). esto es interesante para saber por ejemplo las dimensiones de tu resultado

  With Application.Caller
        Filasdelresultado = .Rows.Count
        Columnasdelresultado = .Columns.Count
  End With
Redim Resultado(1 to Filasdelresultado,1 to Columnasdelresultado)

realiza los cálculos que tengas que hacer con la función y ve guardándolos en esa variable auxiliar para el resultado

y por último asigna el valor del resultado de la función

mifuncion=Resultado

 

Tienes más información al respecto, por ejemplo aquí: http://www.cpearson.com/excel/returningarraysfromvba.aspx 

 

------
Ya sé Excel, pero necesito más.