Dostali ste niekedy excelovský pracovný hárok s menami, v ktorom sú celé mená v jednej bunke? Vašou úlohou je rozdeliť mená na krstné meno a priezvisko - proces známy ako analýza. Na pomoc môžete skúsiť použiť vzorec a/alebo funkciu, alebo môžete použiť kód jazyka Visual Basic for Applications (VBA).
Bežným prístupom je nájsť medzeru medzi krstným menom a priezviskom a voila! – viete, kde končí krstné meno a začína priezvisko.
Pokiaľ nemáte mená so zložitejšou štruktúrou, ako napríklad Dr. William Healer alebo Zak H. Sneezer III.
Tu je typická rutina VBA, ktorá prezerá každé meno, znak po znaku, až kým nenájde medzeru. Potom umiestni všetko, čo je naľavo od priestoru v jednom stĺpci, a to, čo je napravo od priestoru v stĺpci po ňom.
Urobiť, kým ActiveCell = "
thename = ActiveCell.Value
Na hľadanie = 1 Lenovi (meno)
If Mid(thename, looking, 1) = " " Potom
ActiveCell.Offset(0, 1) = Left(názov, pohľad - 1)
ActiveCell.Offset(0, 2) = Mid(názov, vzhľad + 1)
Ukončiť pre
Koniec Ak
Ďalšie
ActiveCell.Offset(1, 0).Aktivovať
Slučka
Táto rutina je užitočná pri analýze mien len s jednou medzerou, ako napríklad Harvey Wallbanger alebo Tom Collins. Nasledujúca tabuľka zobrazuje výsledok spustenia kódu na menách s viac ako jednou medzerou:
Dr William Healer |
DR. |
William Healer |
Žák H. Kýchal III |
Zak |
H. Kýchal III |
Toto nie je dobrý pokus o analýzu. Pri analýze Harveyho Wallbangera a Toma Collinsa to fungovalo dobre, ale pri ostatných menách to tak dobre nebolo.
Tu je rozvinutejšia technika, ktorá prináša lepšie výsledky. Majte na pamäti, že analýza mien nie je dokonalá, ale takto to robí lepšie.
Technika je spočítať, koľko medzier je v celom názve, a potom rozdeliť názov na jednu z medzier. Najmä, ak sú tri alebo viac medzier, použite ako medzeru medzeru dva sprava; v opačnom prípade použite medzeru úplne vpravo ako medzeru.
Tento proces je spustený v podprograme VBA, ktorý volá funkciu počas cyklovania mien. Počet medzier je určený na začiatku hlavnej slučky a funkcia vráti pozíciu, kde sa nachádza medzera.
Sub parse_names()
Dim thename As String
Dim spaces As Integer
Urobiť, kým ActiveCell = "
thename = ActiveCell.Value
medzery = 0
Na test = 1 Len (meno)
Ak Mid(meno, test, 1) = " " Potom
medzery = medzery + 1
Koniec Ak
Ďalšie
Ak medzery >= 3 Potom
break_space_position = space_position(" ", názov, medzery - 1)
Inak
break_space_position = space_position(" ", názov, medzery)
Koniec Ak
Ak medzery > 0 Potom
ActiveCell.Offset(0, 1) = Left(thename, break_space_position - 1)
ActiveCell.Offset(0, 2) = Mid(názov, poloha_medzera + 1)
Inak
Toto je pre prípad, keď je celé meno iba jedno meno bez medzier
ActiveCell.Offset(0, 1) = názov
Koniec Ak
ActiveCell.Offset(1, 0).Aktivovať
Slučka
End Sub
Funkcia space_position(what_to_look_for As String, what_to_look_in As String, space_count As Integer) As Integer
Dim loop_counter As Integer
space_position = 0
Pre loop_counter = 1 To space_count
space_position = InStr(loop_counter + space_position, what_to_look_in, what_to_look_for)
Ak space_position = 0, potom Exit For
Ďalšie
End Function
Nasledujúca tabuľka ukazuje, ako teraz vyzerá výsledok:
Dr William Healer |
Dr William |
Liečiteľ |
Žák H. Kýchal III |
Zak H. |
Kýchač III |
Analýza mien je rovnako umenie ako technický proces. V tomto druhom príklade sú všetky mená a priezviská v správnych stĺpcoch. Ak by sa zaviedol nový dlhý názov s piatimi alebo viacerými medzerami, rutina by mohla mať nesprávnu analýzu a kód VBA by potreboval viac podmieneného testovania. Ale tento príklad je teraz na správnej ceste ako rutina priemyselnej analýzy mien.