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?