Eliminar tildes

06/09/2006 - 17:41 por Esteban Dido | Informe spam
Hola,

¿Cómo se pueden eliminar los tildes de todos los datos de una columna?
Ej. si en la columna "A" tengo

lápiz
Calcetín
JABÓN
Atún
caFÉ

necesito que en la columna "B" aparezca

lapiz
Calcetin
JABON
Atun
caFE

Saludos

Preguntas similare

Leer las respuestas

#1 Vinchenzo vinç
07/09/2006 - 22:01 | Informe spam
"Esteban Dido" escribió en el mensaje news:
Gracias Francisco, adapté el código que me diste y funciona perfecto para lo
que necesitaba.



Hola Esteban,
como mínimo deberás añadir la diéresis, pues es una tilde imprescindible para -por ejemplo- escribir correctamente "averigüemos la ambigüedad lingüística"... estarás de acuerdo.

Pero dejando a un lado normas ortográficas de lenguas concretas, y si tu intención es -en efecto- "Eliminar tildes", yo ampliaría la búsqueda incluyendo hasta las producidas por errores del usuario al teclear, es decir, áààâéè..., la de la letra eñe se conservará, pues no tendría lógica eliminar su tilde.

Aquí tienes algunas opciones. Si realizas pruebas de rendimiento verás que la eficiencia varía inversamente proporcional en función de la longitud de la cadena. En todos los casos son -en términos de tiempos de respuesta- prácticamente iguales, en las máquinas que pululan hoy en día.

'==' Aplicable a NTs, 3.1 o superior:
' FoldString y la constante en la sección declaraciones del módulo que uses.
' Esta función, aplicando MAP_COMPOSITE, descompone un caracter.
' Por ejemplo: "informática" devolverá "informaŽtica", "eñe" devolverá "en~e", ...

Private Declare Function FoldString Lib "kernel32.dll" Alias "FoldStringA" ( _
ByVal dwMapFlags As Long, _
ByVal lpSrcStr As String, _
ByVal cchSrc As Long, _
ByVal lpDestStr As String, _
ByVal cchDest As Long) As Long

Private Const MAP_COMPOSITE As Long = &H40

' Luego aplicas una expresión regular que obtenga las tildes de interés, y se suprimen.
' Cuanto más larga sea la cadena, más rápida en comparación con otras opciones.
' Aparte, las expresiones regulares suele ser lo más efectivo en la manipulación de textos.

Public Function SinAcentos(ByVal strTexto As String) As String
Dim lngX As Long, strDestino As String

strDestino = String$(Len(strTexto) * 2, vbNullChar)
Call FoldString(MAP_COMPOSITE, strTexto, Len(strTexto), strDestino, Len(strDestino))
With CreateObject("VBScript.RegExp")
.MultiLine = True
.Global = True
.IgnoreCase = False
.Pattern = "Ž|`|š|\^"
SinAcentos = .Replace(strDestino, vbNullString)
SinAcentos = Left$(SinAcentos, InStr(1, SinAcentos, vbNullChar) - 1)
SinAcentos = Replace(SinAcentos, "n~", "ñ") 'Conservemos la eñe...
SinAcentos = Replace(SinAcentos, "N~", "Ñ")
End With
End Function
'==

'**********************************
' Esta otra opción, aproximadamente, con 50.000 caracteres comienza
' a ser igualada-adelantada por la primera opción (en mi banco de pruebas).

Private Function SinAcentos(ByVal sCadena As String) As String
SinAcentos = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
sCadena, "á", "a"), "à", "a"), "à", "a"), "â", "a"), _
"Á", "A"), "À", "A"), "Ä", "A"), "Â", "A"), _
"é", "e"), "è", "e"), "ë", "e"), "ê", "e"), _
"É", "E"), "È", "E"), "Ë", "E"), "Ê", "E"), _
"í", "i"), "ì", "i"), "ï", "i"), "î", "i"), _
"Í", "I"), "Ì", "I"), "Ï", "I"), "Î", "I"), _
"ó", "o"), "ò", "o"), "ö", "o"), "ô", "o"), _
"Ó", "O"), "Ò", "O"), "Ö", "O"), "Ô", "O"), _
"ú", "u"), "ù", "u"), "ü", "u"), "û", "u"), _
"Ú", "U"), "Ù", "U"), "Ü", "U"), "Û", "U")
End Function
'**********************************


