Testua baldintzaren arabera lotzea

Dagoeneko idatzi nuen nola azkar itsatsi dezakezun testua hainbat gelaxka bakarrean eta, alderantziz, testu-kate luze bat osagaietan analizatu. Ikus dezagun zeregin itxi bat, baina apur bat konplexuagoa: nola itsatsi hainbat gelaxketako testua zehaztutako baldintza jakin bat betetzen denean. 

Demagun bezeroen datu-base bat dugula, non enpresaren izen batek bere langileen hainbat mezu elektronikorekin bat egin dezakeela. Gure zeregina da helbide guztiak enpresa-izenen arabera biltzea eta kateatzea (komaz edo puntuz bereizita), bezeroentzako posta-zerrenda bat egiteko, adibidez, hau da, honelako zerbait ateratzeko:

Testua baldintzaren arabera lotzea

Beste era batera esanda, testua baldintzaren arabera itsatsiko (lotuko) duen tresna bat behar dugu, funtzioaren analogo bat. SUMMESLI (BATURIFA), baina testurako.

0. metodoa. Formula

Ez oso dotorea, baina biderik errazena. Formula sinple bat idatz dezakezu, hurrengo errenkadako enpresa aurrekoarekiko desberdina den egiaztatuko duena. Ez bada desberdina, itsatsi hurrengo helbidea komaz bereizita. Desberdintasuna bada, metatutakoa "berrezarri" egingo dugu, berriro hasiz:

Testua baldintzaren arabera lotzea

Ikuspegi honen desabantailak begien bistakoak dira: lortutako zutabe gehigarriko gelaxka guztietatik, enpresa bakoitzeko azkenak baino ez ditugu behar (horia). Zerrenda handia bada, bizkor hautatzeko, beste zutabe bat gehitu beharko duzu funtzioa erabiliz DLSTR (LEN), metatutako kateen luzera egiaztatuz:

Testua baldintzaren arabera lotzea

Orain iragazi ditzakezu eta beharrezkoak diren helbideak itsatsita kopiatu ditzakezu gehiago erabiltzeko.

1. metodoa. Itsatsiaren makrofuntzioa baldintza baten arabera

Jatorrizko zerrenda ez badago enpresaren arabera ordenatzen, orduan goiko formula sinpleak ez du funtzionatzen, baina erraz mugi zaitezke VBAn funtzio pertsonalizatu txiki batekin. Ireki Visual Basic Editor teklatuko lasterbide bat sakatuz Alt + F11 edo botoia erabiliz Visual Basic fitxa developer (Garatzailea). Irekitzen den leihoan, sartu modulu huts berri bat menuan Txertatu – Modulua eta kopiatu bertan gure funtzioaren testua:

Funtzioa MergeIf(TextRange Range As, SearchRange Range As, Condition As String) Dim Delimeter As String, i As Long Delimeter = ", " itsatsiak ez dira elkarren berdinak - Errore batekin irteten gara SearchRange.Count <> TextRange.Count Ondoren, MergeIf = CVErr(xlErrRef) Irten Funtzioa Amaiera 'gelaxka guztietatik igarotzen bada, egiaztatu baldintza eta bildu testua OutText For i = 1 To SearchRange aldagaian. Cells.Count If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter Hurrengoa Azken mugatzailerik gabeko emaitzak erakusten ditut MergeIf = Left (OutText, Len (OutText) - Len (Delimeter)) End funtzioa  

Orain Microsoft Excelera itzultzen bazara, funtzioen zerrendan (botoia fx formula-barran edo fitxan Formulak – Txertatu funtzioa) gure funtzioa aurkitzea posible izango da MergeIf kategorian Erabiltzaileak definitutakoa (Erabiltzaileak zehaztuta). Funtzioaren argumentuak hauek dira:

Testua baldintzaren arabera lotzea

2. metodoa. Lotu testua baldintza ez-zehaztasunez

Gure makroaren 13. lerroko lehen karakterea ordezkatzen badugu = gutxi gorabeherako partida-operadoreari Like, ondoren, hasierako datuen hautaketa-irizpidearekin bat etorriz itsastea posible izango da. Esate baterako, enpresaren izena aldaera ezberdinetan idatz badaiteke, denak egiaztatu eta bildu ditzakegu funtzio bakarrarekin:

Testua baldintzaren arabera lotzea

