2009-06-23 28 views
26

Estoy tratando de dividir una cadena en una fórmula excel, algo que puedo hacer en muchos lenguajes de programación, p.Simula la función de división de cadenas en la fórmula de Excel

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 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, para que devuelva la primera palabra o todas las demás palabras)?

+1

¿De qué manera quiere que las palabras sean devueltas? Excel no puede almacenar una matriz en una sola celda. entonces que debería ser? – Tomalak

Respuesta

23

Una fórmula para devolver ya sea 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 en fórmula:

  • La función TRIM se utiliza para eliminar todos los espacios iniciales y finales. El espacio duplicado dentro del texto también se elimina.
  • La función FIND continuación, se encuentra el primer espacio
  • Si no hay espacio, entonces el texto recortada se volvió
  • lo contrario, el función MID es utiliza para devolver cualquier texto después de que el primer espacio
+0

Gracias, eso es lo que buscaba –

+2

¿Por qué no añaden algunas funciones correctas de análisis de cadenas a Excel? – Rory

+0

@Rory porque Excel está hecho principalmente para contadores y no hay una manera elegante de anular la suposición de que un contador está impulsando la aplicación. Es necesario que haya un Excel para programadores. – dreftymac

9

Las siguientes declaraciones de la primera palabra en la celda A1 cuando están separados por un espacio (funciona en Excel 2003):

=LEFT(A1, SEARCH(" ",A1,1)) 
+1

Sí, pero si no hay espacio en la celda, ¡simplemente devolverá un error! –

+3

= IZQUIERDA (A1, BÚSQUEDA ("", CONCATENAR (A1, ""), 1)) – flash

9
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3) 

Esto en primer lugar, 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

sólo para añadir a la fórmula anterior, tal y como está si no hay valor en la celda que volvería 0. Si usted está buscando para mostrar un mensaje o algo para indicar al usuario que está vacío usted podría utilizar el siguiente:

=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)) 
+0

Obviamente, puede cambiar A3 a cualquier celda que esté tratando de evaluar, James. – James

+0

No hice exactamente lo que buscaba, pero +1 porque fue útil en otro lugar –

3

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 de t él camino. Luego puede ocultar los cálculos intermedios o resumirlos en una sola fórmula.

Por ejemplo, tomando James' fórmula:

=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3) 

que sólo es válida en Excel 2007 o posterior.

dividirla de la siguiente manera:

B3: =FIND(" ", A3) 
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1)) 

que es sólo un poco más fácil de trabajar, un pedazo a la vez. Una vez hecho, puede convertirlo en

=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1)) 

si lo desea.

1

resaltar la celda, utilice Dat => texto en columnas y el delimitador de espacio. El resultado aparecerá en tantas columnas como la división encuentre el espacio.

0

Algunas excelentes hojas de cálculo en las otras respuestas, pero creo que se 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 tiene 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 que los elementos individuales con la siguiente en una célula

=UdfSplit("EUR/USD","/",0)

o se puede utilizar un bloques de células con

=UdfSplit("EUR/USD","/")

Cuestiones relacionadas