Video: Excel'de klasördeki dosyaların adını getirme, klasördeki dosyalara link verme 2024
Hiç isimlerle dolu bir Excel çalışma sayfası verildi mi, burada tam adların hepsi birer birer hücre? Göreviniz adları ilk adı soyadına bölmektir - ayrıştırma olarak bilinen bir işlem. Yardımcı olmak için bir formül veya işlev kullanmayı deneyebilirsiniz veya Visual Basic for Applications (VBA) kodunu kullanabilirsiniz.
Ortak bir yaklaşım, ilk isim ile soyad arasındaki boşluğu bulmaktır. - ilk adın nerede bitip son adı başlıyor biliyorsun.
Yapısında daha karmaşık isimler yoksa, örneğin Dr. William Healer veya Zak H. Sneezer III gibi.
İşte, boşluk bulana kadar, her ada, karakter karakterine bakan tipik bir VBA rutini. Ardından alanın solundaki her şeyi bir sütunda, sonra sütundaki boşluğun herhangi bir yerine koyar.
Do Do kadar ActiveCell = "thename = ActiveCell Değer Bakmak için = 1 To Len (thename) Orta ise (aynı görünümlü, 1) =" "Sonra ActiveCell Offset (0, 1) = Sol (aynı görünümlü - 1) ActiveCell Offset (0, 2) = Orta (aynı görünümlü + 1) Exit For End Sonraki ActiveCell Offset (1, 0) Döngüyü Etkinleştir
Bu rutin isimleri sadece bir boşlukla ayrıştırmada, Harvey Wallbanger ya da Tom Collins gibi aşağıdaki kodları içeren bir belgenin asa˘gıdaki halini gösterir: Aşağıdaki tabloda, birden fazla alanlı isimler üzerinde kodun çalıştırılmasının sonucu gösterilmektedir:
Dr. William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Bu, iyi bir ayrıştırma girişimi değil Harvey Wallbanger ve Tom Collins'in ayrıştırılması için iyi sonuç verdi, ancak çok iyi sonuç vermedi. diğer isimler. |
İşte daha iyi sonuçlar veren daha gelişmiş bir tekniktir: İsim ayrıştırmanın mükemmel olmadığını, ancak bu şekilde ilerlemenin daha iyi bir iş olduğunu unutmayın.
Bu işlem, adlar arasında döngü yaparken bir işlevi çağıran bir VBA alt yordamında çalıştırılır. Boşluk sayısı, ana döngünün başında belirlenir ve işlev, kırma alanının bulunduğu konumu döndürür.
Sub parse_names () Dim thename As String Dim boşlukları Tamsayı Do To ActiveCell = "thename = ActiveCell Value spaces = 0 Test için = 1 için Len (thename) Mid (o zaman, test, 1) =" alanlar = boşluklar + 1 Bitirse Boşluklar> = 3 Sonra Break_space_position = space_position ("", boşluk, boşluk - 1) Else break_space_position = boşluk_position ("", boşluk, boşluklar) End If Boşluklar> 0 Sonra ActiveCell.Ofset (0, 1) = Sol (aynı isim, kop_space_position - 1) ActiveCell. Offset (0, 2) = Mid (aynı isim, break_space_position + 1) Else 'Bu, tam adın boşluk bırakmadan yalnızca ActiveCell olduğunda olduğu içindir. Ofset (0, 1) = o zaman End If ActiveCell. Ofset (1, 0). Döngü bitiş Alt İşlev space_position işlevi space_position = 0 Insaat_sayısı = 0 Döngü_sayısı = 1 İçin space_count = space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Eğer space_position = 0 ise Ardından İleri Bitiş Fonksiyonu için Çıkış
Aşağıdaki tabloda, sonucun şimdi nasıl göründüğü gösterilmektedir:
Dr. William Healer
Dr. William | Şifacı | Zak H. Sneezer III |
Zak H. | Sneezer III | İsim ayrıştırma, teknik süreç kadar sanattır. Bu ikinci örnekte, ilk ve son adların tümü doğru sütundur. Beş veya daha fazla boşluk içeren yeni bir uzun ad girildiyse, yordam ayrıştırmayı yanlış alabilir ve VBA kodunun içine koyulacak daha koşullu sınama gerekir. Fakat bu örnek artık endüstriyel kuvvetli ad çözümleme rutini olarak doğru yolda. |