Función VBA cuántos dígitos diferentes hay en un número

¿Cómo están?
Necesito su ayuda para crear una función,-llamémosla "CuantosDiferentes"-, que me diga cuantos dígitos diferentes hay en un número determinado.
El formato de los números es siempre "00.000" (con cero delante si fuera el caso y el punto de separación de millar) y las celdas tienen el formato de número.
Ejemplos:
00.789 tiene 4 dígitos diferentes
01.569 tiene 5 dígitos diferentes
25.521 tiene 3 dígitos diferentes
Y así sucesivamente...
¿Alguien me echa una mano?

Respuesta
2

[Ho la y bienvenido a TodoExpertos!

Utiliza la siguiente función:

Function CuantosDiferentes(dato As String) As String
  Dim c As String, x As String
  Dim i As Long
  dato = Replace(dato, ".", "")
  For i = 1 To Len(dato)
    x = Mid(dato, i, 1)
    If InStr(1, c, x) = 0 Then
      c = c & x
    End If
  Next
  If c <> "" Then
    CuantosDiferentes = "tiene " & Len(c) & " dígitos diferentes"
  End If
End Function

Sigue las Instrucciones para una Función

  1. Abre tu libro de excel
  2. Para abrir VBa y poder pegar la función, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la función
  5. En cualquier celda utiliza la función, como cualquier otra función de excel

Ejemplo:

=CuantosDiferentes(A2)


Al final de mi respuesta hay un botón para valorar, es como un like.

MUCHAS GRACIAS, Dante. ¡Qué buena su función! Me encanta  :) Sencilla y efizaz, sí señor. Muy agradecido.
Únicamente he realizado una pequeña adaptación al formato de mis celdas. Me explico mejor que antes quizás no lo hice. Cuando puse que mis celdas tenían el "formato de número", quise decir que por ejemplo en el caso del número "00.117" mi celda pone "117" y mediante un formato personalizado (00.000) la celda muestra "00.117". De este modo la instrucción
dato = Replace(dato, ".", "") nunca llega a ejecutarse ya que el "." y los "0" de la izquierda tan solo son una máscara. Por eso y para obtener un resultado correcto, -ya que a efectos del análisis quiero que se tenga en cuenta las 5 cifras del número aunque las primeras sean "0"-, he cambiado su línea por:
dato = Format(dato, "00000")
Únicamente lo comento por si alguien quiere usar su función sobre una celda que muestre algún cero a la izquierda o el signo de puntuación mediante una máscara de formato.

[Encantado de ayudarte y gra cias por el feedback. 

1 respuesta más de otro experto

Respuesta

Excelente su función bastante interesante amigo Dante, con su permiso me permito ampliar la función para otros parámetros.

Function CuantosDiferentes(dato As Variant) As String
'Función para contar número de digitos diferentes hay
 'en un número o cadena de números
'Autor: Dante Amor
'Ampliada por : Eduardo Pérez Fernández
 On Error GoTo hay_error:
  Dim c As String, x As String
  Dim i As Long
   dato = CStr(dato)
   If InStr(1, dato, ",") Then
    dato = Replace(dato, ",", "")
   Else
    dato = Replace(dato, ".", "")
   End If
  For i = 1 To Len(dato)
    x = Mid(dato, i, 1)
    If InStr(1, c, x) = 0 Then
      c = c & x
    End If
  Next
  If c <> "" Then
    CuantosDiferentes = "tiene " & Len(c) & " dígitos/caracteres diferentes"
  End If
hay_error_exit:
   Exit Function
hay_error:
    MsgBox "Solo se aceptan números", vbCritical, "Error..."
    Resume hay_error_exit
End Function

Ejemplos:

¿

? CuantosDiferentes(0.225806451612903)
tiene 9 dígitos/caracteres diferentes

¿

? CuantosDiferentes("00.225806451612903")
tiene 9 dígitos/caracteres diferentes

¿

? CuantosDiferentes(0.225806451612903)
tiene 9 dígitos/caracteres diferentes

?CuantosDiferentes(7/31) 'Obtiene los dígitos diferentes de la división
tiene 9 dígitos/caracteres diferentes
?CuantosDiferentes("7/31")
Tiene 4 dígitos/caracteres diferentes
? CuantosDiferentes("nkkkctuaz")
Tiene 7 dígitos/caracteres diferentes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas