[RESUELTO] Extraer caracteres numéricos de celda

Discute sobre la aplicación de hojas de cálculo
Responder
rojes
Mensajes: 56
Registrado: Mié Dic 15, 2010 1:41 pm

[RESUELTO] Extraer caracteres numéricos de celda

Mensaje por rojes »

Buenas,

Saludos a todos, presento el siguiente tema a ver si me pueden ayudar.

Siempre he tenido la necesidad de extraer un determinado tipo de datos de una celda, regularmente alfabéticos A,B,C,D,F,G,...etc, o numéricos 1,2,3,4,5,6,7...etc.
buscando en este foro me encontré con una solución de Federico, a un caso parecido pero que no es aplicable a mi caso, de todos modos tome la formula propuesta y la adapte a mis necesidades, después de innumerables modificaciones, logre que hiciera lo que necesito.

pero esa formula me parece demasiado extensa y quisiera saber si me pueden ayudar a mejorarla y reducirla al máximo, ya que así se vuelve hasta cierto punto inmanejable.

Esta solicitud la elaboro porque veo que una de las inquietudes con las que siempre me tropiezo en estos foros es la necesidad de extraer un determinado tipo de datos de una celda especifica y creo que si se logra optimizar esta formula, sería de gran ayuda para muchos.


en la celda B1 tengo los siguientes datos: abcd89808fghipoijifjdjabcd75009fghirwecbcbjabcd46892fghgfdgdabcd32987GGHJGHJGHJGHJFJHYFYUY

En la celda B2 el resultado es el siguiente: '89887594689232987

Como ven extrae correctamente los datos de tipo numérico.

Gracias a todos por los aportes a este tema
Adjuntos
ExtraerNumeros.ods
Este es el archivo con los datos:
(8.61 KiB) Descargado 8793 veces
Última edición por rojes el Sab Mar 22, 2014 3:15 am, editado 2 veces en total.
Libreoffice 5.1.3 Debian 8 Jessie
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Extraer caracteres numéricos de celda

Mensaje por SLV-es »

Si te atreves con las macros, esta macro hace exactamente lo que deseas:

Código: Seleccionar todo

Function ExtraeNumeros( celda )
	dim n as long, c as string, r as string
	for n=1 to len(celda)
		c = mid(celda,n,1)
		select case c
		case 0,1,2,3,4,5,6,7,8,9
			r = r & c
		end select
	next
	ExtraeNumeros = r
End Function
Una vez escrita la macro, sencillamente puedes en tu hoja Calc escribir la siguiente fórmula:

=ExtraeNumeros(B2)

Ten en cuenta que si se almacena la macro en el contenedor por defecto, sólo se ejecuta en tu ordenador.
Para que acompañe al documento, debe incluirse en el contenedor del documento, como en el documento que adjunto (la fórmula está en la celda B10)

Saludos
Adjuntos
ExtraerNumeros-con-macro.ods
(9.6 KiB) Descargado 3973 veces
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Extraer caracteres numéricos de celda

Mensaje por xiseme »

Con tantos SUSTITUIR me pierdo :mrgreen: pero no veo la necesidad de andar con mayúsculas y minúsculas en la función (... SUSTITUIR(SUSTITUIR(MINÚSC(B1);"a";"");"b";"");"c";"") ... ... ...UIR(SUSTITUIR(MAYÚSC(B1);"A";"");"B";"");"C";"");" ...)
Si en A1 hay «123abcABC123»
SUSTITUIR(SUSTITUIR(SUSTITUIR(MINUSC(A1);"a";"");"b";"");"c";"") nos devolverá «123123»
SUSTITUIR(SUSTITUIR(SUSTITUIR(MAYUS(A1);"A";"");"B";"");"C";"") también devolverá «123123»

La función-macro «adhoc» de SLV-es me ha recordado una que yo uso para mis cosas (2 por el mismo precio :lol: )

Código: Seleccionar todo

Function ExtraeDelTexto(Texto, AExtraer As Boolean, Optional SimbolosNon As Boolean) As String
'Devuelve solo los números o las letras de una cadena de texto
'uso: 	EXTRAEDECELDA("12-abCD+-/";0) → «abCD+/»
'		EXTRAEDECELDA("12-abCD+-/";0;1) → «abCD»
'		EXTRAEDECELDA("12-abCD+-/";1) → «12--»
'	   	EXTRAEDECELDA("12-abCD+-/";1;1) → «12»
'Texto: Cadena de la que se extraerán los numeros  o las letras
'AExtraer: True/0 extrae numeros y False/1/>0 para letras
'[SimbolosNo]: 	si se indica(True) no se extraerán algunos símbolos "raros" («-» en caso de IsNumeric y otros en caso de letras).
'				se definen en la matriz/serie «ACambiar»
Dim i As Integer
Dim LetrasNum As String
Dim ACambiar As Variant

