Video: Combine First and Last Names - Excel 2024
Har du nogensinde fået et Excel-regneark med navne, hvor de fulde navne er i ét celle? Din opgave er at bryde navne i fornavn, efternavn - en proces kendt som parsing. Du kan prøve at bruge en formel og / eller funktion til at hjælpe, eller du kan bruge Visual Basic for Applications (VBA) -koden.
En fælles tilgang er at finde mellemrummet mellem fornavn og efternavn og voila! - Du ved, hvor fornavnet slutter, og efternavnet starter.
Medmindre du har navne, der er mere komplekse i strukturen, såsom Dr. William Healer eller Zak H. Sneezer III.
Her er en typisk VBA-rutine, der ser gennem hvert navn, karakter for tegn, indtil det finder et mellemrum. Så placeres det, hvad der er til venstre for rummet i en kolonne, og hvad som helst til højre for rummet i kolonnen efter.
Gør Indtil ActiveCell = "thename = ActiveCell. Værdi For at se = 1 Til Len (thename) Hvis Mid (thename, looking, 1) =" "Så ActiveCell. Offset (0, 1) = Venstre 1) ActiveCell Offset (0, 2) = Mid (thename, looking + 1) Afslut til ende Hvis næste ActiveCell. Offset (1, 0). Aktiver loop
Denne rutine hjælper med at analysere navne med kun ét rum, som Harvey Wallbanger eller Tom Collins. Følgende tabel viser resultatet af at køre koden på navne med mere end et mellemrum:
Dr. William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Det er ikke et godt parsers forsøg. Det fungerede fint for at analysere Harvey Wallbanger og Tom Collins, men ikke så godt for de andre navne. |
Her er en mere udviklet teknik, der giver bedre resultater. Husk at parsing navne ikke er perfekt, men det gør et bedre arbejde på denne måde.
Denne proces køres i en VBA-subrutine, der kalder en funktion, mens du løber gennem navnene. Antallet af mellemrum bestemmes tidligt i hovedløkken, og funktionen returnerer den position, hvor brudrummet er.
Sub parse_names () Dim thename Som String Dim Space Som Integer Gør Indtil ActiveCell = "thename = ActiveCell. Værdi mellemrum = 0 For test = 1 Til Len (thename) Hvis Mid (thename, test, 1) =" "Så spaces = spaces + 1 End Hvis Next Hvis mellemrum> = 3 Then break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) Afslut Hvis Hvis mellemrum> 0 Then ActiveCell.Offset (0, 1) = Venstre (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Ellers 'dette er til når det fulde navn er et enkelt navn uden mellemrum ActiveCell. Offset (0, 1) = thename Afslut, hvis ActiveCell. Forskydning (1, 0). Aktiver Loop End Sub Funktion space_position (what_to_look_for As String, what_to_look_in As String, what_to_look_in As String, space_count As Integer) Som Integer Dim loop_counter Som integer space_position = 0 For loop_counter = 1 Til space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Hvis space_position = 0 Afslut derefter til næste endefunktion
Følgende tabel viser, hvordan resultatet ser ud nu:
Dr. William Healer
Dr. William | Healer | Zak H. Sneezer III |
Zak H. | Sneezer III | Navn parsing er lige så meget kunst som teknisk proces. I dette andet eksempel er alle for- og efternavne i de rigtige kolonner. Hvis et nyt langt navn med fem eller flere mellemrum blev introduceret, kan rutinen få parseringen forkert, og VBA-koden ville kræve mere betinget test, der blev sat i den. Men dette eksempel er nu på rette spor som en industriel styrke navne-parsing rutine. |