Crear Función VBA para return array
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.
You 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.
===
UDF 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.
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]