qué - Simular la función de división de cadenas en la fórmula de Excel
qué quiere decir<> en excel (7)
Estoy tratando de dividir una cadena en una fórmula 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 trato de utilizar las funciones FIND()
o SEARCH()
, devuelven #VALUE
si no hay espacio. ¿Hay alguna manera fácil de dividir la cadena para que devuelva las palabras individuales (o incluso mejor, de modo que devuelva la primera palabra o todas las demás )?
Algunas grandes hojas de cálculo-fu en las otras respuestas, pero creo que han pasado por alto que puede definir una función definida por el usuario (udf) y llamarla desde la hoja o una fórmula.
El próximo problema que tienes es decidir si 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 un bloque de celdas con
=UdfSplit("EUR/USD","/")
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 a lo largo del camino. Luego puede ocultar los cálculos intermedios o resumirlos en una sola fórmula.
Por ejemplo, tomando la fórmula de James:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Lo cual 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 pedazo a la vez. Una vez hecho, puedes convertirlo en
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
si así lo deseas.
Lo siguiente devuelve la primera palabra en la celda A1 cuando está separado por un espacio (funciona en Excel 2003):
=LEFT(A1, SEARCH(" ",A1,1))
Resalta la celda, usa Dat => Text en Columnas y el DELIMITER es espacio. El resultado aparecerá en tantas columnas como la división encuentre el espacio.
Si necesita la asignación a las columnas solo una vez, la respuesta es la funcionalidad "Texto a columnas" en MS Excel.
Consulte el artículo de ayuda de MS aquí: http://support.microsoft.com/kb/214261
HTH
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. El espacio duplicado dentro del texto también se elimina.
- La función FIND encuentra el primer espacio
- Si no hay espacio, se devuelve el texto recortado
- De lo contrario, la función MID se usa para devolver cualquier texto después del primer espacio
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Esto primero comprobará 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ía 0. Si está buscando mostrar un mensaje o algo para decirle al usuario que está vacío, podría usar lo siguiente:
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))