Simule la función de división de cadenas en la fórmula de Excel
-
06-07-2019 - |
Pregunta
Estoy tratando de dividir una cadena en una fórmula de Excel, algo que puedo hacer en muchos lenguajes de programación, por ejemplo,
string words = "some text".split(' ');
El problema es que no puedo estar seguro de que haya más de una palabra en la celda. Si intento usar las funciones FIND ()
o SEARCH ()
, me devuelven #VALUE
si no hay espacio. ¿Hay alguna manera fácil de dividir la cadena para que devuelva las palabras individuales (o incluso mejor, para que devuelva la palabra primera o todas las otras palabras)?
Solución
Una fórmula para devolver la primera palabra o todas las otras palabras .
=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))
Ejemplos y resultados
Text Description Results
Blank
Space
some Text no space some
some text Text with space text
some Text with leading space some
some Text with trailing space some
some text some text Text with multiple spaces text some text
Comentarios sobre la fórmula:
- La función TRIM se usa para eliminar todos los espacios iniciales y finales. También se elimina el espacio duplicado dentro del texto.
- La función ENCONTRAR encuentra el primer espacio
- Si no hay espacio, entonces el recortado el texto se devuelve
- De lo contrario, la función MID es solía devolver cualquier texto después del primer espacio
Otros consejos
Lo siguiente devuelve la primera palabra en la celda A1 cuando está separada por un espacio (funciona en Excel 2003):
=LEFT(A1, SEARCH(" ",A1,1))
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Esto primero verificará si la celda contiene un espacio; si lo hace, devolverá el primer valor del espacio; de lo contrario, devolverá el valor de la celda.
Editar
Solo para agregar a la fórmula anterior, tal como está si no hay ningún valor en la celda, devolverá 0. Si está buscando mostrar un mensaje o algo para decirle al usuario que está vacío, puede usar lo siguiente:
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
Estas cosas tienden a ser más simples si las escribe una celda a la vez, dividiendo las fórmulas largas en otras más pequeñas, donde puede verificarlas en el camino. Luego, puede ocultar los cálculos intermedios o agruparlos en una sola fórmula.
Por ejemplo, tomando la fórmula de James:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Que solo es válido en Excel 2007 o posterior.
Divídalo de la siguiente manera:
B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))
Es un poco más fácil trabajar, un trozo a la vez. Una vez hecho, puedes convertirlo en
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
si así lo deseas.
Si necesita la asignación a las columnas solo una vez, la respuesta es "Texto a columnas". funcionalidad en MS Excel.
Vea el artículo de ayuda de MS aquí: http://support.microsoft.com/kb/214261
HTH
Resalte la celda, use Dat = > Texto a Columnas y el DELIMITADOR es espacio. El resultado aparecerá en tantas columnas como la división encuentre el espacio.
Algunas excelentes hojas de cálculo en las otras respuestas, pero creo que han pasado por alto que puede definir una función definida por el usuario (udf) y llamar a esto desde la hoja o una fórmula.
El siguiente problema que tiene es decidir trabajar con una matriz completa o con un elemento.
Por ejemplo, este código de función UDF
Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
Dim vSplit As Variant
vSplit = VBA.Split(sText, sDelimiter)
If lIndex > -1 Then
UdfSplit = vSplit(lIndex)
Else
UdfSplit = vSplit
End If
End Function
permite elementos individuales con lo siguiente en una celda
=UdfSplit("EUR/USD","/",0)
o uno puede usar bloques de celdas con
=UdfSplit("EUR/USD","/")