Estimados amigos del foro:
He importado a Excel un archivo txt que contiene el RUC (registro único de contribuyentes) y la razón social de personas jurídicas. En muchos casos me aparecen caracteres extraños, por ejemplo en vez de traerme la palabra "COMISIÓN", aparece "COMISIÓN". Esto generalmente ocurre cuando existen vocales acentuadas y la letra Ñ.
¿Existe alguna forma de identificar o resaltar las celdas que contienen caracteres extraños?
Esto me ha ocurrido alguna vez cuando importo datos de la web o de alguna base de datos donde están en unicode.
parece que microsoft que emplea un estándard ISO-8859 y Unicode tienen más de un punto de desacuerdo.
Cuando no puedo combatir la causa porque no puedo modificar el formato de origen, combato los síntomas:
Para otra ocasión creé una función que reemplaza estos códigos extraños y los sustituye por lo que debería haber sido.
Verás que para algunos, como la Á, concateno "Ã" & Chr(129), esto es porque el resultado iso incluye esa à y un carácter no visible.
esta función incluye las vocales mayúsculas y minúsculas acentuadas, y las ñ, pero faltarían las diéresis y otros caracteres. bueno, creo que es sencillo añadir los caracteres que necesites siguiendo esta misma pauta.
Function utftoiso(Texto As String) As String
' corrige caracteres extraños motivados por interpretar caracteres unicode como iso
'acentos minúscula
Texto = Replace(Texto, "á", "á")
Texto = Replace(Texto, "é", "é")
Texto = Replace(Texto, "Ã", "í")
Texto = Replace(Texto, "ó", "ó")
Texto = Replace(Texto, "ú", "ú")
'acentos mayúscula
Texto = Replace(Texto, "Ã" & Chr(129), "Á")
Texto = Replace(Texto, "É", "É")
Texto = Replace(Texto, "Ã" & Chr(141), "Í")
Texto = Replace(Texto, "Ó", "Ó")
Texto = Replace(Texto, "Ú", "Ú")
'ñ
Texto = Replace(Texto, "ñ", "ñ")
Texto = Replace(Texto, "Ñ", "Ñ")
' Texto = Replace(Texto, "", "")
'símbolos
Texto = Replace(Texto, "¿", "¿")
Texto = Replace(Texto, "¡", "¡")
Texto = Replace(Texto, "º", "º")
Texto = Replace(Texto, "ª", "ª")
utftoiso = Texto
End Function
------
Ya sé Excel, pero necesito más.
Puedes Incluso emplear esta función dentro de una macro que corrija los textos del rango seleccionado:
algo así:
Sub ConvertirRangoUTFtoISO()
Dim celda As Range, rangoelegido As Range
Set rangoelegido = Selection
For Each celda In rangoelegido.Cells
If Not (celda.HasFormula Or IsEmpty(celda) Or IsNumeric(celda.Value) Or IsDate(celda.Value)) Then
celda.Value = utftoiso(celda.Value)
End If
Next
Set rangoelegido = Nothing
Set celda = Nothing
End Sub
------
Ya sé Excel, pero necesito más.
Muchísimas gracias Paco por toda tu ayuda! ¿Cómo podría utilizar esta función? Perdón por mi ignorancia en el tema de las macros, es todavía un mundo por descubrir para mí
Empezando con macros....
Bueno, pulsa [Alt] [F11] para mostrar el editor de VBA.
En el foro hay muchos temas sobre esto, por ejemplo
http://www.necesitomas.com/empezando-vba#comment-410
http://www.necesitomas.com/archivo_bas_excel#comment-1624
Si vas a utilizar esta función en más de un libro, te interesa guardarla en tu libro de macros personal
Si aún no tienes un libro de macros personal, graba una macro y dile que la quieres guardar en el libro de macros personal, esto fuerza la creación de dicho libro.
añade un módulo a tu libro de macros personal y ahí pones el código de esta función.
Si sólo vas a utilizar la función en este libro, entonces guárdala en un módulo dentro de este libro
Abre el editor de VBA e inserta un módulo en este libro y ahí pones el código
Una vez tengas el código de tu función, Para utilizar la función en un libro, puedes encontrarla en el grupo de funciones definidas por el usuario:
------
Ya sé Excel, pero necesito más.
Muchísimas gracias Paco, excelente explicación, sumamente ilustrativa!
Cuando copio la macro al editor me sale error en la siguiente linea, que debo hacer?
celda.Value = utftoiso(celda.Value)
Pero ¿has copiado también la función utftoiso?
¿Qué error te da?
------
Ya sé Excel, pero necesito más.
Ok, ahora si me resultó, no había copiado la función, disculpa soy novato en visual basic.
Gracias Paco!!!
como indicar a excel en el recorrido de una cadena que identifique parentesis...