'=' Esta es la menos eficiente, pero es la que se te ejecutará en más sistemas.
' Puede servir de alternativa para "versiones antiguas" en las que todavía no estaba
' implementada la función de cadena "Replace":

Private Function SinAcentos(ByVal sCadena As String) As String
Dim lngX As Long

For lngX = 1 To Len(sCadena)
Select Case Mid$(sCadena, lngX, 1)
Case "á", "à", "à", "â": Mid$(sCadena, lngX, 1) = "a"
Case "Á", "À", "Ä", "Â": Mid$(sCadena, lngX, 1) = "A"
Case "é", "è", "ë", "ê": Mid$(sCadena, lngX, 1) = "e"
Case "É", "È", "Ë", "Ê": Mid$(sCadena, lngX, 1) = "E"
Case "í", "ì", "ï", "î": Mid$(sCadena, lngX, 1) = "i"
Case "Í", "Ì", "Ï", "Î": Mid$(sCadena, lngX, 1) = "I"
Case "ó", "ò", "ö", "ô": Mid$(sCadena, lngX, 1) = "o"
Case "Ó", "Ò", "Ö", "Ô": Mid$(sCadena, lngX, 1) = "O"
Case "ú", "ù", "ü", "û": Mid$(sCadena, lngX, 1) = "u"
Case "Ú", "Ù", "Ü", "Û": Mid$(sCadena, lngX, 1) = "U"
End Select
Next
SinAcentos = sCadena
End Function
'=
Hay otras opciones... Pero, en general, deberías intentar evitar el uso de tipos "Variant", y en eso te ayudaría tener activada la "Declaración explícita de variables requerida" (Option Explicit).

Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#2 Esteban Dido
11/09/2006 - 21:53 | Informe spam
Hola Vinchenzo,

Gracias por tus sugerencias, pero no son necesarias para lo que en esta
oportunidad necesitaba.
Quizá en otra ocasión.
Te agradezco igualmente por tu preocupación.

Saludos
E.D.


"Vinchenzo vinç" escribió en el mensaje
news:
"Esteban Dido" escribió en el mensaje
news:
Gracias Francisco, adapté el código que me diste y funciona perfecto para


lo
que necesitaba.



Hola Esteban,
como mínimo deberás añadir la diéresis, pues es una tilde imprescindible
para -por ejemplo- escribir correctamente "averigüemos la ambigüedad
lingüística"... estarás de acuerdo.

Pero dejando a un lado normas ortográficas de lenguas concretas, y si tu
intención es -en efecto- "Eliminar tildes", yo ampliaría la búsqueda
incluyendo hasta las producidas por errores del usuario al teclear, es
decir, áààâéè..., la de la letra eñe se conservará, pues no tendría lógica
eliminar su tilde.

Aquí tienes algunas opciones. Si realizas pruebas de rendimiento verás
que la eficiencia varía inversamente proporcional en función de la longitud
de la cadena. En todos los casos son -en términos de tiempos de respuesta-
prácticamente iguales, en las máquinas que pululan hoy en día.

'==' Aplicable a NTs, 3.1 o superior:
' FoldString y la constante en la sección declaraciones del módulo que uses.
' Esta función, aplicando MAP_COMPOSITE, descompone un caracter.
' Por ejemplo: "informática" devolverá "informa´tica", "eñe" devolverá
"en~e", ...

Private Declare Function FoldString Lib "kernel32.dll" Alias "FoldStringA"
( _
ByVal dwMapFlags As Long, _
ByVal lpSrcStr As String, _
ByVal cchSrc As Long, _
ByVal lpDestStr As String, _
ByVal cchDest As Long) As Long

Private Const MAP_COMPOSITE As Long = &H40

' Luego aplicas una expresión regular que obtenga las tildes de interés,
y se suprimen.
' Cuanto más larga sea la cadena, más rápida en comparación con otras
opciones.
' Aparte, las expresiones regulares suele ser lo más efectivo en la
manipulación de textos.

Public Function SinAcentos(ByVal strTexto As String) As String
Dim lngX As Long, strDestino As String

