Adtak már olyan Excel munkalapot nevekkel, ahol a teljes nevek egy cellában vannak? Az Ön feladata, hogy a neveket keresztnévre, vezetéknévre bontsa – ez a folyamat az elemzés. Segítségül megpróbálhat egy képletet és/vagy függvényt használni, vagy használhatja a Visual Basic for Applications (VBA) kódot.
Elterjedt megközelítés az utó- és vezetéknév közötti szóköz megtalálása, és íme! – tudja, hol végződik a keresztnév és hol kezdődik a vezetéknév.
Hacsak nincsenek bonyolultabb felépítésű nevek, mint például Dr. William Healer vagy Zak H. Sneezer III.
Íme egy tipikus VBA-rutin, amely minden nevet karakterenként néz végig, amíg szóközt nem talál. Ezután azt, ami a szóköztől balra van, egy oszlopba helyezi, és azt, ami a szóköztől jobbra van az oszlopban.
Addig csináld, amíg ActiveCell = "
thename = ActiveCell.Value
Kereséshez = 1 Len(a név)
Ha Közép(a név, kinézet, 1) = " " Akkor
ActiveCell.Offset(0, 1) = Bal(a név, kinézet - 1)
ActiveCell.Offset(0, 2) = Közép(név, kinézet + 1)
Kilépés ehhez
Vége Ha
Következő
ActiveCell.Offset(1, 0).Aktiválás
Hurok
Ez a rutin a nevek egyetlen szóközzel történő elemzésénél hasznos, például Harvey Wallbanger vagy Tom Collins. A következő táblázat a kód futtatásának eredményét mutatja több szóközt tartalmazó neveken:
| Dr. William Healer |
Dr. |
William gyógyító |
| Zak H. Tüsszentő III |
Zak |
H. Tüsszentő III |
Ez nem jó elemzési kísérlet. Harvey Wallbanger és Tom Collins elemzésénél jól működött, de a többi név esetében nem.
Itt van egy fejlettebb technika, amely jobb eredményeket ad vissza. Ne feledje, hogy a nevek elemzése nem tökéletes, de ha így megy, az jobb munkát végez.
A technika az, hogy megszámoljuk, hány szóköz van a teljes névben, majd széttörjük a nevet az egyik szóközön. Különösen, ha három vagy több mező van, használja a jobbról két hüvelyknyi mezőt törési mezőként; ellenkező esetben a jobb szélső szóközt használja törési mezőként.
Ez a folyamat egy VBA szubrutinban fut, amely meghív egy függvényt, miközben a nevek között hurkol. A szóközök számát a főhurok elején határozzuk meg, és a függvény azt a pozíciót adja vissza, ahol a törési szóköz van.
Sub parse_names()
Dim thename As String
Halvány szóközök Egész számként
Addig csináld, amíg ActiveCell = "
thename = ActiveCell.Value
szóközök = 0
Teszthez = 1 Len(a név)
Ha Közép(név, teszt, 1) = " " Akkor
szóköz = szóköz + 1
Vége Ha
Következő
Ha szóközök >= 3 Akkor
break_space_position = space_position(" ", thename, spaces - 1)
Más
break_space_position = space_position(" ", thename, spaces)
Vége Ha
Ha szóközök > 0 Akkor
ActiveCell.Offset(0, 1) = Bal(a név, törés_szóköz pozíciója - 1)
ActiveCell.Offset(0, 2) = Közép(név, törés_szóköz pozíciója + 1)
Más
Ez arra szolgál, ha a teljes név csak egyetlen név szóközök nélkül
ActiveCell.Offset(0, 1) = thename
Vége Ha
ActiveCell.Offset(1, 0).Aktiválás
Hurok
Vége Sub
Függvény space_position(mit_meg kell_keresni As String, mit_megkeresni As String, space_count As Integer) As Integer
Dim loop_counter As Integer
tér_pozíció = 0
For loop_counter = 1 To space_count
space_position = InStr(hurok_számláló + space_pozíció, mit kell_keresni, mit_keresni)
Ha space_position = 0, akkor Exit For
Következő
Funkció befejezése
Az alábbi táblázat azt mutatja, hogy most hogyan néz ki az eredmény:
| Dr. William Healer |
Dr. William |
Gyógyító |
| Zak H. Tüsszentő III |
Zak H. |
Tüsszentő III |
A névelemzés éppoly művészet, mint technikai folyamat. Ebben a második példában az összes kereszt- és vezetéknév a megfelelő oszlopokban van. Ha egy új, öt vagy több szóközt tartalmazó hosszú név kerül bevezetésre, előfordulhat, hogy a rutin rosszul értelmezi az elemzést, és a VBA-kód további feltételes tesztelést igényel. De ez a példa most jó úton halad, mint egy iparilag erős névelemző rutin.