Video: Creating a Word Template for use with Invantive Composition 2024
Heeft u ooit een Excel-werkblad met namen gekregen, waarin de volledige namen allemaal in één staan cel? Uw taak is om de namen te splitsen in voornaam, achternaam - een proces dat bekend staat als parsing. U kunt proberen een formule en / of functie te gebruiken, of u kunt Visual Basic for Applications (VBA) -code gebruiken.
Een veel voorkomende aanpak is om de spatie te vinden tussen de voor- en achternaam en voila! - je weet waar de voornaam eindigt en de achternaam begint.
Tenzij u namen hebt die complexer van structuur zijn, zoals Dr. William Healer of Zak H. Sneezer III.
Hier is een typische VBA-routine die elke naam, karakter voor teken, doorzoekt totdat een spatie wordt gevonden. Daarna plaatst het alles wat links van de ruimte staat in één kolom en wat er rechts van de ruimte in de kolom erna staat.
Doen tot ActiveCell = "thename = ActiveCell. Waarde For look = 1 To Len (thename) If Mid (thename, looking, 1) =" "Then ActiveCell. Offset (0, 1) = Left (thename, looking - 1) ActiveCell. Offset (0, 2) = Mid (thename, looking + 1) Exit For End If Next ActiveCell. Offset (1, 0) Loop activeren
Deze routine is handig bij het parseren van namen met slechts één spatie, zoals Harvey Wallbanger of Tom Collins.De volgende tabel toont het resultaat van het uitvoeren van de code op namen met meer dan één spatie:
Dr. William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Dit is geen goede poging om te parseren.Het werkte prima voor het ontleden van Harvey Wallbanger en Tom Collins, maar niet zo goed voor de andere namen. |
Hier is een meer ontwikkelde techniek die betere resultaten oplevert. Houd in gedachten dat het ontleden van namen niet perfect is, maar als je er op deze manier mee werkt, doet het beter werk.
Dit proces wordt uitgevoerd in een VBA-subroutine die een functie oproept terwijl de namen doorlopen worden. Het aantal spaties wordt vroeg in de hoofdlus bepaald en de functie geeft de positie terug waar de breekruimte is.
Sub parse_names () Dim thename As String Dim spaces Als integer Do Tot ActiveCell = "thename = ActiveCell. Value spaces = 0 For test = 1 To Len (thename) If Mid (thename, test, 1) =" "Then spaces = spaces + 1 End If Next If spaces> = 3 Then break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) End If Als spaties> 0 Vervolgens ActiveCell.Offset (0, 1) = Links (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Anders 'dit is voor wanneer de volledige naam slechts één naam is zonder spaties ActiveCell. Offset (0, 1) = thename End If ActiveCell. Offset (1, 0). Activeer Loop End Sub Function space_position (what_to_look_for As String, what_to_look_in As String, space_count As Integer) As Geheel getal Dim loop_counter As Geheel getal space_position = 0 Voor loop_counter = 1 Naar space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Als space_position = 0 Vervolgens Afsluiten voor volgende eindfunctie
De volgende tabel laat zien hoe het resultaat er nu uitziet:
Dr. William Healer
Dr. William | Genezer | Zak H. Sneezer III |
Zak H. | Sneezer III | Naam-parsing is evenveel kunst als technisch proces. In dit tweede voorbeeld bevinden alle voor- en achternamen zich in de juiste kolommen. Als een nieuwe lange naam met vijf of meer spaties werd geïntroduceerd, zou de routine de ontleding verkeerd kunnen krijgen en zou de VBA-code meer voorwaardelijke testen nodig hebben. Maar dit voorbeeld is nu op de goede weg als een naam-parseer-routine met een industriële kracht. |