Saltar al contenido

Recommended Posts

publicado

Hola!

Esta vez aportare una formula la cual sirve para extraer solo numeros de una cadena de texto (o sea de una celda), pues bien la he mojorado, ya que con un colega en otro foro, la referenciamos y me pico lo adicto y la mejore para que sea utilizada en diferentes idiomas de Excel (GUANCHE si pasas por aqui dime si resulta con el sueco:cool:)

No estoy seguro que exista en nuestro foro, la busque mas de una vez (o a lo mejor se perdio con el ultimo cambio que sufrio el mismo)

=--EXTRAE(A2,COINCIDIR(1,--ESNUMERO(--EXTRAE(A2,FILA(INDIRECTO(1&":"&LARGO(A2))),1)),),CONTAR(--EXTRAE(A2,FILA(INDIRECTO(1&":"&LARGO(A2))),1)))[/HTML]

Mejoras

1- Modifique esto a =COINCIDIR(VERDADERO... por esto =COINCIDIR(1...

2- Modifique esto = FILA($1:$9)... por esto FILA(INDIRECTO(1&":"&LARGO(A2)))...

3- Modifique esto =1*EXTRAE(... por esto =--EXTRAE(... {en toda la formula}

Espero sea de utilidad y comprension para todos:)

La formula original/fuente se encuentra aqui: [b]Extraer numeros de cadena alfanumerica [/b]

Proporcionado por Microsoft MVP Ashish Mathur

{Antoni sii sii ya se, seguro vendras con una de las tuyas :)}

Saludos desde Honduras

Extraer numeros de cadena con texto.zip

publicado

Hola:

Hay un refrán español que dice:

"La cabra siempre tira al monte",......jajaja

Un abrazo amigo Gerson

publicado

Otra opción sin importar la posición de los numeros.

Se crea el nombre nFilas que es igual a:

=FILA(INDICE(!$A:$A,1):INDICE(!$A:$A,10))

Ahora la formula matricial para extraer los numeros de la celda A2

=SUMA(EXTRAE(0&A2,K.ESIMO.MAYOR(ESNUMERO(--EXTRAE(A2,nFilas,1))*nFilas,nFilas)+1,1)*10^nFilas/10)

Saludos

Extraer numeros de cadena con texto.zip

publicado

La de Gerson sin corchetes:

=--EXTRAE(A2;
COINCIDIR(1;INDICE(--ESNUMERO(--EXTRAE(A2;FILA(INDIRECTO(1&":"&LARGO(A2)));1));;);
CONTAR(INDICE(--EXTRAE(A2;FILA(INDIRECTO(1&":"&LARGO(A2)));1);))[/CODE]

publicado

Hola:

Pues después de ver a tanto "monstruo" por aquí, no iba yo a quedarme mudo.

Sub SoloNumeros()
For Each celda In Selection
For x = 1 To Len(celda.Value)
If IsNumeric(Mid(celda.Value, x, 1)) Then cadena = cadena & Mid(celda.Value, x, 1)
Next x
celda.Value = cadena
Next celda
End Sub
[/CODE]

Que los vientos os sean propicios para que vuestras naves lleguen a puerto amigo.

Y si no teneis naves, pues,...........no se,.....ya se me ocurrirá algo.

Saludos.

publicado

Hola a todos, muy buena recolilacion de formulas y macros. Desde mi punto de vista la de "tuve" esta sensacional porque es "NO matricial".

Segun yo, no sería practico hacer una supermegaformula en este post porque ya estan hechas todas aqui, se me ocurre irme por otro camino aprovechando las 64 anidadaciones de Excel 2010 y para evitar las formulas matriciales.

Espero les agrade.

Sep.rar

publicado
Hola a todos, muy buena recolilacion de formulas y macros. Desde mi punto de vista la de "tuve" esta sensacional porque es "NO matricial".

Si bien con el añadido de la función INDICE en algunas formulas matriciales se evita la confirmación con Ctrl+Shift+Enter, eso NO mejora (en ocaciones empeora) el tiempo de calculo y efecto en el rendimiento del archivo.

Saludos

publicado

Gracias sailepaty, considero muy importante tu anotación. Y por supuesto amigo sailepaty que tu formula tiene ese "toque" de gente grande y conocedora del Excel.

Saludos.

publicado
Desde mi punto de vista la de "tuve" esta sensacional porque es "NO matricial".

Gracias por el comentario, pero sólo he aplicado una técnica conocida el uso de indice para evitar los corchetes, todo el mérido de la fórmula es de Gerson

Me ha parecido interesante tu aporte a este tema, un comentario falta nuestra querida "Ñ".

Buena aclaración sailepaty, no sabía que incluso en ocasiones es más lenta.

publicado

Y para no dejar solo a Macro Antonio, aqui va una UDF.

Function SoloNumeros(sTexto As String) As Double
With CreateObject("VBScript.RegExp")
Application.Volatile
.Pattern = "\D"
.Global = True
SoloNumeros = .Replace(sTexto, "")
End With
End Function[/CODE]

Saludos

publicado

Hola sailepaty fíjate que la función es SoloNumeros y su resultado OnlyNumbers lo que seguro que pasa por manejar dos idiomas.

Todas las soluciones aportadas obtienen todos los números juntos de la cadena, por ejemplo para:

A1 = ABCD1234EF567GH

=SoloNumeros(A1) = 1234567

Con lo que aparecen concatenados los dos números.

Function GetNum(ByVal txt As String, ByVal ref As Long) As Double
With CreateObject("VBScript.RegExp")
.Global = True
If ref > 0 Then
.Pattern = "\d+(\.\d+)?"
GetNum = .Execute(txt)(ref - 1)
Else
.Pattern = "\D"
GetNum = .Replace(txt, "")
End If
End With
End Function[/CODE]

Con esta función se obtiene:

=GetNum(A1;1) = [b]1234[/b]

=GetNum(A1;2) = [b]567[/b]

=GetNum(A1;0) = [b]1234567[/b]

El segundo argumento indica qué número se va a separar y si es <=0 no los separa.

Sirve para n números separados por caracteres alfabéticos.

publicado
Hola sailepaty fíjate que la función es SoloNumeros y su resultado OnlyNumbers

Gracias por la aclaración Pedro, ya quedo modificado.

Me gusta la opción que le añadiste a la función.

Saludos

publicado

Gracias Gerson, pero no estaría completo si no explicara que he seguido el patrón de los angloparlantes, siguiendo con la sugerencia de sailepaty, ya que:

.Pattern = "\d+(\.\d+)?"     ' separa números decimales con el signo "." (en inglés)
.Pattern = "\d+(\,\d+)?" ' separa números decimales con el signo "," (en español)
.Pattern = "-?\d+(\,\d+)?" ' separa números decimales positivos y negativos con el signo "," (en español)[/CODE]

Realmente prefiero el último patrón de Regular Expression Syntax (Scripting) ya que si:

A1 = ABCD[b]-12,34[/b]EF[b]5,67[/b]GH

=GetNum(A1;1) = [b]-12,34[/b]

=GetNum(A1;2) = [b]5,67[/b]

Esto me recuerda que se me está olvidando el programa [b]sed (stream editor)[/b] con el que comencé a usar las expresiones regulares en Unix hace unos 30 años: sed (informática) - Wikipedia, la enciclopedia libre

publicado

Buenas Noches, mi nombre es Adrián,

sería mucho pedir la fórmula para excel 2007 a la viceversa??

quiero decir, mi problema es que no consigo entender la lógica de la función ni con la explicación del autor original de la fórmula(en la página de microsoft), y necesito justamente lo contrario, extraer el texto y no los números de una cadena alfanumérica.

Muchasimas Gracias de antemano.

publicado

Adrian bienvenido al foro

Es mejor que abras un nuevo para tu consulta, y de pronto puedes comenzar utilizando algo como esto: =SUSTITUIR(A2,D2,"",1) donde "D2" es uno de los resultados de las formulas, ya expuestas...

Nota: no olvides leer las normas, recomendaciones y anuncios de cada subforo

Saludos

Conéctate para comentar

Podrás dejar un comentario después de conectarte



Conéctate ahora
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.