Excel wyodrębnia podciąg z łańcucha

22

Szukam sposobu na wyodrębnienie podłańcucha o zmiennej długości z łańcucha.

Moje komórki będą wyglądały mniej więcej tak:

ABC - DEF
ABCDE - DEF
ABCD - ABC

Chcę podzielić ciąg znaków na -znak, aby komórki stały się:

ABC
ABCDE
ABCD

Należy to zrobić za pomocą formuły, a nie VBScript.

Korzystam z programu Excel 2010

EDYTOWAĆ

Odkryłem, że zestaw danych nie zawsze zawiera -znak, co oznacza, że ​​nie powinno być żadnych zmian.

Pieter van Niekerk
źródło

Odpowiedzi:

26

Ten problem można podzielić na dwa etapy:

  1. Znajdź indeks w ciągu żądanego rozdzielonego znaku (w tym przypadku "-"lub " - ").
  2. Uzyskaj podciąg prefiksu od początku oryginalnego tekstu do indeksu podziału.

FINDI SEARCHpoleceń każdy powróci wskaźnika danej needlew sposób haystack( FINDwielkość liter, SEARCHjest od wielkości liter oraz umożliwia kwantyfikatorów). Biorąc to pod uwagę, mamy:

FIND(search_text, source_cell, start_index)

lub w tym przypadku:

FIND(" - ", A1, 1)

Po utworzeniu indeksu potrzebujemy prefiksu source_cell„split”. MIDrobi tylko to:

MID(source_cell, start_index, num_characters)

Łącząc je oba, mamy:

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

z A1 zawierającym tekst ABC - DEFpodarunków ABC.

Andrew Coleson
źródło
7

Rozwijając odpowiedź Andrzeja w oparciu o twoją edycję: aby znaleźć ciąg znaków do podziału, używamy FINDfunkcji. Jeśli FINDnie uda się zlokalizować podanego ciągu, zwraca #VALUE?błąd. Musimy więc sprawdzić tę wartość i zamiast tego użyć wartości zastępczej.

Aby sprawdzić jakąkolwiek wartość błędu, w tym #VALUE, używamy ISERRORfunkcji, a zatem:

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

będzie to prawdą, jeśli FINDfunkcja nie będzie mogła znaleźć łańcucha „-” w komórce A1. Używamy tego, aby zdecydować, której wartości użyć:

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

Oznacza to, że jeśli polecenie find zwróci błąd, użyj niezmodyfikowanej komórki A1. W przeciwnym razie wykonaj MIDfunkcję, którą Andrew już zapewnił.

Hellion
źródło
2

Dziękuję @AndrewColeson za odpowiedź.

Aby to dodać, jeśli chcesz wszystko po prawej stronie -, użyj tego kodu:

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

Który jest:

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

Ten kod jest świetny, jeśli masz po nim niezdefiniowaną liczbę znaków -.

Na przykład:

Jeśli masz:

ABC - DEFG
AB - CDEFGH
...
Kevdog777
źródło
robi to samo =MID(a1,FIND("-",a1)+1,LEN(a1))bez żadnych „pozakomórkowych” odniesień)
Mikey
1

Oto bardzo prosty sposób na wyodrębnienie 5. znaku z lewej strony z ciągu tekstowego w programie Excel:

Załóżmy, że ciąg znaków ABCDEFGHIJjest przechowywany w komórce A1 w arkuszu kalkulacyjnym Excel, a następnie w poniższej formule

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

produkuje piąty znak z lewej strony ciągu, a mianowicie E.

Ken Brown
źródło
(Czy MIDw Excelu nie ma żadnej funkcji? Jestem pewien, że istnieje ona w starszej wersji Visual Basic i byłoby coś w stylu =MID(A1, 5, 1))
Valmiky Arquissandas
0

Poniższa formuła usunie podciąg [TEXTCOLUMN_1]

przykład: jeśli chcesz przekonwertować -./thumb/hello.jpgdo thumb/hello.jpgnastępnie użyć następującego wzoru

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

[TEXTCOLUMN_1]= nazwa kolumny, którą chcesz zmienić [NUM_OF_CHARACTERS]= liczba znaków z lewej strony, którą chcesz usunąć

Jeśli chcesz usunąć z prawej strony, użyj następujących

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)
Alam Zaib
źródło