If IsMissing(SimbolosNon) Then SimbolosNon = False
If SimbolosNon Then
	ACambiar = Array("-", "+", "*", "→", ".", ",", "/", "\", "#", "(", ")", "¬", "", "") '← poner/quitar caracteres que no se extraen nunca
	For i = 0 To UBound(ACambiar)
	    Texto = Replace(Texto, ACambiar(i), "")
	Next i
End If

If AExtraer Then 'True=<>0: Extrae letras
	For i = 1 To Len(Texto)
	     If IsNumeric(Mid(Texto, i, 1)) Then 
	     	LetrasNum = Trim(LetrasNum & Mid(Texto, i, 1))	'trim para quitar espacios
	     End If
	Next i

Else 				'<>0 → extraer nums.
	For i = 1 To Len(Texto)
	     If Not IsNumeric(Mid(Texto, i, 1)) Then 
	     	LetrasNum = LetrasNum & Mid(Texto, i, 1)
	     End If
	Next i
End If

	ExtraeDelTexto = LetrasNum

End Function
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Extraer caracteres numéricos de celda

Mensaje por fornelasa »

Y ya para completar...... :lol:
Bueno si, la formula es larga.......pero no tan larga como se hizo :mrgreen:
Saludos, Federico.
En la celda B2 el resultado es el siguiente: '89887594689232987
Ademas esta mal calculado ¿y los ceros? :D :D :D
Adjuntos
ExtraerNumeros.ods
ExtraerNumeros
(19.38 KiB) Descargado 1712 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
rojes
Mensajes: 56
Registrado: Mié Dic 15, 2010 1:41 pm

Re: Extraer caracteres numéricos de celda

Mensaje por rojes »

Gracias por todos sus aportes,
Si te atreves con las macros, esta macro hace exactamente lo que deseas:
Salvador: Claro que si me atrevo, aunque estoy comenzando el estudio, pero digamos que todavía no se logra exactamente lo que persigo, pero es un gran aporte.

Se que tu respuesta se basa en el nombre del tema, pero fue un error mio al plantear el nombre, aunque en la explicación lo defino mejor:
una de las inquietudes con las que siempre me tropiezo en estos foros es la necesidad de extraer un determinado tipo de datos de una celda especifica
La solución que se acerca a lo que planteo, es la propuesta por xiseme, pero le pido que si fuera posible me explicara mejor su uso, yo coloco =EXTRAEDELTEXTO(B6;0) o =EXTRAEDELTEXTO(B6;1), con la primera opción extrae correctamente los caracteres diferentes a los numéricos y con la segunda extrae los datos numéricos.

=EXTRAEDELTEXTO(B6;0) Resultado: AhoraestoyocupadoNo. Cómo consigo: Ahora estoy ocupado No. (ya que el resultado no extrae los espacios)
Además esta mal calculado ¿y los ceros?
Federico: tienes toda la razón, las razones que me llevaron a abrir este tema fueron:

1. La formula es tan larga que cualquiera se pierde,

2. Mucha gente que conozco prefiere trabajar con ofimáticas pagas por que dicen "es más completa y sencilla", y lograr solucionar estos temas es demostrar que el software libre es muy potente y puede competir con cualquiera de pago.

3.Colaborar humildemente a muchos usuarios que como yo, frecuentemente tienen las necesidades planteadas en el presente tema.

Saludos,

Roberto
Libreoffice 5.1.3 Debian 8 Jessie
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Extraer caracteres numéricos de celda

Mensaje por fornelasa »

hola rojes...
lo que comentas tiene mucho por analizar y depende del cristal con que se mire, ejemplo: excel tiene una version libre o gratuita tanto para escritorio asi como para la web pero esta incompleta, no tiene la funcionalidad de las macros, si subimos un archivo con macros a la web en este caso no funcionaria la hoja de trabajo, cosa que no pasaria con las formulas.
Coincido, hablando de forma general las opciones con macro presentadas por mis compañeros son más viables.
Saludos Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Extraer caracteres numéricos de celda

Mensaje por SLV-es »

Hola

También podemos utilizar buscar-reemplazar usando expresiones regulares

He añadido un nuevo tema en mi blog, donde explico con detalle esta posibilidad: Buscar y reemplazar con expresiones regulares en OpenOffice Calc

Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Extraer caracteres numéricos de celda

Mensaje por xiseme »

La macro que he puesto está creada para extraer los números o lo demás. De esos demás permite no-extraer los caracteres que se encierren entre comillas en la matriz ACambiar.

Lo de extraer espacios: añadámosle la opción (que no obligación)
= EXTRAEDELTEXTO( texto_del_que_extraer, que_extraer , [no_extraer_espacios], [no_extraer_otros] )

Código: Seleccionar todo

Function ExtraeDelTexto(Texto, AExtraer As Boolean, Optional EspacNo As Boolean, Optional SimbolosNo As Boolean) As String
'Devuelve solo los números o las letras (más exactamente los "no-numeros") de una cadena de texto
'uso: 	EXTRAEDELTEXTO("12-ab CD+-/";0) → «ab CD+/»
'		EXTRAEDELTEXTO("12-abCD+-/";0;1) → «abCD+/»
'		EXTRAEDELTEXTO("12-abCD+-/";0;1;1) → «abCD»
'		EXTRAEDELTEXTO("12-abCD+-/";1) → « 12--»
'		EXTRAEDELTEXTO("12-abCD+-/";1;1) → «12--»
'	   	EXTRAEDELTEXTO("12-abCD+-/";22;1;22) → «12»
'Texto: Cadena de la que se extraerán los numeros  o las letras
'AExtraer: True/1/>0 extrae numeros y False/0 para extraer lo que no son números (letras y otros)
'[EspacNo]:   si se indica (True) no se extraerán los espacios. Si no se pone este parámetro o es False sí se extraerán.
'[SimbolosNo]: 	si se indica(True) no se extraerán algunos símbolos "raros" («-» en caso de IsNumeric y otros en caso de letras).
'				se definen en la matriz/serie «ACambiar»
Dim i As Integer
Dim LetrasNum As String
Dim ACambiar As Variant

If IsMissing(EspacNo) Then EspacNo=False

If IsMissing(SimbolosNo) Then SimbolosNo = False
If SimbolosNo Then
	ACambiar = Array("-", "+", "*", "→", ".", ",", "/", "\", "#", "(", ")", "¬", "", "") '← poner/quitar caracteres que no se extraen nunca
	For i = 0 To UBound(ACambiar)
	    Texto = Replace(Texto, ACambiar(i), "")
	Next i
End If

If AExtraer Then 'True=<>0: Extrae nums
	For i = 1 To Len(Texto)
	     If IsNumeric(Mid(Texto, i, 1)) Then
	      	LetrasNum = LetrasNum & Mid(Texto, i, 1)
	     	If EspacNo Then
		     	LetrasNum = Trim(LetrasNum)	'trim para quitar espacios
		    End If
		    	 	
	     End If
	Next i
Else 				'False/0 → extraer letras
	For i = 1 To Len(Texto)
	     If Not IsNumeric(Mid(Texto, i, 1)) Or EspacNo=False Then 
	      	LetrasNum = LetrasNum & Mid(Texto, i, 1)	      	
	     End If
	Next i
End If

	ExtraeDelTexto = LetrasNum

End Function
Lo mejor para ver qué resultados devuelve es probar las opciones
ExtraerNumeros_func.ods
(13.18 KiB) Descargado 1218 veces
Mucha gente que conozco prefiere trabajar con ofimáticas pagas por que dicen "es más completa y sencilla", ...
Es que la ignorancia es muy atrevida (como la mía que no sabía que hubiera versiones gratuitas de MSOffice salvo las de prueba que para mi no cuentan ). :mrgreen:
El software libre no es que iguale, si no que supera en multitud de casos a sus contrapartes privativas.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Extraer caracteres numéricos de celda

Mensaje por fornelasa »

Si, por ejemplo las versiones de Excel Starter que vienen instaladas cuando uno compra un PC (bueno si compras la PC igual y ya pagaste, :lol: :lol: )
"Microsoft Excel Starter 2010 es una versión simplificada de Excel ............etc"
http://office.microsoft.com/es-mx/start ... 74501.aspx

o como dicen aqui:
"In this community forum post, Edward Qu MSFT Support writes: "...Office 365 doesn't support Excel Macros... ""

Mr Qu did not mean that Office 365 did not support Excel macos, but that the Web Apps accessible from a browser from any computer through skydrive.com don't support macros.

You are correct. Excel 2013 indeed supports macros while Excel Web doesn't.

http://answers.microsoft.com/en-us/offi ... 3968227729

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
rojes
Mensajes: 56
Registrado: Mié Dic 15, 2010 1:41 pm

Re: Extraer caracteres numéricos de celda

Mensaje por rojes »

Xiseme

Gracias por tus aportes,
Ensaye las opciones como pediste, y encontré dos errores en esta.

la extracción de:

letras, sin espacios, con símbolos =EXTRAEDELTEXTO(B$1;0;1;0) Abcdfghipoiji//fjdjabcdfghirwecbcbjabcdfghgfdgdabcdGGHJGHJGHJGHJFJHYFYUY
Lo correcto Abcdfghipoiji//--fjdjabcdfghirwecbcbjabcdfghgfdgdabcdGGHJGHJGHJGHJFJHYFYUY, Como puedes ver en el resultado faltan los simbolos "--"

Letras, con espacios y símbolos =EXTRAEDELTEXTO(B$1;0;0;0) Ab cd89808fghipoiji//--fjdjabcd 75009 fghirwecbcbjabcd 46892 fghgfdgdabcd 32987 GGHJGHJGHJGHJFJHYFYUY4554

Letras, con espacios, sin símbolos =EXTRAEDELTEXTO(B$1;0;0;1) Ab cd89808fghipoijifjdjabcd 75009 fghirwecbcbjabcd 46892 fghgfdgdabcd 32987 GGHJGHJGHJGHJFJHYFYUY4554

En ambos casos también extrae los números, y no debería hacerlo de acuerdo a las opciones de la formula.

Personalmente, pienso que esta formula te quedó genial, salvo por los errores anotados. :bravo: :super:
Libreoffice 5.1.3 Debian 8 Jessie
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Extraer caracteres numéricos de celda

Mensaje por xiseme »

Si error → no genial (además todo-todo es mejorable :mrgreen: y esta función lo es mucho)

Creo que habrá que sustituir la parte que extrae las letras

Código: Seleccionar todo

Else             'False/0 → extraer letras
   For i = 1 To Len(Texto)
   Dim Char As String
   Char=Mid(Texto, i, 1)
        If Not IsNumeric(Char) Or Char="-" Then
            LetrasNum = LetrasNum & Char
        ElseIf EspacNo=False And Char=" " Then
        	LetrasNum = LetrasNum & Char
        End If
   Next i
@FORNELASA ... ummm ... ¡ah no! si viene con el pc ... no es gratis; o está pagado (como el S.O., "a la fuerza") o es de prueba "por si picas". Es como el primer portátil que compré venía de serie con W95 , algo como Works (creo que hasta era menos que el tal starter) y MSOffice versión pruebas. Como era "en pruebas" el resultado fué que yo seguí con mi Lotus tan contento. :lol:
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
rojes
Mensajes: 56
Registrado: Mié Dic 15, 2010 1:41 pm

Re: Extraer caracteres numéricos de celda

Mensaje por rojes »

Hola a todos, me encuentro mas que complacido con el desarrollo de este tema, Todos han sido muy amables y han aportado mucho, siento que consultas que a mi juicio habían quedado un poco incompletas, han quedado mas que explicitadas aquí, y se que servirán a muchos que presentan estas mismas necesidades, y con un valor agregado,

Una solución con base en formulas y búsqueda con expresiones regulares, para las personas que no tienen conocimiento del uso de macros y

dos soluciones con macros desarrolladas por Salvador y Xiseme, como quien dice al que pida más, que le piquen caña.

Solo me resta agradecerles a los que hicieron posible el desarrollo de este tema.

Federico, que fue mi primer motivador gracias a una formula en otro tema, que aunque no aplicable al caso planteado, fue un buen inicio y a sus aportes en este, por cierto, las afirmaciones respecto al software privativo no corresponden a mi visión ni convicción, son apreciaciones de personas con las que he discutido de el tema, yo llevo al rededor de 10 años usando software libre y me siento mas que complacido después de conocer varios sabores de linux y un gran numero de aplicaciones libres, no deseo volver al software privativo.

Desgraciadamente en Colombia el uso de software libre no está generalizado aún.

Salvador que propuso una macro que resuelve en parte el problema, pero ante todo me demostró que a veces tenemos soluciones sencillas a la mano, pero por desconocimiento no la usamos, me refiero a la búsqueda con expresiones regulares, que para una persona sin ningún conocimiento en formulas o macros, es una opción viable.

Xiseme Con una macro que resuelve el problema de una forma integral, solo te preguntaría si quieres aportar la corrección de los errores que te plantee, antes de cerrar el tema.

En resumen, todos se sobraron :bravo: :bravo: :bravo: ¡¡Gracias!!
Libreoffice 5.1.3 Debian 8 Jessie
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Extraer caracteres numéricos de celda

Mensaje por xiseme »

... solo te preguntaría si quieres aportar la corrección de los errores que te plantee
ummm ... creo que deben de haberse cruzado las respuestas.
En mi anterior comentario pongo una corrección para lo que indicabas. Naturalmente ... se ofrece tal cual, sin garantía de ninguna clase :mrgreen:
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
rojes
Mensajes: 56
Registrado: Mié Dic 15, 2010 1:41 pm

Re: Extraer caracteres numéricos de celda

Mensaje por rojes »

Tal parece que así fue, por tanto doy por solucionado el tema y de nuevo gracias a todos.

Como comentario final lo que hace grande el software libre, mas que cualquier otra cosa, es la calidad de gente que esta a su alrededor.

Un fraternal abrazo,

Roberto
Libreoffice 5.1.3 Debian 8 Jessie
Responder