Excel extraer subcadena de cadena

22

Estoy buscando una manera de extraer una subcadena de longitud variable de una cadena.

Mis células se verán así:

ABC - DEF
ABCDE - DEF
ABCD - ABC

Quiero dividir la cadena en el -carácter, por lo que las celdas se convertirán en:

ABC
ABCDE
ABCD

Esto debe hacerse con una fórmula y no con VBScript.

Estoy usando Excel 2010

EDITAR

Descubrí que el conjunto de datos no siempre contiene el -carácter, lo que significa que no debería haber cambios.

Pieter van Niekerk
fuente

Respuestas:

26

Este problema se puede dividir en dos pasos:

  1. Encuentre el índice en la cadena de su carácter dividido deseado (en este caso, "-"o " - ").
  2. Obtenga la subcadena de prefijo desde el comienzo del texto original hasta el índice dividido.

El FINDy SEARCHcomandos cada volvería el índice de un dado needleen un haystack( FINDmayúsculas y minúsculas, SEARCHes sensible a las mayúsculas y permite comodines). Dado eso, tenemos:

FIND(search_text, source_cell, start_index)

o en este caso:

FIND(" - ", A1, 1)

Una vez que tenemos el índice, necesitamos el prefijo de source_cellpara hacer la "división". MIDhace exactamente eso:

MID(source_cell, start_index, num_characters)

Al unirlos a ambos, tenemos:

=MID(A1,1,FIND(" - ",A1,1))

con A1 teniendo texto de ABC - DEFda ABC.

Andrew Coleson
fuente
7

Ampliando la respuesta de Andrew basada en su edición: para encontrar la cadena de caracteres para dividir, estamos utilizando la FINDfunción. Si FINDno puede localizar la cadena dada, devuelve un #VALUE?error. Por lo tanto, tendremos que verificar este valor y utilizar un valor sustituto en su lugar.

Para verificar cualquier valor de error incluido #VALUE, utilizamos la ISERRORfunción, por lo tanto:

=ISERROR(FIND(" - ", A1, 1))

eso será cierto si la FINDfunción no puede encontrar la cadena "-" en la celda A1. Entonces usamos eso para decidir qué valor usar:

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))

Eso dice que si el comando find devuelve un error, use la celda A1 no modificada. De lo contrario, realice la MIDfunción que Andrew ya proporcionó.

Gamberro
fuente
2

Gracias @AndrewColeson por tu respuesta.

Solo para agregar a eso, si quieres todo en el lado derecho del -, usa este código:

= MEDIO (A1, LEN (B1) + 3, LEN (A1))

Cual es:

A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
    B1 = ABC
Therefore A1 = DEF

Este código es ideal si tiene un número indefinido de caracteres después de -.

Por ejemplo:

Si usted tiene:

ABC - DEFG
AB - CDEFGH
...
Kevdog777
fuente
esto también funciona =MID(a1,FIND("-",a1)+1,LEN(a1))sin ninguna referencia "extracelular")
Mikey
1

Aquí hay una manera muy simple de extraer el quinto carácter de la izquierda de una cadena de texto en Excel:

Supongamos que la cadena de caracteres ABCDEFGHIJse almacena en la celda A1 en una hoja de cálculo de Excel, luego la siguiente fórmula

=RIGHT(LEFT(A1,5),1)

produce el quinto carácter desde la izquierda en la cadena, a saber E.

Ken Brown
fuente
(¿No hay una MIDfunción en Excel? Estoy seguro de que existe en Visual Basic heredado, y sería algo así como =MID(A1, 5, 1))
Valmiky Arquissandas
0

La siguiente fórmula eliminará una subcadena de [TEXTCOLUMN_1]

por ejemplo: si quieres convertir -./thumb/hello.jpga, thumb/hello.jpgentonces usa la siguiente fórmula

=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

[TEXTCOLUMN_1]= el nombre de la columna que desea cambiar [NUM_OF_CHARACTERS]= número de caracteres del lado izquierdo que desea eliminar

Si desea eliminar del lado derecho, use lo siguiente

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)
Alam Zaib
fuente