image

Como sugiere el título, aprenderemos cómo crear una función definida por el usuario en Excel que devuelva una matriz. Ya hemos aprendido cómo vincular: / vba-user-defined-functions [crear una función definida por el usuario en VBA]. Entonces, sin perder tiempo, comencemos con el tutorial.

¿Qué es una función de matriz?

Las funciones de matriz son las funciones que devuelven una matriz cuando se utilizan. Estas funciones se utilizan con combinaciones de teclas CTRL + MAYÚS + ENTRAR y es por eso que preferimos llamar a la función de matriz o fórmulas como función y fórmulas CSE.

La función de matriz de Excel es a menudo fórmulas de matriz multicelda. Un ejemplo es el `enlace: / funciones-matemáticas-excel-función-transposición [función TRANSPONER] ‘.

Creando una función de matriz UDF en VBA

Entonces, el escenario es que solo quiero devolver los primeros 3 números pares usando la función ThreeEven ().

El código se verá así.

Function ThreeEven() As Integer()

'define array

Dim numbers(2) As Integer

'Assign values to array

numbers(0) = 0

numbers(1) = 2

numbers(2) = 4

'return values

ThreeEven = numbers

End Function

Usemos esta función en la hoja de trabajo.

imageYou can see that, we first select three cells (horizontally, for vertical we have to use two-dimensional array. We have it covered below.). Then we start writing our formula. Then we hit CTRL+SHIFT+ENTER. This fills the selected cells with the array values.

Nota:

  • En la práctica, no sabrá cuántas células necesitará. En ese caso, seleccione siempre más celdas que la longitud de matriz esperada. La función llenará las celdas con una matriz y las celdas adicionales mostrarán el error # N / A.

  • De forma predeterminada, esta función de matriz devuelve valores en una matriz horizontal.

Si intenta seleccionar celdas verticales, todas las celdas mostrarán solo el primer valor de la matriz.

¿Cómo funciona?

Para crear una función de matriz, debe seguir esta sintaxis.

Function functionName(variables) As returnType()

dim resultArray(length) as dataType

'Assign values to array here

functionName =resultArray

End Function

La declaración de función debe ser como se define arriba. Esto declaró que es una función de matriz.

Mientras lo usa en la hoja de trabajo, debe usar la combinación de teclas CTRL + MAYÚS + ENTRAR. De lo contrario, solo devolverá el primer valor de la matriz.

Función de matriz VBA para devolver matriz vertical

Para que su función de matriz UDF funcione verticalmente, no necesita hacer mucho. Simplemente declare las matrices como una matriz bidimensional. Luego, en la primera dimensión agregue los valores y deje la otra dimensión en blanco. Así es como lo haces:

Function ThreeEven() As Integer()

'define array

Dim numbers(2,0) As Integer

'Assign values to array

numbers(0,0) = 0

numbers(1,0) = 2

numbers(2,0) = 4

'return values

ThreeEven = numbers

End Function

Así es como se usa en la hoja de trabajo.

===

imageUDF Array Function with Arguments in Excel* In the above examples, we simply printed sum static values on the sheet.

Digamos que queremos que nuestra función acepte un argumento de rango, realice algunas operaciones en ellos y devuelva la matriz resultante.

Ejemplo Agregar «-done» a cada valor en el rango

Ahora, sé que esto se puede hacer fácilmente, pero solo para mostrarle cómo puede usar las funciones de matriz VBA definidas por el usuario para resolver problemas.

Entonces, aquí quiero una función de matriz que tome un rango como argumento y agregue «-done» a cada valor en el rango. Esto se puede hacer fácilmente usando el link: / tips-concatenate-formula-in-microsoft-excel [función de concatenación] pero usaremos una función de matriz aquí.

Function CONCATDone(rng As Range) As Variant()

Dim resulArr() As Variant

'Create a collection

Dim col As New Collection

'Adding values to collection

On Error Resume Next

For Each v In rng

col.Add v

Next

On Error GoTo 0

'completing operation on each value and adding them to Array

ReDim resulArr(col.Count - 1, 0)

For i = 0 To col.Count - 1

resulArr(i, 0) = col(i + 1) & "-done"

Next

CONCATDone = resulArr

End Function

Explicación:

La función anterior aceptará un rango como argumento y agregará «-done» a cada valor en el rango.

Puede ver que hemos usado una colección de VBA aquí para contener los valores de la matriz y luego hemos realizado nuestra operación en cada valor y los hemos agregado nuevamente en una matriz bidimensional.

image

Así que sí, chicos, así es como pueden crear una función de matriz VBA personalizada que puede devolver una matriz. Espero que haya sido lo suficientemente explicativo. Si tiene alguna pregunta sobre este artículo, colóquela en la sección de comentarios a continuación.

Haga clic en el enlace de abajo para descargar el archivo de trabajo:

`link: /wp-content-uploads-2019-12-Create-VBA-Function-to-Return-Array-1.xls [__ Create VBA Function to Return Array]

Artículos relacionados:

link: / vba-user-defined-function [Cómo crear una función definida por el usuario a través de VBA] | Aprenda a crear funciones definidas por el usuario en Excel `link: / custom-functions-userdefined-functions-from-other-workbooks-using-vba-in-microsoft-excel [Usando una función definida por el usuario (UDF) de otro libro usando VBA en Microsoft Excel] `| Utilice la función definida por el usuario en otro libro de Excel `enlace: / custom-functions-return-error-values-from-user-defined-functions-using-vba-in-microsoft-excel [Devolver valores de error desde funciones usando VBA en Microsoft Excel] `| Descubra cómo puede devolver valores de error desde una función definida por el usuario

Artículos populares:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-incrementa-your-productividad [50 accesos directos de Excel para aumentar su productividad]

enlace: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP en Excel]

enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016]

link: / excel-formula-and-function-excel-sumif-function [Cómo usar la función SUMIF en Excel]