Har du någonsin fått ett Excel-kalkylblad med namn, där de fullständiga namnen finns i en cell? Din uppgift är att dela upp namnen i förnamn, efternamn - en process som kallas för parsning. Du kan prova att använda en formel och/eller en funktion som hjälp, eller så kan du använda Visual Basic for Applications (VBA)-kod.
Ett vanligt tillvägagångssätt är att hitta mellanrummet mellan förnamn och efternamn, och voila! – du vet var förnamnet slutar och efternamnet börjar.
Såvida du inte har namn som är mer komplexa i strukturen, som Dr. William Healer eller Zak H. Sneezer III.
Här är en typisk VBA-rutin som tittar igenom varje namn, tecken för tecken, tills det hittar ett mellanslag. Sedan placerar den det som är till vänster om utrymmet i en kolumn och det som är till höger om utrymmet i kolumnen efter.
Gör tills ActiveCell = "
thename = ActiveCell.Value
För att leta = 1 Till Len(namnet)
If Mid(thename, looking, 1) = " " Då
ActiveCell.Offset(0, 1) = Vänster(namnet, tittar - 1)
ActiveCell.Offset(0, 2) = Mid(namnet, tittar + 1)
Avsluta för
Avsluta om
Nästa
ActiveCell.Offset(1, 0).Aktivera
Slinga
Denna rutin är användbar för att analysera namn med bara ett blanksteg, som Harvey Wallbanger eller Tom Collins. Följande tabell visar resultatet av att köra koden på namn med mer än ett mellanslag:
| Dr William Healer |
Dr. |
William Healer |
| Zak H. Sneezer III |
Zak |
H. Nysare III |
Detta är inte ett bra analysförsök. Det fungerade bra för att analysera Harvey Wallbanger och Tom Collins men inte så bra för de andra namnen.
Här är en mer utvecklad teknik som ger bättre resultat. Tänk på att det inte är perfekt att tolka namn, men att gå tillväga på det här sättet gör ett bättre jobb.
Tekniken är att räkna hur många blanksteg som finns i det fullständiga namnet och sedan bryta isär namnet på ett av mellanrummen. I synnerhet, om det finns tre eller fler utrymmen, använd utrymmet två in från höger som brytutrymme; annars, använd utrymmet längst till höger som brytutrymme.
Denna process körs i en VBA-subrutin som anropar en funktion samtidigt som man går igenom namnen. Antalet mellanslag bestäms tidigt i huvudslingan, och funktionen returnerar positionen där brytutrymmet är.
Sub parse_names()
Dimma namnet som sträng
Dimma mellanslag som heltal
Gör tills ActiveCell = "
thename = ActiveCell.Value
mellanslag = 0
För test = 1 Till Len(namnet)
Om Mid(namn, test, 1) = " " Då
mellanslag = mellanslag + 1
Avsluta om
Nästa
Om mellanslag >= 3 Då
break_space_position = space_position(" ", namnet, mellanslag - 1)
Annan
break_space_position = space_position(" ", namnet, mellanslag)
Avsluta om
Om mellanslag > 0 Då
ActiveCell.Offset(0, 1) = Left(thename, break_space_position - 1)
ActiveCell.Offset(0, 2) = Mid(namnet, break_space_position + 1)
Annan
' det här är för när det fullständiga namnet bara är ett enda namn utan mellanslag
ActiveCell.Offset(0, 1) = namnet
Avsluta om
ActiveCell.Offset(1, 0).Aktivera
Slinga
Avsluta Sub
Funktion space_position(what_to_look_for As String, what_to_look_in As String, space_count Som Integer) Som heltal
Dim loop_counter Som heltal
space_position = 0
För loop_counter = 1 Till space_count
space_position = InStr(loop_counter + space_position, what_to_look_in, what_to_look_for)
Om space_position = 0 Avsluta för
Nästa
Avsluta funktion
Följande tabell visar hur resultatet ser ut nu:
| Dr William Healer |
Dr William |
Botemedel |
| Zak H. Sneezer III |
Zak H. |
Nysare III |
Namnanalys är lika mycket konst som teknisk process. I det här andra exemplet finns alla för- och efternamn i rätt kolumner. Om ett nytt långt namn med fem eller fler mellanslag introducerades, kan rutinen få feltolkningen och VBA-koden skulle behöva mer villkorlig testning i den. Men det här exemplet är nu på rätt väg som en rutin för att analysera namn på industriell styrka.