Komodin estandarrak onartzen dira:

  • izartxoa (*) - edozein karaktere kopurua adierazten du (haien eza barne)
  • galdera ikurra (?) - edozein karaktere bakarra adierazten du
  • libra zeinua (#) - edozein zifra adierazten du (0-9)

Lehenespenez, Like operadoreak maiuskulak eta minuskulak bereizten ditu, hau da, adibidez, "Orion" eta "orion" enpresa ezberdin gisa ulertzen ditu. Maiuskulak eta minuskulak baztertzeko, lerroa gehi dezakezu Visual Basic editorean moduluaren hasieran Testua Konparatu aukera, Like aldatuko duena maiuskulak eta minuskulak bereizteko.

Modu honetan, oso maskara konplexuak konposa ditzakezu baldintzak egiaztatzeko, adibidez:

  • ?1##??777RUS - 777 eskualdeko matrikula guztien aukeraketa, 1etik hasita
  • LLC* - izena LLCrekin hasten den enpresa guztiak
  • ##7## - Bost digituko kode digitala duten produktu guztiak, non hirugarren zifra 7 den
  • ?????? – bost letretako izen guztiak, etab.

3. metodoa. Bi baldintzatan testua itsasteko makro funtzioa

Lanean arazoren bat egon daiteke testua baldintza bat baino gehiago lotu behar dituzunean. Esaterako, pentsa dezagun gure aurreko taulan hiriarekin zutabe bat gehiago gehitu zela, eta itsastea egin behar dela enpresa jakin baterako ez ezik, hiri jakin baterako ere. Kasu honetan, gure funtzioa apur bat modernizatu beharko da barrutiaren beste egiaztapen bat gehituz:

Funtzioa MergeIfs(TextRange As Range As, SearchRange1 Range As, Condition1 As String, SearchRange2 As Range, Condition2 String gisa) Dim Delimeter As String, i As Long Delimeter = ", " 'mugatzaile karaktereak (espazioarekin edo ; etab. ordezkatu daitezke) e.) 'Validazio eta itsasteko barrutiak elkarren berdinak ez badira, irten errore batekin SearchRange1.Count <> TextRange.Count Or SearchRange2.Count <> TextRange.Count Then MergeIfs = CVErr(xlErrRef) Irten Funtzioa End If 'pasatu gelaxka guztietan, egiaztatu baldintza guztiak eta bildu testua OutText aldagaian For i = 1 To SearchRange1.Cells.Count If SearchRange1.Cells(i) = Condition1 Eta SearchRange2.Cells(i) = Condition2 Then OutText = OutText & TextRange.Cells(i) & Delimeter End If Next I 'azken mugatzailerik gabe erakusten ditu emaitzak MergeIfs = Left(OutText, Len(OutText) - Len(Delimeter)) End Funtzioa  

Modu berean aplikatuko da - orain argumentuak gehiago zehaztu behar dira:

Testua baldintzaren arabera lotzea

4. metodoa. Power Query-n taldekatzea eta itsastea

Arazoa VBAn programatu gabe konpondu dezakezu, doako Power Query gehigarria erabiltzen baduzu. Excel 2010-2013rako hemen deskargatu daiteke, eta Excel 2016-n dagoeneko lehenetsita dago. Ekintzen sekuentzia honako hau izango da:

Power Query-k ez daki nola funtzionatzen duen mahai arruntekin, beraz, lehen urratsa gure taula "adimentsu" bihurtzea da. Horretarako, hautatu eta sakatu konbinazioa Ctrl+T edo hautatu fitxatik Hasiera - Taula gisa formatu (Hasiera — Taula gisa formatu). Ondoren agertzen den fitxan Constructor (Diseinua) taularen izena ezar dezakezu (estandarra utzi dut Table 1):

Testua baldintzaren arabera lotzea

Orain karga dezagun gure taula Power Query gehigarrian. Horretarako, fitxan Data (Excel 2016 baduzu) edo Power Query fitxan (Excel 2010-2013 baduzu) egin klik Mahaitik (Datuak — Taulatik):

Testua baldintzaren arabera lotzea

Irekitzen den kontsulta-editorearen leihoan, hautatu zutabea goiburuan klik eginez Enpresa eta sakatu goiko botoia Taldea (Taldeka). Sartu zutabe berriaren izena eta eragiketa mota multzoan - Lerro guztiak (Errenkada guztiak):

Testua baldintzaren arabera lotzea

Sakatu Ados eta talde bakoitzeko balioen taula txiki bat lortuko dugu. Taulen edukia argi eta garbi ikusten da ondoriozko zutabeko gelaxken atzealde zurian ezkerreko botoiarekin klik egiten baduzu (ez testuan!):

Testua baldintzaren arabera lotzea

Orain gehi dezagun zutabe bat gehiago, non, funtzioa erabiliz, Helbideen zutabeen edukia mini-tauletako bakoitzean itsasten dugun, komaz bereizita. Horretarako, fitxan Gehitu zutabea sakatzen dugu Zutabe pertsonalizatua (Gehitu zutabea — Zutabe pertsonalizatua) eta agertzen den leihoan, idatzi zutabe berriaren izena eta akoplamendu formula Power Query-n integratutako M hizkuntzan:

Testua baldintzaren arabera lotzea

Kontuan izan M-funtzio guztiak maiuskulak eta minuskulak bereizten direla (Excel ez bezala). Sakatu ondoren OK Helbide itsatsiekin zutabe berri bat jasoko dugu:

Testua baldintzaren arabera lotzea

Dagoeneko beharrezkoa ez den zutabea kentzea geratzen da Taularen helbideak (egin klik eskuineko botoian izenburuan) Ezabatu zutabea) eta igo emaitzak fitxara klik eginez Hasiera — Itxi eta deskargatu (Etxea — Itxi eta kargatu):

Testua baldintzaren arabera lotzea

Ñabardura garrantzitsua: Aurreko metodoak (funtzioak) ez bezala, Power Query-ko taulak ez dira automatikoki eguneratzen. Etorkizunean iturburuko datuetan aldaketarik egongo bada, emaitzen taulako edozein lekutan eskuineko botoiarekin klik egin beharko duzu eta komandoa hautatu beharko duzu. Eguneratu eta Gorde (Freskatu).

  • Nola zatitu testu-kate luze bat zatitan
  • Gelaxka ezberdinetako testua bakarrean itsasteko hainbat modu
  • Atsegin dut operadorea erabiltzea testua maskara baten aurka probatzeko

Utzi erantzun bat