strDestino = String$(Len(strTexto) * 2, vbNullChar)
Call FoldString(MAP_COMPOSITE, strTexto, Len(strTexto), strDestino,
Len(strDestino))
With CreateObject("VBScript.RegExp")
.MultiLine = True
.Global = True
.IgnoreCase = False
.Pattern = "´|`|¨|\^"
SinAcentos = .Replace(strDestino, vbNullString)
SinAcentos = Left$(SinAcentos, InStr(1, SinAcentos, vbNullChar) - 1)
SinAcentos = Replace(SinAcentos, "n~", "ñ") 'Conservemos la
eñe...
SinAcentos = Replace(SinAcentos, "N~", "Ñ")
End With
End Function
'==

'**********************************
' Esta otra opción, aproximadamente, con 50.000 caracteres comienza
' a ser igualada-adelantada por la primera opción (en mi banco de
pruebas).

Private Function SinAcentos(ByVal sCadena As String) As String
SinAcentos Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _

Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _

Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _

Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _

Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
sCadena, "á", "a"), "à", "a"), "à", "a"), "â", "a"),
_
"Á", "A"), "À", "A"), "Ä", "A"), "Â", "A"),
_
"é", "e"), "è", "e"), "ë", "e"), "ê", "e"),
_
"É", "E"), "È", "E"), "Ë", "E"), "Ê", "E"),
_
"í", "i"), "ì", "i"), "ï", "i"), "î", "i"),
_
"Í", "I"), "Ì", "I"), "Ï", "I"), "Î", "I"),
_
"ó", "o"), "ò", "o"), "ö", "o"), "ô", "o"),
_
"Ó", "O"), "Ò", "O"), "Ö", "O"), "Ô", "O"),
_
"ú", "u"), "ù", "u"), "ü", "u"), "û", "u"),
_
"Ú", "U"), "Ù", "U"), "Ü", "U"), "Û", "U")
End Function
'**********************************


'=' Esta es la menos eficiente, pero es la que se te ejecutará en más
sistemas.
' Puede servir de alternativa para "versiones antiguas" en las que todavía
no estaba
' implementada la función de cadena "Replace":

Private Function SinAcentos(ByVal sCadena As String) As String
Dim lngX As Long

For lngX = 1 To Len(sCadena)
Select Case Mid$(sCadena, lngX, 1)
Case "á", "à", "à", "â": Mid$(sCadena, lngX, 1) = "a"
Case "Á", "À", "Ä", "Â": Mid$(sCadena, lngX, 1) = "A"
Case "é", "è", "ë", "ê": Mid$(sCadena, lngX, 1) = "e"
Case "É", "È", "Ë", "Ê": Mid$(sCadena, lngX, 1) = "E"
Case "í", "ì", "ï", "î": Mid$(sCadena, lngX, 1) = "i"
Case "Í", "Ì", "Ï", "Î": Mid$(sCadena, lngX, 1) = "I"
Case "ó", "ò", "ö", "ô": Mid$(sCadena, lngX, 1) = "o"
Case "Ó", "Ò", "Ö", "Ô": Mid$(sCadena, lngX, 1) = "O"
Case "ú", "ù", "ü", "û": Mid$(sCadena, lngX, 1) = "u"
Case "Ú", "Ù", "Ü", "Û": Mid$(sCadena, lngX, 1) = "U"
End Select
Next
SinAcentos = sCadena
End Function
'=
Hay otras opciones... Pero, en general, deberías intentar evitar el uso
de tipos "Variant", y en eso te ayudaría tener activada la "Declaración
explícita de variables requerida" (Option Explicit).

Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#3 Gabriel Raigosa
30/09/2006 - 18:44 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA



Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"Feliciano" escribió en el mensaje
news:
| Hola:
| Con la propuesta de KL solo se cambian las vocales minusculas.
| Si se intenta seguir anidando para convertir las vocales mayusculas
|
=SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(A1;"á";"a");"é";"e");"í";"i");"ó";"o");"ú";"u");"Á";"A");"É";"E");"Í";"I")
| me doy cuenta que no se puede por no admitir mas de ocho anidaciones por
lo
| cual nos faltaria dos vocales por convertir a no acentuada.
| No se si hay solucion.
|
|
| "KL" escribió en el mensaje
| news:
| >o mediante formula:
| >
| >
=SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(A1;"á";"a");"ó";"o");"ú";"u");"é";"e");"í";"i")
| >
| > --
| > Saludos,
| > KL
| >
| >
| > "Abraham" wrote in message
| > news:
| >> Mira por aqui:
| >>
| >>
http://groups.google.com/group/micr...54cfc209d8
| >>
| >> Abraham
| >>
| >
|
|
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida