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)?

¿Fue útil?

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","/")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top