Vai jums kādreiz ir dota Excel darblapa ar nosaukumiem, kurā visi vārdi ir vienā šūnā? Jūsu uzdevums ir sadalīt vārdus vārdā un uzvārdos — šis process ir pazīstams kā parsēšana. Varat mēģināt izmantot formulu un/vai funkciju, lai palīdzētu, vai arī izmantot Visual Basic for Applications (VBA) kodu.
Izplatīta pieeja ir atrast atstarpi starp vārdu un uzvārdu, un voila! – jūs zināt, kur beidzas vārds un sākas uzvārds.
Ja vien jums nav vārdu, kuru struktūra ir sarežģītāka, piemēram, Dr. Viljams Dziednieks vai Zaks H. Šķaudītājs III.
Šeit ir tipiska VBA rutīna, kas izskata katru vārdu pēc rakstzīmes, līdz atrod atstarpi. Pēc tam tas ievieto visu, kas atrodas pa kreisi no atstarpes vienā kolonnā, un to, kas atrodas pa labi no atstarpes kolonnā pēc tam.
Dariet līdz ActiveCell = "
thename = ActiveCell.Value
Meklēšanai = 1 līdz Lenam (nosaukums)
Ja Mid(nosaukums, izskats, 1) = " " Tad
ActiveCell.Offset(0, 1) = pa kreisi (nosaukums, izskats - 1)
ActiveCell.Offset(0, 2) = vidējais(nosaukums, izskats + 1)
Iziet uz
Beigas Ja
Nākamais
ActiveCell.Offset(1, 0).Aktivizēt
Cilpa
Šī rutīna ir noderīga, parsējot nosaukumus tikai ar vienu atstarpi, piemēram, Hārvijs Volbengers vai Toms Kolinss. Šajā tabulā ir parādīts koda palaišanas rezultāts nosaukumos, kuros ir vairāk nekā viena atstarpe:
Dr Viljams dziednieks |
Dr. |
Viljams dziednieks |
Zaks H. Šķaudītājs III |
Zaks |
H. Šķaudītājs III |
Šis nav labs parsēšanas mēģinājums. Tas izdevās lieliski, analizējot Hārviju Volbengeru un Tomu Kolinsa, bet ne tik labi citiem vārdiem.
Šeit ir izstrādāta tehnika, kas nodrošina labākus rezultātus. Ņemiet vērā, ka nosaukumu parsēšana nav ideāla, taču šādi rīkojoties, tiek panākts labāks darbs.
Paņēmiens ir saskaitīt, cik atstarpju ir pilnajā nosaukumā, un pēc tam sadalīt nosaukumu vienā no atstarpēm. Jo īpaši, ja ir trīs vai vairāk atstarpes, izmantojiet atstarpi divas collas no labās puses kā atstarpi; pretējā gadījumā izmantojiet galējo labo atstarpi kā pārtraukuma atstarpi.
Šis process tiek palaists VBA apakšprogrammā, kas izsauc funkciju, vienlaikus pārlūkojot nosaukumus. Atstarpju skaits tiek noteikts galvenās cilpas sākumā, un funkcija atgriež pozīciju, kurā atrodas pārtraukuma atstarpe.
Apakšparsēšanas_nosaukumi()
Dim thename As String
Blāvas atstarpes kā vesels skaitlis
Dariet līdz ActiveCell = "
thename = ActiveCell.Value
atstarpes = 0
Pārbaudei = 1 līdz Len (nosaukums)
Ja Mid(nosaukums, tests, 1) = " " Tad
atstarpes = atstarpes + 1
Beigas Ja
Nākamais
Ja atstarpes >= 3 Tad
break_space_position = space_position(" ", nosaukums, atstarpes - 1)
Citādi
break_space_position = space_position(" ", nosaukums, atstarpes)
Beigas Ja
Ja atstarpes > 0 Tad
ActiveCell.Offset(0, 1) = pa kreisi (nosaukums, pārtraukuma_atstarpes_pozīcija — 1)
ActiveCell.Offset(0, 2) = vidējais(nosaukums, pārtraukuma_atstarpes_pozīcija + 1)
Citādi
Tas ir paredzēts, ja pilnais vārds ir tikai viens vārds bez atstarpēm
ActiveCell.Offset(0, 1) = nosaukums
Beigas Ja
ActiveCell.Offset(1, 0).Aktivizēt
Cilpa
Beigu apakš
Funkcija space_position(what_to_look_for As String, what_to_look_in As String, space_count As Integer) Kā vesels skaitlis
Dim loop_counter kā vesels skaitlis
telpa_pozīcija = 0
For loop_counter = 1 Līdz atstarpes_skaitam
space_position = InStr(cilpas_skaitītājs + atstarpes_pozīcija, kas_jāskatās, ko_meklēt)
Ja atstarpes_pozīcija = 0, tad Exit For
Nākamais
Beigu funkcija
Nākamajā tabulā parādīts, kā tagad izskatās rezultāts:
Dr Viljams dziednieks |
Dr Viljams |
Dziednieks |
Zaks H. Šķaudītājs III |
Zaks H. |
Šķaudītājs III |
Vārdu parsēšana ir tikpat māksla kā tehnisks process. Šajā otrajā piemērā visi vārdi un uzvārdi ir norādīti pareizajās kolonnās. Ja tiktu ieviests jauns garais nosaukums ar piecām vai vairāk atstarpēm, rutīnas parsēšana var būt nepareiza, un VBA kodam būs jāveic papildu nosacījuma pārbaude. Taču šis piemērs tagad ir uz pareizā ceļa kā rūpnieciski vērtīga nosaukumu parsēšanas rutīna.