Extraer las iniciales de un nombre con Excel

martes, noviembre 16, 2010

Uno de mis lectores me consulta cómo extraer las iniciales de un nombre. En la columna A tenemos una lista de nombres (empleados de una empresa, invitados a un acontecimiento, etc.) y en la columna B queremos obtener las iniciales



En esta nota presentaré dos soluciones, una basada en funciones y la segunda con una UDF (función definida por el usuario).

Solución con funciones

Empecemos por el final: la fórmulas es (respirar hondo) ésta

=ELEGIR(LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1,IZQUIERDA(A2,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1),IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1))



¿Cómo funciona esta fórmula?

La expresión

LARGO(A2)-LARGO(SUSTITUIR(A2," ",""))+1

calcula de cuantas palabras está compuesto el nombre. La primer función LARGO da la cantidad de caracteres en la celda, incluidos los espacios. La segunda función LARGO calcula la cantidad de caracteres sin los espacios. La diferencia entre ambas más 1, es el número de palabras.

De acuerdo a este valor, la función ELEGIR activa la expresión adecuada para extraer las iniciales.

La primer inicial será siempre la primer letra del nombre, lo que logramos con la fórmula IZQUIERDA(A2,1) . Este es el primer caso de la función ELEGIR.

Para encontrar la segunda inicial tenemos que encontrar donde comienza la segunda palabra. El truco aquí es reemplazar el primer espacio con un carácter especial (por ejemplo #). Para sustituir el primer espacio con el carácter # usamos

SUSTITUIR(A2," ","#",1)

Para hallar donde se encuentra este carácter en el nombre usamos

HALLAR("#",SUSTITUIR(A2," ","#",1))+1

Y finalmente, para extraer la inicial usamos

EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)

Ahora tenemos que concatenarlo con la primer inicial lo que hacemos con el operador &

IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)

Para el caso que el nombre tenga tres palabras usamos la misma fórmula concatenando a la anterior la expresión

EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)

Quedando

IZQUIERDA(A2,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",1))+1,1)&EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",2))+1,1)

Para el caso de cuatro palabras en el nombre concatenamos a la expresión anterior

EXTRAE(A2,HALLAR("#",SUSTITUIR(A2," ","#",3))+1,1)

Esta fórmula tiene algunas serias limitaciones:

  • Puede extraer iniciales para nombres de hasta cuatro palabras (si bien podemos agregar otras expresiones y adaptarla para cinco o más palabras en el nombre)

  • En caso de nombres que incluyen "de", la función falla ya que no distingue entre minúsculas y mayúsculas



  • Otro problema surge si entre las palabras del nombre hay más de un espacio.

Una función definida por el usuario nos proporciona una solución más flexible (y elegante, en mi opinión).

Solución con una UDF

En un módulo común del editor de Vba (preferentemente en el Personal.xls) ponemos este código



Option Explicit

Function Iniciales(strText As String)
    Dim strLen As Long, iChr As Long
    Dim strTemp As String

    strLen = Len(strText)

    For iChr = 1 To strLen
        If Asc(Mid(strText, iChr, 1)) >= 65 And Asc(Mid(strText, iChr, 1))<= 90 Then
            strTemp = strTemp & Mid(strText, iChr, 1)
        End If
    Next iChr

    Iniciales = strTemp
    
End Function


Este código empieza por contar cuantos caracteres hay en la celda que contiene el nombre. Luego evalúa cada carácter y determina si es una letra mayúscula (Asc>=65 o Asc<=90). Si es mayúscula agrega el carácter a la variable strTemp. Al terminar la rutina, la función recibe el valor de strTemp.

13 comments:

Anónimo,  17 noviembre, 2010 16:13  

Sugiero crear una variable intermedia, por ejemplo: zChr = Mid(strText, iChr, 1), para simplificar el codigo.

Anónimo,  19 noviembre, 2010 13:16  

