una ultimos texto solo quitar primeros numeros letras extraer entre eliminar después cómo celda caracteres caracter cadena buscar antes alfanumerica excel vba string worksheet-function

ultimos - Manipulación de cadenas con Excel: ¿cómo eliminar parte de una cadena si hay otra parte?



extraer solo letras de una celda en excel (7)

He hecho algunas búsquedas en Google, y no puedo encontrar nada, aunque tal vez estoy buscando en los lugares equivocados. Tampoco soy muy experto en VBA, pero estoy seguro de que puedo resolverlo con los punteros correctos :)

Tengo una cadena que estoy creando que es una concatenación de varias celdas, en función de varias condiciones. Golpeé estos en orden.

=IF(A405<>A404,G405,G405&H404)

Lo que quiero hacer es volver a través de mi lista concatenada, eliminando un valor reemplazado si el sustituto está en la lista.

Por ejemplo, mira la siguiente lista:

A, D, G, Y, Z

Quiero eliminar D si y solo si Y está presente.

¿Cómo voy a hacer esto? (VBA o dentro de la célula, aunque preferiría en la celda)


En primer lugar, ¿por qué no mantener una matriz de cadenas a medida que recorre todas las celdas y luego concatenarlas al final?

De lo contrario, usará funciones de cadena como INSTR y MID para hacer algo como:

start1 = instr(myLongString,"Y, ") if start1 > 0 Then start2 = instr(myLongString,"D, ") if start2 > 0 then newLongString = left(myLongString, start2 - 1) & _ mid(myLongString, start2 + 3) end if end if

Pero, como dije, mantendría una matriz que es fácil de recorrer, y una vez que tenga todos los valores que SABE utilizará, simplemente concatenelos al final.


Probablemente sea más fácil comenzar por el final, hacer sus adiciones al principio de la cadena y solo agregar D si Y no está presente.


Si no hay demasiadas combinaciones que quiera eliminar, puede usar = IF (FIND ("D"; A2)> 0; REPLACE (A2; 1; 3; ""); A2).


Supongo que D podría aparecer en cualquier lugar, así que ¿qué tal?

If InStr(strString, "Y") > 0 Then strString = Replace(strString, "d", "") strString = Replace(strString, " ", "") strString = Replace(strString, " ,", "") strString = Replace(strString, ",,", ",") End If


Tratar:

=IF(ISERROR(FIND("Y",A1)),A1,SUBSTITUTE(A1,"D, ",""))

Pero eso supone que siempre tienes la coma y el espacio después de la D.


VBA : siempre puedes usar el objeto regexp. Creo que eso te da la posibilidad de probar cualquier cosa en tu script siempre que construyas correctamente la expresión regular.

Consulte: http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (para la referencia de expresiones regulares)
y una herramienta simple para probar tus expresiones regulares: http://www.codehouse.com/webmaster_tools/regex/

In-cell : puedes hacerlo de una manera más amigable con Excel:
supongamos en la columna A: A tienes los valores.
Puede agregar una nueva columna donde realiza el control
if(indirect("A"&row()) <> indirect("A"&row()-1), indirect("G"&row()), indirect("G"&row())& indirect("H"&row()))
o cualesquiera que sean los valores. Sin embargo, supongo que en una rama de la declaración if el valor debe estar en blanco. Después de eso, concatena solo los valores de la columna B: B (omitiendo espacios en blanco si es necesario).

Espero que esto ayude.


Acabo de recibir esto como una posible solución por correo electrónico también:

=IF(A15<>A14,G15,IF(OR(AND(G15="CR247, ",ISNUMBER(FIND("CR247, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR215, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR180, ",H14))),AND(G15="CR180, ",ISNUMBER(FIND("CR215, ",H14))),G15="CR113, "),H14,G15&H14))

(esto tiene los valores "reales" con reglas de precedencia)

Se ve relativamente similar a la respuesta de @Joseph .

¿Hay una mejor solución?