De entrada la función es una función abstracta, es decir hace un filtrado de elementos sin necesidad de saber cual es el contenido de aquellos elementos, más allá de saber que al parecer aloja (al menos) dos tipos de datos, rechazando aquellos que son de tipo buleano.
Por otro lado el código es bastante sucio...
En VB6 un variant es un tipo que en principio puede contener a cualquier otro tipo, incluso un array del propio tipo variant, más aún podría contener una colección del tipo que sea u ocultar todo un árbol...
...por lo que el uso (correcto) de la función requiere en gran medida saber qué datos son los que recibe la función de otro modo es fácil incurrir en errores.
Una ventaja del tipo Variant es que relaja el chequeo de tipos, lo que lo hace apto para ser usado en funciones que precisen ser tratadas por igual sin distintición del tipo de datos (esto es, no exige así, disponer de una función de ídéntica funcionalidad para tratar otro tipo de datos, solo por tratarse de un tipo distinto. Resulta incómodo esos lenguajes que fuerzan a hacer por ejemplo una función sort(), para cada tipo de datos que se quiera ordenar: una para ordenar arrays de bytes, otra para arrays de cadenas, otra para arrays de enteros, etc...).
La función además de sucia adolece de alguna imprecisión que puede incurrir en error, por ejemplo al asumir que el vector comienza en el índice 1. Así sería más correcto cambiar la firma de los bucles desde:
for i = 1 to cant
a una más precisa:
dim inicio as long
'...
inicio = LBound(vector)
'...
for i = inicio to cant
Esto excluye posibles errores en vectores cuyo índice no comience en 1. Salvo que se se tenga la absoluta certeza de que siempre comienzan en 1...
Debe notarse que en VB6, un array admite cualquier valor en el subíndice inicial, mientras que muchos lenguajes lo fijan a 0 ó incluso 1 (como pasa en varias versiones de Fortran).
El redimensionamiento del array 'mat', no tiene sentido que sea de dos dimensiones cuando en una dimensión solo habrá un elemento.
Pero claro, tampoco puede alegarse que esté mal, por que en vb6 un array puede ser redimensionado posteriormente conservando su contenido, pero en tal caso, sólo con la última dimensión. ...luego, si fuera de la función (en otra parte del código desde el que se llama) se lleva a cabo tal redimensionado tendría validez, aunque discutida, pués hay maneras más eficaces de llevarlo a cabo pero sobre todo por eficiencia, pués nada impide pasar un segundo o tercer parámetros para indicar la dimensión e índice.
Todavía otro asunto más espinoso es que el array parece ordenado por columnas en vez de por filas, una vez más como digo tiene validez si fuera se ha de redimensionar y asignar después otros arrays...
(para que se entienda mejor, lo propio es dimensionar por filas así:
redim mat(1 to 1, 1 to aux)
...lógicamente acorde a la declaración en el resto del código debe igualmente ser intercambiado de lugar las variables acorde a que apunten a cada dimensión correctamente.)
En definitiva el código es muy sucio y a buen seguro que teniendo el resto del código del que forma parte de lo que sea que se pretende hacer, acepta sí o sí lugar a mucha optimización.
En cuando al código, lo que hace es... 1 - En el primer bucle localiza que elementos del array no son de tipo buleano, con el único propósito de contarlos.
2 - Cuando termina dicho bucle usa ese valor de cuenta (conoce cuantos elementos hay que no son buleano), para dimensionar (alojar memoria para) un array con dicho número de elementos (mat).
3 - Luego en el segundo bucle, se localiza los mismos elementos contados en el primero, pero ahora con el propósito de ser asignados al nuevo array... secuencialmente.
El resultado es que procedente de un array de entrada con valores que tiene buleanos y otros tipos de datos (no se entra en que otros tipos de datos puedan ser), se filtra para devolver otro array que contienee exclusivamente todos aquellos elementos que no son de tipo bucleano. El primer bucle es necesario porque a priori se desconoce cuantos son buleanos y cuantos de otro/s tipo/s. Lo que se vaya a hacer después con dichos datos, nada se sabe.
Sobre lo que dices que hace el código (completo) que te hallan pasado, en principio no puede afirmarse, ni negarse nada, sin conocer los datos u otro código adicional, porque la función como te he indicado es de naturaleza abstracta, solo puede afirmarse de ella que filtra elementos de tipo buleanos (sin saber (ni necesitarlo para hacerlo) qué otros tipos contiene).
Un array de variants puede contener elementos heterogéneos. Por ejemplo:
dim x() as variant ' define que que x es un array dinámico con elementos individuales variant.
dim by as byte, bo as boolean
dim j as integer, k as integer
dim s as string
dim img as IpictureDisp
by= 255
bo = TRUE
j =18765: k = (j\by)
s = "Hola" ' asignado un simple string...
s = Dir("C:\windows\web\wallpaper\*.jpg") ' ahora asignado la ruta de una imagen jpg (si existen en esa carpeta imágenes jpg, toma la primera).
set img = loadpicture(s)
' alojando espacio en memoria para 100 elementos de tipo variant para el array x
redim x(0 to 99)
' Asignación a los elementos del array, diferentes tipos (heterogéneos), como ejemplo.
x(0) = by
x(1)= bo
x(2) = j
x(3) = k
x(4) = s
set x(5) = img
msgbox x(4) ' la ruta de la imagen... con el nombre dle fcihero.
msgbox "el valor del índice 3 del array x, es: " & x(1) ' True
msgbox cstr(x(3)) ' el integer asignado a la posición 3, que lo convertimos a un string para su presentación
' (la conversión no es requerida persé. ...se hace una conversión explícita del tipo integer a string, cuando el tipo esperado a la derecha (en la asignación) es de tipo string y el de la izquierda (el resultado de la expresión) es de tipo numérico).
Al igual que en cualquier otro lenguaje el uso de tipos variants (tipos universales, un tipo que puede actuar, representar o comportarse como otro), sale costoso, esto es especialmente más cierto en vb6 que en otros lenguajes por la forma en que se aborda, y son la solución equivalente a las uniones disponibles en otros lenguajes, como ADA por ejemplo.
Si tienes alguna duda a cualquier respecto, pregunta...