Frank necesita convertir 4.000-5.000 nombres diarios de mayúsculas a mayúsculas. La función ADECUADA le da un resultado aceptable que aún necesita revisión y edición manual para hacer frente a acrónimos, etc. que no deben encubrirse. El pensamiento de Frank es que probablemente necesite que la función incluya una búsqueda en algún tipo de lista de excepciones, por lo que se pregunta si existe tal capacidad para la conversión de casos en Excel.

La mejor manera de manejar esto dependerá de los datos con los que esté comenzando. Por ejemplo, digamos que los siguientes son los valores de dos celdas en sus datos de origen:

Big John's Mining, LLC USA

Si su excepción es que no desea que se cambie el caso de LLC, entonces necesita un método que analice partes de cada celda. Si su excepción es que no desea que se cambie el caso de EE. UU., Entonces necesita un método que evalúe el contenido de cada celda en su conjunto.

Es más fácil ocuparse del segundo tipo de datos que del primero, así que veamos eso primero. La siguiente fórmula se basa en una lista de excepciones que tiene en algún lugar de su libro de trabajo. Esta lista de excepciones debe configurarse como un rango con nombre, utilizando el nombre Excepciones.

Si sus datos originales están en la columna A, puede colocar esta fórmula en la celda B1 y luego copiarla tanto como sea necesario:

=IFERROR(VLOOKUP(A1,Exceptions,1,0),PROPER(A1))

Cualquier celda que coincida completamente con cualquier cosa en su tabla de Excepciones terminará luciendo exactamente como la excepción, y cualquier celda que no coincida completamente terminará aplicándose ADECUADO.

En cuanto al primer tipo de datos (donde debe buscar excepciones dentro de cada celda), es mejor confiar en una macro. El siguiente es un ejemplo de uno que podría usar como punto de partida.

Function MyProper(ByVal r As Range) As String     Dim vExceptions As Variant     Dim vReplacements As Variant     Dim vWords As Variant     Dim iRaw As String     Dim J As Integer     Dim K As Integer     Dim sTemp As String

' Exceptions array     vExceptions = Array("USA", "PhD", "LLC", "and", _       "Kentucky", "D.C.")



' Replacements array     vReplacements = Array("USA", "PhD", "LLC", "and", _       "KY", "DC")



' Convert the text to Proper case and store in a string     iRaw = StrConv(r, 3)

' Split the words into an array     vWords = Split(iRaw, " ")

For J = LBound(vWords) To UBound(vWords)

For K = LBound(vExceptions) To UBound(vExceptions)

If UCase(vWords(J)) = UCase(vExceptions(K)) Then                 vWords(J) = vReplacements(K)

End If         Next K     Next J

' Rebuild the cell contents     sTemp = ""

For J = LBound(vWords) To UBound(vWords)

sTemp = sTemp & " " & vWords(J)

Next J

MyProper = Trim(sTemp)

End Function

Esta es una función definida por el usuario, por lo que puede utilizar lo siguiente para realizar una conversión en sus datos de origen:

=MyProper(A1)

La velocidad de la macro dependerá de dos cosas: la cantidad de veces que se usa en su hoja de trabajo (la cantidad de palabras que necesita modificar) y cuántas excepciones está buscando en la macro. Con 4.000-5.000 palabras y una docena de excepciones comprobadas, la macro debería funcionar lo suficientemente rápido como para ser aceptable. (¡Sin duda será más rápido que realizar la comprobación a mano!)

La función se basa en dos matrices, vExceptions y vReplacements. Desglosa el contenido de la celda en la matriz de palabras clave mediante la función Dividir. (Después de que se ejecute la función Split, cada elemento de la matriz de vWords contendrá una palabra, según lo definido por la aparición de un espacio). Luego, cada elemento de la matriz de vWords se compara con cada elemento de la matriz de vExceptions. Si coinciden (o, más correctamente, si la versión en mayúsculas de cada uno de ellos coincide), se usa el elemento correspondiente de la matriz vReplacements en lugar de la palabra original. Este enfoque tiene el beneficio adicional de permitirle sustituir las siglas, como se hace al sustituir KY por Kentucky y DC por D.C.

Recuerde que mencioné que esta macro es solo un buen punto de partida.

Obviamente, deberá modificarlo para reflejar sus listas de excepciones y reemplazos. Además, debe comprender que si hay puntuación en sus datos originales, esa puntuación se considera parte de las «palabras» explotadas por la función Dividir. Por ejemplo, si los datos originales tienen algo como «Davis, LLC, Stanton», las comas se consideran parte de las palabras que siguen. (Recuerde que la división se realiza en espacios). Por lo tanto, terminará con «Davis, Llc, Stanton» en su resultado porque la «LLC» en la matriz vExceptions no coincidirá con la «LLC», que está en vWords formación.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (7840) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.