He copiado el código en personal.xls y en un libro aparte y en los casos me da el error #¿nombre?

Jorge L. Dunkelman 19 noviembre, 2010 18:13  

¿Cómo estás introduciendo la función en la celda? Aparentemente estás usando un nombre distinto a "iniciales" o no estás usando el asistente de funciones.

Anónimo,  22 noviembre, 2010 09:54  

=Iniciales(celda) o =PERSONAL.XLS!Iniciales(Celda), y no funciona. En este último caso, el error es #¡VALOR!.

Jorge L. Dunkelman 22 noviembre, 2010 16:44  

Estimado,
¿estás poniendo "celda" o la referencia a la celda que contiene el nombre?
En la barra de las fórmulas debería verse =Iniciales(A1), suponiendo que el nombre del cual se quiere extraer las iniciales está en la celda A1.
También puedes mandarme el archivo para que pueda ver donde está el problema.

edgvasq 23 noviembre, 2010 23:16  

Cada vez que leo este blog aprendo algo nuevo, y eso me agrada. Quisiera contribuir con lo que yo haría en este caso (con Excel 2003, que es el que uso).

Usaría del menú "Datos" la opción "Texto en columnas", escogiendo la opción "Delimitados". Luego de marcar como el delimitador "espacios", esta opción me separaría cada nombre en 3 ó 4 columnas (dependiendo del nombre que más palabras tenga).

Luego, en una columna adicional, usaría la fórmula =IZQUIERDA(A1,1) y copiaría según la cantidad de columnas y filas que sean requeridos, obteniendo así las iniciales en columnas separadas.

Por último, uniría las 3 ó 4 columnas de iniciales (obtenidas en el paso previo) en una sola columna (con =& ó concatenar). Es el mismo resultado, sólo que no es automático (pero a mí me resulta en un dos por tres, y tal vez a alguien más le interese).

Saludos desde Panamá,
E.V.

Anónimo,  26 noviembre, 2010 20:48  

Jorge, gusto en saludarte.
Te comento que me gustaria realizar dashboard con indicadores para medicion de variables, me han comentado de xcelsius como opcion de software, crees necesario dicho software para la graficación de variables o con excel se puede obtener algo parecido?.
Saludos.

Jorge L. Dunkelman 27 noviembre, 2010 06:21  

No tengo experiencia con Xcelsius, pero si puedo decirte que se pueden hacer dashboards muy elaborados con Excel. Puedes fijarte en las pocas notas que he publicado sobre el tema apretando el enlace "Dashboards" en la nube de etiquetas.
Tengo planificado publicar más notas en el futuro, tal vez una guía.

Anónimo,  01 febrero, 2011 18:46  

Exelente ..!!!! gracias .!!!
ayudo mucho ....!!!!
pero me toco cambiar todas las ( , ) x ( ; ), tambien x la celda que deseo cojer el nombre eso fue lo de menos gracias ..!!!

Anónimo,  10 agosto, 2012 05:15  

no funciona si todo esta en mayusculas


Function Iniciales(strText As String)
Dim strLen As Long, iChr As Long
Dim strTemp As String
strText = LTrim(RTrim(strText))
strLen = Len(strText)
strTemp = strTemp & Mid(strText, 1, 1)
For iChr = 2 To strLen
If Asc(Mid(strText, iChr, 1)) = 32 Then 'And Asc(Mid(strText, iChr, 1)) <= 90 Then
strTemp = Trim(strTemp & Mid(strText, iChr + 1, 1))
End If
Next iChr

Iniciales = strTemp

End Function

Anónimo,  01 septiembre, 2012 04:31  

Y tampoco funciona si todas estan en minisculas

Saludos

Jairo Castillo 28 junio, 2013 22:18  

recuerden que en algunos casos, no reconoce con coma, sugiero que le cambiae de Coma (,) a punto y coma (;)
para que les pueda reconocer la formula, sino les saldra error,

buen aporte de ante mano por estas formulas.

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP