Hefur þú einhvern tíma fengið Excel vinnublað með nöfnum, þar sem öll nöfnin eru öll í einum reit? Verkefni þitt er að skipta nöfnunum í fornafn, eftirnafn - ferli sem kallast þáttun. Þú getur prófað að nota formúlu og/eða aðgerð til að hjálpa, eða þú getur notað Visual Basic for Applications (VBA) kóða.
Algeng nálgun er að finna bilið á milli fornafns og eftirnafns, og voila! – þú veist hvar fornafnið endar og eftirnafnið byrjar.
Nema þú hafir nöfn sem eru flóknari í uppbyggingu, eins og Dr. William Healer eða Zak H. Sneezer III.
Hér er dæmigerð VBA rútína sem lítur í gegnum hvert nafn, staf fyrir staf, þar til það finnur bil. Síðan setur það það sem er vinstra megin við bilið í einn dálk og það sem er hægra megin við bilið í dálknum á eftir.
Gerðu þar til ActiveCell = "
thename = ActiveCell.Value
Fyrir að leita = 1 Til Len(nafn)
Ef Mid(thename, looking, 1) = " " Þá
ActiveCell.Offset(0, 1) = Vinstri(nafnið, útlit - 1)
ActiveCell.Offset(0, 2) = Mið(nafn, útlit + 1)
Hætta fyrir
End If
Næst
ActiveCell.Offset(1, 0). Virkja
Lykkju
Þessi venja er gagnleg við að flokka nöfn með aðeins einu bili, eins og Harvey Wallbanger eða Tom Collins. Eftirfarandi tafla sýnir niðurstöðuna af því að keyra kóðann á nöfnum með fleiri en einu bili:
| Dr. William Healer |
Dr. |
William Healer |
| Zak H. Sneezer III |
Zak |
H. Sneezer III |
Þetta er ekki góð þáttunartilraun. Það virkaði fínt til að flokka Harvey Wallbanger og Tom Collins en ekki eins vel fyrir hin nöfnin.
Hér er þróaðri tækni sem skilar betri árangri. Hafðu í huga að þáttun nöfn er ekki fullkomin, en að fara að þessu með þessum hætti gerir betur.
Tæknin er sú að telja hversu mörg rými eru í fullu nafni og skipta svo í sundur nafnið á einu rýminu. Sérstaklega, ef það eru þrjú eða fleiri rými, notaðu rýmið tvö inn frá hægri sem brotrými; annars skaltu nota rýmið lengst til hægri sem brotrými.
Þetta ferli er keyrt í VBA undirrútínu sem kallar á fall á meðan það er farið í gegnum nöfnin. Fjöldi bila er ákvarðaður snemma í aðallykkjunni og aðgerðin skilar stöðunni þar sem brotbilið er.
Sub parse_names()
Dimma nafnið sem strengur
Dimma bil sem heiltala
Gerðu þar til ActiveCell = "
thename = ActiveCell.Value
bil = 0
Fyrir próf = 1 Til Len(nafn)
Ef Mid(thename, test, 1) = " " Þá
bil = bil + 1
End If
Næst
Ef bil >= 3 Þá
break_space_position = space_position(" ", nafnið, bil - 1)
Annar
break_space_position = space_position(" ", nafn, bil)
End If
Ef bil > 0 Þá
ActiveCell.Offset(0, 1) = Left(nafn, break_space_position - 1)
ActiveCell.Offset(0, 2) = Mid(thename, break_space_position + 1)
Annar
' þetta er fyrir þegar fullt nafn er bara eitt nafn án bils
ActiveCell.Offset(0, 1) = nafnið
End If
ActiveCell.Offset(1, 0). Virkja
Lykkju
End Sub
Aðgerð space_position(hvað_á_leita_að sem streng, hvað_á_leita_í sem streng, bil_telja sem heiltala) Sem heiltala
Dim loop_counter Sem heiltala
bil_staða = 0
Fyrir loop_counter = 1 Til space_count
space_position = InStr(lykkja_teljari + bil_staða, hvað_á að leita, hvað_á að leita að)
Ef space_position = 0 Þá Hætta fyrir
Næst
Lokaaðgerð
Eftirfarandi tafla sýnir hvernig útkoman lítur út núna:
| Dr. William Healer |
Dr. William |
Heilari |
| Zak H. Sneezer III |
Zak H. |
Sneezer III |
Nafnagreining er jafnmikil list og tæknilegt ferli. Í þessu öðru dæmi eru öll fornöfn og eftirnöfn í réttum dálkum. Ef nýtt langt nafn með fimm eða fleiri bilum væri kynnt gæti rútínan misskilið þáttunina og VBA kóðann þyrfti að setja meira skilyrt próf í það. En þetta dæmi er nú á réttri leið sem iðnaðarstyrkt nafngreiningarútína.