Ar jums kada nors buvo suteiktas „Excel“ darbalapis su pavadinimais, kuriuose visi vardai yra vienoje langelyje? Jūsų užduotis yra suskirstyti vardus į vardą ir pavardę – procesas žinomas kaip analizavimas. Galite pabandyti naudoti formulę ir (arba) funkciją, kad padėtų, arba galite naudoti „Visual Basic for Applications“ (VBA) kodą.
Įprastas būdas yra rasti tarpą tarp vardo ir pavardės ir voila! – žinote, kur baigiasi vardas ir prasideda pavardė.
Nebent turite sudėtingesnės struktūros vardus, pvz., Dr. William Healer arba Zak H. Sneezer III.
Čia yra tipiška VBA rutina, kuri peržiūri kiekvieną pavadinimą po simbolio, kol randa tarpą. Tada į vieną stulpelį įdeda viską, kas yra kairėje nuo tarpo, o tai, kas yra stulpelio dešinėje.
Atlikite iki ActiveCell = "
thename = ActiveCell.Value
Ieškote = 1 Len (vardas)
Jei Vidutinis(vardas, išvaizda, 1) = " " Tada
ActiveCell.Offset(0, 1) = Kairė(pavadinimas, atrodo - 1)
ActiveCell.Offset(0, 2) = Vidutinis(pavadinimas, atrodo + 1)
Išeiti už
Pabaiga, jei
Kitas
ActiveCell.Offset(1, 0).Suaktyvinti
Kilpa
Ši tvarka yra naudinga nagrinėjant vardus tik vienu tarpu, pvz., Harvey Wallbanger arba Tomas Collinsas. Šioje lentelėje rodomas kodo paleidimo varduose, kuriuose yra daugiau nei vienas tarpas, rezultatas:
Daktaras Williamas Healeris |
Dr. |
Viljamas gydytojas |
Zakas H. Sneezeris III |
Zak |
H. Čiaudulys III |
Tai nėra geras bandymas analizuoti. Tai puikiai sekėsi analizuojant Harvey Wallbangerį ir Tomą Collinsą, bet ne taip gerai kitiems vardams.
Čia yra labiau išvystyta technika, kuri suteikia geresnių rezultatų. Turėkite omenyje, kad vardų analizė nėra tobula, tačiau taip elgiantis geriau.
Metodas yra suskaičiuoti, kiek tarpų yra pilname pavadinime, ir tada suskaidyti pavadinimą vienoje iš tarpų. Visų pirma, jei yra trys ar daugiau tarpų, kaip pertraukimo tarpą naudokite tarpą dviem coliais iš dešinės; kitu atveju naudokite dešinėje esančią tarpą kaip laužymo tarpą.
Šis procesas vykdomas naudojant VBA paprogramę, kuri iškviečia funkciją, kai renkasi pavadinimus. Tarpų skaičius nustatomas pagrindinės kilpos pradžioje, o funkcija grąžina padėtį, kurioje yra laužymo tarpas.
Sub parse_names()
Dim thename As String
Neryškios erdvės kaip sveikasis skaičius
Atlikite iki ActiveCell = "
thename = ActiveCell.Value
tarpai = 0
Testui = 1 Len (vardas)
Jei Vidutinis(vardas, testas, 1) = " " Tada
tarpai = tarpai + 1
Pabaiga, jei
Kitas
Jei tarpai >= 3 Tada
break_space_position = space_position(" ", pavadinimas, tarpai - 1)
Kitas
break_space_position = space_position(" ", pavadinimas, tarpai)
Pabaiga, jei
Jei tarpai > 0 Tada
ActiveCell.Offset(0, 1) = Kairė(pavadinimas, pertraukos_tarpo_pozicija – 1)
ActiveCell.Offset(0, 2) = Vidurio(pavadinimas, break_space_position + 1)
Kitas
Tai taikoma, kai visas vardas yra tik vienas vardas be tarpų
ActiveCell.Offset(0, 1) = pavadinimas
Pabaiga, jei
ActiveCell.Offset(1, 0).Suaktyvinti
Kilpa
Pabaigos sub
Funkcija space_position(what_to_look_for As String, what_to_look_in As String, space_count As Integer) Kaip Integer
Dim loop_counter Kaip sveikasis skaičius
erdvė_pozicija = 0
Ciklų_skaitiklis = 1 Iki tarpų_skaitiklio
erdvės_pozicija = InStr(kilpos_skaitiklis + tarpo_pozicija, į ką_žiūrėti, ko_ieškoti)
Jei tarpo_pozicija = 0, tada išeikite už
Kitas
Pabaigos funkcija
Šioje lentelėje parodyta, kaip dabar atrodo rezultatas:
Daktaras Williamas Healeris |
Daktaras Viljamas |
Gydytojas |
Zakas H. Sneezeris III |
Zakas H. |
Čiaudulys III |
Vardų analizė yra tiek menas, tiek techninis procesas. Šiame antrame pavyzdyje visi vardai ir pavardės yra teisinguose stulpeliuose. Jei būtų įvestas naujas ilgas pavadinimas su penkiais ar daugiau tarpų, rutina gali neteisingai analizuoti ir VBA kodą reikės atlikti daugiau sąlyginio testavimo. Tačiau šis pavyzdys dabar tinkamas kaip pramoninio stiprumo vardų analizavimo rutina.