Video: Pass Parameter (Drill Down) to Pick Name Format with Power Query 2024
Har du någonsin fått ett Excel-kalkylblad med namn, där de fullständiga namnen är alla i ett cell? Din uppgift är att bryta namnen till förnamn, efternamn - en process som kallas parsing. Du kan försöka använda en formel och / eller funktion för att hjälpa till, eller du kan använda VBA-kod (Visual Basic for Applications).
Ett gemensamt förhållningssätt är att hitta mellanslag mellan förnamn och efternamn och voila! - Du vet var förnamnet slutar och efternamnet börjar.
Om du inte har namnen som är mer komplexa i struktur, till exempel Dr William Healer eller Zak H. Sneezer III.
Här är en typisk VBA-rutin som ser igenom varje namn, tecken för karaktär, tills det hittar ett mellanslag. Sedan placeras det som är till vänster om mellanslag i en kolumn och vad som helst till höger om utrymmet i kolumnen efter.
Gör Till Till ActiveCell = "thename = ActiveCell. Värde För att se = 1 Till Len (thename) Om Mid (thename, looking, 1) =" "Då ActiveCell. Offset (0, 1) = Vänster 1) ActiveCell. Offset (0, 2) = Mid (sedan namn, tittar + 1) Avsluta för slut Om nästa ActiveCell. Offset (1, 0). Aktivera loop
Denna rutin är till hjälp vid analysering av namn med bara ett utrymme, som Harvey Wallbanger eller Tom Collins. Följande tabell visar resultatet av att köra koden på namn med mer än ett utrymme:
Dr William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Det här är inte ett bra parsingfö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 parsing namn inte är perfekt, men det gör ett bättre jobb på det här sättet.
Denna process körs i en VBA-subrutin som kallar en funktion medan du går igenom namnen. Antalet mellanslag bestäms tidigt i huvudslingan och funktionen returnerar positionen där brytutrymmet är.
Sub parse_names () Mått thename Som String Dim spaces Som Integer Gör till ActiveCell = "thename = ActiveCell. Värdenummar = 0 För test = 1 Till Len (thename) Om Mid (thename, test, 1) =" "Sedan Mellanslag = Mellanslag + 1 Slut Om Nästa Om mellanslag> = 3 Då break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) Avsluta Om Om mellanslag> 0 Då ActiveCell.Offset (0, 1) = Vänster (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Annars är detta för när det fullständiga namnet bara är ett enda namn utan mellanslag ActiveCell. Offset (0, 1) = sedan sluta om ActiveCell. Offset (1, 0). Aktivera Loop End Sub-funktion space_position (what_to_look_for As String, what_to_look_in As String, space_count As Integer) Som integer Dim loop_counter Som integer 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 sedan för nästa ändfunktion
Följande tabell visar hur resultatet ser ut nu:
Dr. William Healer
Dr. William | Healer | Zak H. Sneezer III |
Zak H. | Sneezer III | Namnparsning är lika mycket konst som en teknisk process. I det andra exemplet finns alla för- och efternamn i rätt kolumner. Om ett nytt långt namn med fem eller flera mellanslag infördes kan rutinen få analysen fel, och VBA-koden skulle behöva mer villkorlig testning i den. Men det här exemplet är nu på rätt spår som en industriell styrka namnparsing rutin. |