Kas teile on kunagi antud Exceli tööleht nimedega, kus täisnimed on kõik ühes lahtris? Teie ülesandeks on jagada nimed eesnimeks ja perekonnanimeks – seda protsessi nimetatakse sõelumiseks. Võite proovida kasutada abistamiseks valemit ja/või funktsiooni või kasutada Visual Basic for Applications (VBA) koodi.
Levinud lähenemisviis on leida tühik eesnime ja perekonnanime vahel ning voila! – tead, kus eesnimi lõpeb ja perekonnanimi algab.
Välja arvatud juhul, kui teil on keerulisema struktuuriga nimed, näiteks Dr William Healer või Zak H. Sneezer III.
Siin on tüüpiline VBA rutiin, mis vaatab iga nime tähemärgi haaval läbi, kuni leiab tühiku. Seejärel asetab see ühte veergu kõik, mis jääb tühikust vasakule, ja mis tahes, mis asub pärast veerus asuvast tühikust paremal.
Tehke kuni ActiveCell = "
thename = ActiveCell.Value
Vaatamiseks = 1 Lenile (nimi)
Kui Mid(nimi, välimus, 1) = " " Siis
ActiveCell.Offset(0, 1) = Vasak(nimi, otsimine - 1)
ActiveCell.Offset(0, 2) = Mid(nimi, välimus + 1)
Välju
Lõpeta Kui
Edasi
ActiveCell.Offset(1, 0).Aktiveeri
Loop
See rutiin on abiks vaid ühe tühikuga nimede sõelumisel, näiteks Harvey Wallbanger või Tom Collins. Järgmine tabel näitab koodi käivitamise tulemust nimedele, millel on rohkem kui üks tühik:
| Dr William ravitseja |
Dr. |
William ravitseja |
| Zak H. Aevastaja III |
Zak |
H. Aevastaja III |
See ei ole hea sõelumiskatse. Harvey Wallbangeri ja Tom Collinsi parsimisel õnnestus see hästi, kuid teiste nimede puhul mitte nii hästi.
Siin on rohkem arenenud tehnika, mis annab paremaid tulemusi. Pidage meeles, et nimede sõelumine ei ole täiuslik, kuid see toimib paremini.
Tehnika seisneb selles, et loendatakse, mitu tühikut täisnimes on, ja seejärel lahutatakse nimi ühes tühikutest. Eelkõige, kui tühikuid on kolm või enam, kasutage eraldusruumina paremalt kahe sissepoole jäävat tühikut; muul juhul kasutage murderuumina parempoolseimat tühikut.
Seda protsessi käivitatakse VBA alamprogrammis, mis kutsub funktsiooni nimede silmuses. Tühikute arv määratakse põhitsükli alguses ja funktsioon tagastab asukoha, kus on murderuum.
Alam parse_names()
Dim thename As String
Hämarad tühikud täisarvuna
Tehke kuni ActiveCell = "
thename = ActiveCell.Value
tühikud = 0
Testi jaoks = 1 kuni Len (nimi)
Kui Mid(nimi, test, 1) = " " Siis
tühikud = tühikud + 1
Lõpeta Kui
Edasi
Kui tühikud >= 3 Siis
break_space_position = space_position(" ", nimi, tühikud - 1)
Muidu
break_space_position = space_position(" ", nimi, tühikud)
Lõpeta Kui
Kui tühikud > 0 Siis
ActiveCell.Offset(0, 1) = Vasak(nimi, break_space_position - 1)
ActiveCell.Offset(0, 2) = Mid(nimi, break_space_position + 1)
Muidu
See on mõeldud juhul, kui täisnimi on ainult üks nimi ilma tühikuteta
ActiveCell.Offset(0, 1) = nimi
Lõpeta Kui
ActiveCell.Offset(1, 0).Aktiveeri
Loop
Lõpeta alam
Funktsioon space_position(mida_otsida stringina, mida_vaadata stringina, tühiku arv täisarvuna) täisarvuna
Dim loop_counter täisarvuna
ruumi_positsioon = 0
Silmuse_loendur = 1 kuni tühikute_loendus
space_position = InStr(silmuse_loendur + tühiku_positsioon, mida_vaadata, mida_otsida)
Kui tühiku_positsioon = 0, siis Exit For
Edasi
Lõpetamisfunktsioon
Järgmine tabel näitab, kuidas tulemus praegu välja näeb:
| Dr William ravitseja |
Dr William |
Tervendaja |
| Zak H. Aevastaja III |
Zak H. |
Aevastaja III |
Nime parsimine on samavõrd kunst kui tehniline protsess. Selles teises näites on kõik ees- ja perekonnanimed õigetes veergudes. Kui kasutusele võetakse uus viie või enama tühikuga pikk nimi, võib rutiin parsimisel valesti minna ja VBA-kood vajaks rohkem tingimuslikku testimist. Kuid see näide on nüüd tööstusliku tugevusega nimeparsimise rutiinina õigel teel.