Es normal que no te devuelva correctamente ....
Tienes varias cosas que corregir, pero sólo me voy a ceñir a las 2 funciones del módulo
1º ) Esta declaración: 'Function mx(may As Integer)' (y la otra del menor) , cualquier declaración de una función sin tipo de retorno se entiende como Variant, sin embargo se observa que recibe un entero,y viendo lo que hace sería pués lo correcto que devolviera un entero tal que declararla así: 'Function mx(may As Integer) as integer' . Si en una función no vas a usar el parámetro de retorno y lo devuelves por referencia directamente desde el parámetro, entonces sería mejor que fuera una sub en vez de una function. aunque en algunos casos una sub pueda funcionar más rápido en devolver valores que una función, sólo interesa cuando la cantidad de llamadas es muy grande y no usamos inmeditamente el valor devuelto, ya que si esto último no se cumple no existe ventaja en la velocidad.
La función (funciones) que tienes son un ejemplo donde es conveniente devolver el valor como devolución de llamada porque el valor es un resultado final, si una matriz fuera evaluada sobre un sólo ítem la llamada a la función sería acorde que se devolviera con byref a través del parámetro dejando la devolución de la llamada libre para devolver una circunstancia concreta, ya que sería un valor 'medio' de un proceso mayor y no un proceso final en sí mismo.
En una función no conviene usar otroas variables que las declaradas explícitamente dentro de la misma, a través de sus parámetros y/o algunas constantes globales, así usar 'list1', no es lo adecuado, porque al hacer eso restringes la capacidad de una función, ya que la fuerzas a trabajar a una parcela concreta (sólo funciona con esa lista) si en cambio le pasas como parámetro un listbox la función podría aplicarse a cualquier lista que le pasaras y no sólo a list1.Es decir le estás restando universalidad a la función. Pero bueno, supondremos que es sólo un ejercicio...
Si como dices esas funciones están en un módulo, duiudo que funcionen ya que marcarían error al usar list1, y en ese caso se debería indicar como form1.list1... por lo que queda claro que no lo tienes en un módulo como señalas sino dentro del formulario.
En la devolución de las funciones (las dos) lo que devuelves es 1, fíjate ya le dices después de hacer lo que sea que 'mx = 1', por tanto lo que devolverá es 1. Por otro lado puesto que no declaras may dentro del parámetro se sobrenetiende que es byRef por lo que todavía podría funcionar, sin embargo al recibir la llamada, ignoras ese valor en favor del retorno explíxito de la llamada.
'n = mx(may)' . O usas call mx(may) y sigues usando may hasta el final o usas mx= may al final de la función.
También se observa en relación con lo anterior un intento mísero de querer tener control del resultado de la función cuando usas: 'If n = 1 Then', sin embargo resulta absurdo desde el momento en que nunca tiene oportunidad de ser un valor distinto de 1 ya que la función al final hace un si o si 'mx = 1', esto sólo puede variar cuando haya un error y en ese caso ya el propio entorno se encarga de parar la ejecución porque tampoco existe control de errores (si es que esperaras uno, sobre código adicional que hayas retirado al mostrar el ejemplo).
Luego veo que en el supuesto módulo declaras variables globales a variables que se repiten dentro de una y otra función, al respecto debes saber que las variables de una función 'nacen' y deben 'morir' en la función, así la línea 'Dim nume, j As Integer, y As Integer, i, p As Integer' es casi un insulto a la función, pués que impide en un momento dado usar i ó p en otra función y obtener errores porque de entrada no eran 0, debo recordar si el valor que tiene actualmente me es útil al caso presente o acaso si es opuesto ?.... esto no son formas...
En fin en tan poco código produces tantos y tantos errores que se me han quitado hasta las ganas de resolverte las dudas... porque creo que igualmente sólo serviría para cometer otras decenas de atropellos... sólo puedo recomendarte que dejes el código de momento, y que no vuelvas a escribir una línea más hasta que te hayas leído por lo menos un manual que sepas que es una variable, qué es una función, que es un método o subrutina, etc, etc, etc... de lo contrario adquirirás muy malos hábitos que luego te costará mucho corregir y serás un programador caótico e ineficiente sin futuro alguno.