Video: How To Use The VBA Trim And Split Functions To Parse Names 2024
Pernahkah Anda diberi lembar kerja Excel dengan nama, di mana semua nama lengkap ada dalam satu sel? Tugas Anda adalah memecah nama menjadi nama depan, nama belakang - sebuah proses yang dikenal sebagai parsing. Anda dapat mencoba menggunakan rumus dan / atau fungsi untuk membantu, atau Anda dapat menggunakan kode Visual Basic for Applications (VBA).
Pendekatan yang umum adalah menemukan jarak antara nama depan dan nama belakang, dan voila! - Anda tahu di mana nama depan berakhir dan nama belakang dimulai.
Kecuali Anda memiliki nama yang lebih kompleks dalam struktur, seperti Dr. William Healer atau Zak H. Sneezer III.
Berikut adalah rutinitas VBA khas yang terlihat melalui setiap nama, karakter menurut karakter, sampai menemukan sebuah ruang. Kemudian tempat apa saja yang ada di sebelah kiri ruang dalam satu kolom dan apa saja yang ada di sebelah kanan ruang di kolom sesudahnya.
Apakah Sampai ActiveCell = "thename = ActiveCell Nilai untuk melihat = 1 ke Len (thename) Jika Mid (thename, looking, 1) =" "Then ActiveCell. Offset (0, 1) = Left (thename, looking - 1) ActiveSell Offset (0, 2) = Mid (thename, looking + 1) Keluar Untuk Akhir Jika ActiveCell Berikutnya Offset (1, 0) Aktifkan Loop
Rutin ini sangat membantu dalam mengurai nama hanya dengan satu spasi, seperti Harvey Wallbanger atau Tom Collins. Tabel berikut menunjukkan hasil menjalankan kode pada nama dengan lebih dari satu ruang:
Dr William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Ini bukan usaha parsing yang bagus. Itu bagus untuk mengurai Harvey Wallbanger dan Tom Collins tapi tidak begitu baik untuknya. Nama lain. |
Berikut adalah teknik yang lebih maju yang mengembalikan hasil yang lebih baik. Ingatlah bahwa nama penguraian tidak sempurna, tapi jika melakukannya dengan cara ini, lakukan pekerjaan yang lebih baik.
Proses ini dijalankan dalam subrutin VBA yang memanggil fungsi saat melompati nama. Jumlah ruang ditentukan di awal lingkaran utama, dan fungsi mengembalikan posisi di mana area pemecah berada.
Sub parse_names () Dim thename As String Dim spasi Sebagai Integer Do Until ActiveCell = "thename = ActiveCell Nilai spasi = 0 Untuk test = 1 ke Len (thename) Jika Mid (thename, test, 1) =" "Then spasi = spasi + 1 Akhir Jika Berikutnya Jika spasi> = 3 Kemudian break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) End If If spaces> 0 Then ActiveCell.Offset (0, 1) = Waktu (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Else 'ini untuk saat nama lengkap hanya satu nama tanpa spasi ActiveCell. Offset (0, 1) = thename End If ActiveCell. Offset (1, 0). Aktifkan Loop End Sub Function space_position (what_to_look_for As String, what_to_look_in As String, space_count As Integer) Sebagai Integer Dim loop_counter Sebagai Integer space_position = 0 Untuk loop_counter = 1 Untuk space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Jika space_position = 0 Kemudian Keluar Untuk Fungsi Akhir Berikutnya
Tabel berikut menunjukkan seperti apa hasilnya sekarang:
Dr. William Healer
Dr. William | Penyembuh | Zak H. Sneezer III |
Zak H. | Sneezer III | Pengambilan nama sama banyak dengan teknik sebagai proses teknis. Dalam contoh kedua, semua nama depan dan belakang ada di kolom yang benar. Jika nama panjang baru dengan lima ruang atau lebih diperkenalkan, rutinitasnya mungkin akan salah, dan kode VBA memerlukan pengujian kondisional yang lebih banyak yang dimasukkan ke dalamnya. Tapi contoh ini sekarang berada di jalur yang benar sebagai rutinitas nama-parsing kekuatan-industri. |