Conversión adecuada de casos con excepciones (Microsoft Excel)
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.