Eliminar una cadena de caracteres comprendida entre dos símbolos
Resuelto
Greg le novice
-
Claire -
Claire -
Hola,
Como indica mi título, quiero eliminar cadenas de caracteres comprendidas entre dos símbolos: "<" y ">".
Ejemplo:
<bateau> il fait beau aujourd'hui </b le petit lapin> </h> <toto>
Debe quedarse en mi celda:
il fait beau aujourd'hui
¿Es obligatorio pasar por VBA? Si es así, me bloqueo en cómo indicar en mi código que se deben eliminar los símbolos ("<", ">") y cómo incorporar en la eliminación los caracteres comprendidos entre estos dos símbolos. Y sobre todo que la eliminación se repita porque los símbolos aparecen varias veces en una misma celda.
Gracias de antemano por vuestra ayuda.
Cordialmente,
Greg el novato
Como indica mi título, quiero eliminar cadenas de caracteres comprendidas entre dos símbolos: "<" y ">".
Ejemplo:
<bateau> il fait beau aujourd'hui </b le petit lapin> </h> <toto>
Debe quedarse en mi celda:
il fait beau aujourd'hui
¿Es obligatorio pasar por VBA? Si es así, me bloqueo en cómo indicar en mi código que se deben eliminar los símbolos ("<", ">") y cómo incorporar en la eliminación los caracteres comprendidos entre estos dos símbolos. Y sobre todo que la eliminación se repita porque los símbolos aparecen varias veces en una misma celda.
Gracias de antemano por vuestra ayuda.
Cordialmente,
Greg el novato
2 respuestas
-
=Hola
sin VBA, hay que suponer que sus datos siempre tienen las configuraciones siguientes
es decir, un espacio delante de < o un espacio detrás de > independientemente del número de palabras a eliminar delante o detrás del texto
Entonces se puede ejecutar en dos pasos:
primer paso, ingresar el campo (por ejemplo A:A) y reemplazar (tecla ctrl y tecla h
Reemplazar: colocar > < (con un espacio)
por: colocar: >< (sin espacio)
después en B la fórmula:
=STXT(A1;ENCONTRAR("> ";A1;1)+2;ENCONTRAR(" <";A1;1)-ENCONTRAR("> ";A1;1)-2)
Atención: > seguido de un espacio entre comillas
< y precedido de un........
a probar en todos sus casos
crdlmnt
y para completar en caso de celda vacía en A y si el texto a extraer empieza al inicio de la frase:
siempre después del tratamiento de “reemplazar”
=SI(A1="";"";SI(IZQUIERDA(A1;1)<>"<";EXTRAE(A1;1;ENCONTRAR(" <";A1;1));EXTRAE(A1;ENCONTRAR(" <";A1;1);ENCONTRAR(" <";A1;1)-ENCONTRAR(" <";A1;1))))
y para terminar, si quieres evitar la manipulación de reemplazar, puedes usar:
=SI(IZQUIERDA(A1;1)<>"<";EXTRAE(SUSTITUYE(A1;"> <";"><");1;ENCONTRAR(" <";SUSTITUYE(SUSTITUYE(A1;"> <";"><");"> <";"><");1));EXTRAE(SUSTITUYE(A1;"> <";"><");ENCONTRAR("> ";SUSTITUYE(SUSTITUYE(A1;"> <";"><");"> <";"><");1)+2;ENCONTRAR(" <";SUSTITUYE(A1;"> <";"><");1)-ENCONTRAR("> ";SUSTITUIR(A1;"> <";"><");1)-2))
crdlmnt
Errare humanum est, perseverare diabolicum-
Hola Vaucluse,
Gracias por responder tan rápido a mi problema.
Estoy contento, hay un avance con mi problema.
Sin embargo, después de haber reemplazado todos los ""> <"" por ""><"" y haber aplicado la fórmula en una celda, solo se extrae la primera cadena de caracteres y no la continuación.
Ejemplo:
<bateau>dauphin < camion ></b> toto
Noobtengo más que: dauphin
En lugar de obtener: dauphin toto
Gracias de antemano,
Greg el novato
ps: no entiendo cómo funciona la fórmula, por cierto.. -
No estaba anunciado en la pregunta inicial??
Lo que habría que hacer antes de buscar más lejos es conocer el conjunto de sus casos de figura. ¿Cuántas palabras separadas así hay que sacar?
Mientras tanto echen un vistazo a los complementos de mi mensaje anterior
.. y para ir más allá, creo que será necesario pasar por VBA para eliminar las palabras en adrés por <> pero no es mi área. -
Las fórmulas anteriores funcionan perfectamente y efectivamente responden a la primera solicitud que hice.
Muchas gracias, eso me avanza mucho.
----
Sí, en mi ejemplo habría tenido que poner toto fuera de los corchetes para que obtengamos: dolphin toto
Y propuse estos ejemplos para que mi petición quedara más clara.
En mi caso se trata de párrafos completos en una celda de Excel, o dentro de ellos hay mezclados como "</b> por ejemplo o </g>. Hay muchos.
----
Así que supongo que debo pasar por VBA. No me molesta. Pero sigo estando atascado para expresar estas fórmulas en VBA. -
Un exemple de cellule pour être claire au maximum :
<div style="border: 1px solid #C0C0C0; text-align: justify; font-family: Calibri; padding: 10 10 15 10px; font-size: 12px; background-color: #FFE; width: 500px;">
<h1 style="text-align: center; color: #069; font-size: 16px;"> Access </h1>
<br/>
Cette offre vous propose la mise à disposition du logiciel ACCESS, SGBD de Microsoft pour des applications bureautiques.
</p>
<div style="color: #069">
<strong>Merci d'indiquer dans le champ commentaire ci-contre : </strong>
<ul style="list-style-type: square; margin-top: 5px;">
<li>la justification du besoin</li>
<li>les références du poste concerné par l'installation</li>
</ul>
</div>
</div>
-
-
Hola,
He hecho esta macro, funciona con todos los ejemplos que publicaste arriba (hace buen tiempo, el delfín y el SGBD).
Esta macro debe ejecutarse varias veces, hasta que detecte que ya no queda nada por eliminar:
Sub suppression() Dim chaine, chaine2 As String chaine = Range("A1") If InStr(chaine, "<") = 0 Then MsgBox ("¡Ya no queda nada que eliminar!") Exit Sub End If If Left(chaine, 1) = "<" Then chaine = Right(chaine, Len(chaine) - InStr(chaine, ">")) End If If InStr(chaine, "<") <> 0 Then chaine2 = Range("A2") chaine2 = chaine2 & Left(chaine, InStr(chaine, "<") - 1) chaine = Right(chaine, Len(chaine) - InStr(chaine, "<") + 1) Range("A1") = chaine Range("A2") = chaine2 Else chaine2 = Range("A2") chaine2 = chaine2 & chaine Range("A1") = chaine Range("A2") = chaine2 End If End Sub
A+ !
--
-------------------
Cordialement,
Clément