excel - ultima - Extrae la última subcadena de una celda
funcion extrae en excel 2010 (9)
Tengo nombres en una columna. Necesito dividir solo los apellidos de esa columna en otra columna.
El apellido está delimitado por un espacio del lado derecho.
El contenido en la celda A2 = Alistair Stevens
y yo ingresamos la fórmula en la celda B2
(necesito ''Stevens''
en la celda B2
)
Intenté usar las siguientes fórmulas:
=RIGHT(A2,FIND(" ",A2,1)-1)
=RIGHT(A2,FIND(" ",A2))
Ambas fórmulas funcionan para esta celda, pero cuando la llevo / copio y pego para las celdas de abajo, no funciona. ¡Tengo los valores equivocados!
A3 -> David Mckenzie
B3 -> Mckenzie
DERECHA devuelve la cantidad de caracteres en el segundo parámetro desde la derecha del primer parámetro. Entonces, quiere que la longitud total de su columna A reste el índice. que es por lo tanto:
=RIGHT(A2, LEN(A2)-FIND(" ", A2, 1))
Y debería considerar usar TRIM (A2) donde sea que aparezca ...
Esto funciona, incluso cuando hay segundos nombres:
=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2," ",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,LEN(A2))
Si quieres todo, PERO el apellido, echa un vistazo a esta respuesta .
Si hay espacios finales en sus nombres, entonces puede eliminarlos reemplazando todas las instancias de A2
por TRIM(A2)
en la fórmula anterior.
Tenga en cuenta que es solo por pura casualidad que su primera fórmula =RIGHT(A2,FIND(" ",A2,1)-1)
funcione para Alistair Stevens
. Esto se debe a que "Alistair"
y " Stevens"
contienen el mismo número de caracteres (si se cuenta el espacio principal en " Stevens"
).
La respuesta proporcionada por @Jean proporciona una solución de trabajo pero oscura (aunque no maneja espacios finales)
Como alternativa, considere una función definida por el usuario vba (UDF)
Function RightWord(r As Range) As Variant
Dim s As String
s = Trim(r.Value)
RightWord = Mid(s, InStrRev(s, " ") + 1)
End Function
Usar en hoja como
=RightWord(A2)
Más simple sería: =TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," ",REPT(" ",99)),99))
Puede usar A2
en lugar de TRIM(A2)
si está seguro de que sus datos no contienen espacios no deseados.
Basado en el concepto explicado por Rick Rothstein: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String
Lo siento por ser Necroposter!
Prueba esto:
=RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND(" ",TRIM(A2)))
Pude copiar / pegar la fórmula y funcionó bien.
Aquí hay una lista de funciones de texto de Excel (que funcionó en mayo de 2011, pero está sujeta a que se rompa la próxima vez que Microsoft cambie su sitio web). :-(
Puede usar funciones IF () anidadas en múltiples etapas para manejar nombres intermedios o iniciales, títulos, etc., si los espera. Las fórmulas de Excel no son compatibles con el bucle, por lo que hay algunos límites a lo que puede hacer.
Prueba esto:
Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))
Pruebe esta función en Excel:
Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String
Dim s() As String = Split(Text, SplitAt)
If ReturnZeroBasedIndex <= s.Count - 1 Then
Return s(ReturnZeroBasedIndex)
Else
Return ""
End If
End Function
Lo usas así:
Nombre (A1) | Apellido (A2)
Valor en la celda A1 = Michael Zomparelli
Quiero el apellido en la columna A2.
=SPLITTEXT(A1, " ", 1)
El último parámetro es el índice basado en cero que desea devolver. Entonces, si se divide en el espacio char entonces índice 0 = Michael e índice 1 = Zomparelli
La función anterior es una función .Net, pero se puede convertir fácilmente a VBA.
Si desea obtener la penúltima palabra en un texto, puede utilizar esta macro como una función en su hoja de cálculo:
Public Function Get2ndText(S As String) As String
Dim sArr() As String
Dim i As Integer
sArr = Split(S, " ")
''get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)
End Function
Luego en su hoja de cálculo B1 como el texto:
CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126
en B2 su fórmula sería:
=Get2ndText(B1)
El resultado sería
TX
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))
Prueba esto. Espero que funcione.