Cuprins
În ultimele două articole, am analizat diferite modalități de a elimina caractere din șiruri de caractere în Excel. Astăzi, vom investiga încă un caz de utilizare - cum să ștergem totul înainte sau după un anumit caracter.
Ștergeți textul înainte, după sau între 2 caractere cu Find & Replace
Pentru manipulări de date în mai multe celule, Găsire și înlocuire este instrumentul potrivit. Pentru a elimina o parte dintr-un șir de caractere care precede sau urmează unui anumit caracter, aceștia sunt pașii de urmat:
- Selectați toate celulele în care doriți să ștergeți textul.
- Apăsați Ctrl + H pentru a deschide fereastra Găsiți și înlocuiți dialog.
- În Găsiți ce introduceți una dintre următoarele combinații:
- Pentru a elimina textul înainte de un anumit caracter , introduceți caracterul precedat de un asterisc (*char).
- Pentru a elimina textul după un anumit caracter , introduceți caracterul urmat de un asterisc (char*).
- Pentru a șterge un subșir între două personaje , introduceți un asterisc înconjurat de 2 caractere (char*char).
- Lăsați Înlocuiți cu caseta goală.
- Faceți clic pe Înlocuiți toate .
De exemplu, pentru a elimina totul după o virgulă inclusiv virgula în sine, puneți o virgulă și un semn asterisc (,*) în Găsiți ce și veți obține următorul rezultat:
Pentru a șterge un subșir înainte de o virgulă , introduceți un asterisc, o virgulă și un spațiu (*, ) în câmpul Găsiți ce cutie.
Vă rugăm să observați că înlocuim nu doar o virgulă, ci și o virgulă și un spațiu pentru a preveni apariția unor spații de început în rezultate. În cazul în care datele sunt separate prin virgule fără spații, utilizați un asterisc urmat de o virgulă (*,).
Pentru a șterge textul între două virgule , utilizați un asterisc înconjurat de virgule (,*,).
Sfat: Dacă preferați ca numele și numerele de telefon să fie separate prin virgulă, introduceți o virgulă (,) în câmpul Înlocuiți cu domeniu.
Îndepărtați o parte din text utilizând Flash Fill
În versiunile moderne de Excel (2013 și versiunile ulterioare), există încă o modalitate ușoară de a șterge textul care precede sau urmează un anumit caracter - funcția Flash Fill. Iată cum funcționează:
- Într-o celulă de lângă prima celulă cu datele dumneavoastră, introduceți rezultatul așteptat și apăsați Enter .
- Începeți să tastați o valoare corespunzătoare în următoarea celulă. Odată ce Excel simte modelul valorilor pe care le introduceți, va afișa o previzualizare pentru celulele rămase care urmează același model.
- Apăsați tasta Enter pentru a accepta sugestia.
Gata!
Eliminarea textului cu ajutorul formulelor
În Microsoft Excel, multe dintre manipulările de date efectuate cu ajutorul funcțiilor încorporate pot fi realizate și cu ajutorul unei formule. Spre deosebire de metodele anterioare, formulele nu aduc nicio modificare datelor originale și vă oferă un control mai mare asupra rezultatelor.
Cum să eliminați totul după un anumit caracter
Pentru a șterge textul după un anumit caracter, formula generică este:
STÂNGA( celulă , SEARCH(" char ", celulă ) -1)Aici, folosim funcția SEARCH pentru a obține poziția caracterului și o transmitem funcției LEFT, astfel încât aceasta să extragă numărul corespunzător de caractere de la începutul șirului de caractere. Se scade un caracter din numărul returnat de SEARCH pentru a exclude delimitatorul din rezultate.
De exemplu, pentru a elimina o parte a unui șir de caractere după o virgulă, introduceți formula de mai jos în B2 și trageți-o în jos până la B7:
=LEFT(A2, SEARCH(",",", A2) -1)
Cum să eliminați totul înainte de un anumit caracter
Pentru a șterge o parte a unui șir de text înainte de un anumit caracter, formula generică este:
RIGHT( celulă , LEN( celulă ) - SEARCH(" char ", celulă ))Aici, calculăm din nou poziția caracterului țintă cu ajutorul funcției SEARCH, o scădem din lungimea totală a șirului returnată de LEN și transmitem diferența funcției RIGHT, astfel încât aceasta să extragă atâtea caractere de la sfârșitul șirului.
De exemplu, pentru a elimina textul înainte de o virgulă, formula este:
=RIGHT(A2, LEN(A2) - SEARCH(",",", A2))
În cazul nostru, virgula este urmată de un caracter de spațiu. Pentru a evita spațiile de început în rezultate, formulăm formula de bază în funcția TRIM:
=TRIM(RIGHT(A2, LEN(A2) - SEARCH(",",", A2)))
Note:
- Ambele exemple de mai sus presupun că există doar o instanță a delimitatorului în șirul original. Dacă există mai multe apariții, textul va fi eliminat înainte/după delimitator. prima instanță .
- Funcția SEARCH este nu ține cont de majuscule și minuscule , ceea ce înseamnă că nu face nici o diferență între caracterele minuscule și majuscule. Dacă caracterul specific este o literă și doriți să faceți distincția între majuscule și minuscule, atunci folosiți opțiunea Sensibil la majuscule și minuscule Funcția FIND în loc de SEARCH.
Cum se șterge textul după a N-a apariție a unui caracter
În situația în care un șir sursă conține mai multe instanțe ale delimitatorului, este posibil să aveți nevoie să eliminați textul după o anumită instanță. Pentru aceasta, utilizați următoarea formulă:
STÂNGA( celulă , FIND("#", SUBSTITUTE( celulă , " char ", "#", n )) -1)Unde n este apariția caracterului după care se elimină textul.
Logica internă a acestei formule necesită utilizarea unui caracter care nu este prezent nicăieri în datele sursă, un simbol hash (#) în cazul nostru. Dacă acest caracter apare în setul dvs. de date, utilizați altceva în loc de "#".
De exemplu, pentru a elimina tot ce urmează după a doua virgulă din A2 (și virgula însăși), formula este:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
Cum funcționează această formulă:
Partea cheie a formulei este funcția FIND care calculează poziția celui de-al n-lea delimitator (virgulă în cazul nostru). Iată cum:
Înlocuim a doua virgulă din A2 cu un simbol hașu (sau orice alt caracter care nu există în datele dumneavoastră) cu ajutorul funcției SUBSTITUTE:
SUBSTITUTE(A2, ",", "#", 2)
Șirul de caractere rezultat se duce la cel de-al doilea argument al FIND, astfel încât acesta găsește poziția lui "#" în acel șir:
FIND("#", "Emma, Design# (102) 123-4568")
FIND ne spune că "#" este al 13-lea caracter din șirul de caractere. Pentru a afla numărul de caractere care îl precedă, trebuie doar să scădem 1 și vom obține 12 ca rezultat:
FIND("#", SUBSTITUTE(A2, ",", "#", 2)) - 1
Acest număr merge direct la num_chars din LEFT, cerându-i să extragă primele 12 caractere din A2:
=LEFT(A2, 12)
Asta e!
Cum se șterge textul înainte de a N-a apariție a unui caracter
Formula generică pentru a elimina un subșir înainte de un anumit caracter este:
DREAPTA(SUBSTITUT( celulă , " char ", "#", n ), LEN( celulă ) - FIND("#", SUBSTITUTE( celulă , " char ", "#", n )) -1)De exemplu, pentru a elimina textul înainte de a doua virgulă din A2, formula este:
=RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
Pentru a elimina un spațiu de început, folosim din nou funcția TRIM ca un înveliș:
=TRIM(RIGHT(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", "#", 2))))
Cum funcționează această formulă:
Pe scurt, aflăm câte caractere se află după al n-lea delimitator și extragem din dreapta o subșir de lungimea corespunzătoare. Mai jos este defalcată formula:
În primul rând, înlocuim a doua virgulă din A2 cu un simbol hash:
SUBSTITUTE(A2, ",", "#", 2)
Șirul de caractere rezultat se duce la text argument de DREPT:
RIGHT("Emma, Design# (102) 123-4568", ...
În continuare, trebuie să definim câte caractere trebuie extrase de la sfârșitul șirului. Pentru aceasta, găsim poziția simbolului hash în șirul de mai sus (care este 13):
FIND("#", SUBSTITUTE(A2, ",", "#", 2))
Și se scade din lungimea totală a șirului (care este egală cu 28):
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))
Diferența (15) este transmisă celui de-al doilea argument al RIGHT, care îl instruiește să extragă ultimele 15 caractere din șirul din primul argument:
RIGHT("Emma, Design# (102) 123-4568", 15)
Rezultatul este o subșiră "(102) 123-4568", care este foarte aproape de rezultatul dorit, cu excepția unui spațiu de început. Prin urmare, folosim funcția TRIM pentru a scăpa de el.
Cum să eliminați textul după ultima apariție a unui caracter
În cazul în care valorile dumneavoastră sunt separate de un număr variabil de delimitatori, este posibil să doriți să eliminați tot ceea ce se află după ultima instanță a acelui delimitator. Acest lucru poate fi realizat cu următoarea formulă:
STÂNGA( celulă , FIND("#", SUBSTITUTE( celulă , " char ", "#", LEN( celulă ) - LEN(ÎNLOCUITOR( celulă , " char ", "")))) -1)Să presupunem că coloana A conține diverse informații despre angajați, dar valoarea de după ultima virgulă este întotdeauna un număr de telefon. Obiectivul dvs. este să eliminați numerele de telefon și să păstrați toate celelalte detalii.
Pentru a atinge obiectivul, puteți elimina textul de după ultima virgulă din A2 cu această formulă:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)
Copiați formula în josul coloanei și veți obține acest rezultat:
Cum funcționează această formulă:
Esența formulei este că determinăm poziția ultimului delimitator (virgulă) din șir și tragem o subșiră de la stânga până la delimitator. Obținerea poziției delimitatorului este cea mai dificilă parte, și iată cum o rezolvăm:
În primul rând, aflăm câte virgule există în șirul original. Pentru aceasta, înlocuim fiecare virgulă cu nimic (""") și trimitem șirul rezultat la funcția LEN:
LEN(SUBSTITUTE(A2, ",",""))
Pentru A2, rezultatul este 35, care este numărul de caractere din A2 fără virgulă.
Se scade numărul de mai sus din lungimea totală a șirului (38 de caractere):
LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))
... și veți obține 3, care este numărul total de virgule din A2 (și, de asemenea, numărul ordinal al ultimei virgule).
În continuare, utilizați combinația deja cunoscută a funcțiilor FIND și SUBSTITUTE pentru a obține poziția ultimei virgule din șirul de caractere. Numărul instanței (a treia virgulă în cazul nostru) este furnizat de formula LEN SUBSTITUTE menționată mai sus:
FIND("#", SUBSTITUTE(A2, ",", "#", 3))
Se pare că a treia virgulă este al 23-lea caracter din A2, ceea ce înseamnă că trebuie să extragem 22 de caractere care o precedă. Deci, punem formula de mai sus minus 1 în num_chars argumentul lui LEFT:
LEFT(A2, 23-1)
Cum să eliminați textul înainte de ultima apariție a unui caracter
Pentru a șterge tot ce se află înainte de ultima instanță a unui anumit caracter, formula generică este:
În exemplul nostru de tabel, pentru a elimina textul dinaintea ultimei virgule, formula are următoarea formă:
=RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))))
Ca o notă de finisare, îl introducem în funcția TRIM pentru a elimina spațiile de început:
=TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))))
Cum funcționează această formulă:
Pe scurt, obținem poziția ultimei virgule, așa cum s-a explicat în exemplul anterior, și o scădem din lungimea totală a șirului:
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))
Ca rezultat, obținem numărul de caractere de după ultima virgulă și îl transmitem funcției RIGHT, astfel încât aceasta să aducă atâtea caractere de la sfârșitul șirului.
Funcție personalizată de eliminare a textului de o parte și de alta a unui caracter
După cum ați văzut în exemplele de mai sus, puteți rezolva aproape orice caz de utilizare utilizând funcțiile native ale Excel în diferite combinații. Problema este că trebuie să rețineți o mână de formule complicate. Hmm, ce-ar fi dacă am scrie propria funcție care să acopere toate scenariile? Pare o idee bună. Așadar, adăugați următorul cod VBA în registrul de lucru (pașii detaliați pentru a insera VBA în Excel suntaici):
Function RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num =delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If End If RemoveText = str_result End FunctionFuncția noastră se numește RemoveText și are următoarea sintaxă:
RemoveText(string, delimitator, occurrence, is_after)Unde:
Șir de caractere - este șirul de text original. Poate fi reprezentat printr-o referință de celulă.
Delimitator - caracterul înainte/după care se elimină textul.
Ocazie - exemplul delimitatorului.
Este_după - o valoare booleană care indică de care parte a delimitatorului se elimină textul. Poate fi un singur caracter sau o secvență de caractere.
- TRUE - șterge tot ce urmează după delimitator (inclusiv delimitatorul însuși).
- FALSE - șterge tot ce se află înainte de delimitator (inclusiv delimitatorul însuși).
Odată ce codul funcției este inserat în registrul de lucru, puteți elimina subșirurile din celule folosind formule compacte și elegante.
De exemplu, pentru a șterge totul după prima virgulă din A2, formula din B2 este:
=RemoveText(A3, ", ", ", 1, TRUE)
Pentru a șterge tot ce se află înainte de prima virgulă din A2, formula din C2 este:
=RemoveText(A3, ", ", ", 1, FALSE)
Deoarece funcția noastră personalizată acceptă un șir de caractere pentru delimitator , punem o virgulă și un spațiu (", ") în cel de-al doilea argument pentru a nu mai fi nevoiți să tăiem ulterior spațiile de început.
Funcția noastră personalizată funcționează foarte bine, nu-i așa? Dar dacă credeți că este o soluție completă, nu ați văzut încă următorul exemplu :)
Ștergeți tot ce se află înainte, după sau între caractere
Pentru a obține și mai multe opțiuni de eliminare a caracterelor individuale sau a textului din mai multe celule, în funcție de potrivire sau poziție, adăugați suita Ultimate Suite la setul de instrumente Excel.
Aici, vom examina mai îndeaproape Eliminați în funcție de poziție caracteristică situată pe Date Ablebits tab> Text grup> Eliminați .
Mai jos, vom aborda cele mai frecvente două scenarii.
Eliminați totul înainte sau după un anumit text
Să presupunem că toate șirurile sursă conțin un cuvânt sau un text comun și doriți să ștergeți tot ce se află înainte sau după acel text. Pentru a face acest lucru, selectați datele sursă, rulați comanda Eliminați în funcție de poziție și configurați-l așa cum se arată mai jos:
- Selectați Toate caracterele înainte de text sau Toate caracterele după text și introduceți textul (sau caracterul) cheie în caseta de lângă acesta.
- În funcție de faptul dacă literele majuscule și minuscule trebuie tratate ca fiind caractere diferite sau identice, bifați sau debifați opțiunea Sensibil la majuscule și minuscule cutie.
- Hit Eliminați .
În acest exemplu, eliminăm toate caracterele care preced cuvântul "eroare" din celulele A2:A8:
Și obținem exact rezultatul pe care îl căutăm:
Eliminarea textului dintre două caractere
În situația în care informațiile irelevante se află între 2 caractere specifice, iată cum le puteți șterge rapid:
- Alegeți Îndepărtați toate subșirurile și introduceți două caractere în căsuțele de mai jos.
- Dacă trebuie eliminate și caracterele "între", verificați Includerea delimitatorilor cutie.
- Faceți clic pe Eliminați .
Ca exemplu, ștergem tot ce se află între două caractere tilde (~) și obținem ca rezultat șiruri de caractere perfect curățate:
Pentru a încerca alte caracteristici utile incluse în acest instrument multifuncțional, vă încurajez să descărcați o versiune de evaluare la sfârșitul acestui articol. Vă mulțumesc pentru lectură și sper să ne vedem pe blog săptămâna viitoare!
Descărcări disponibile
Eliminați primele sau ultimele caractere - exemple (fișier .xlsm)
Ultimate Suite - versiunea de încercare (fișier .exe)