• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü Excel Hücre İçindeki Sayıları ve Metinleri Ayırma (Formül ve RegEx Makro Kodları)

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

yucele

Yeni Üye
Katılım
24 Nis 2024
Mesajlar
4
Aldığı beğeni
1
Katkı
%0.00
Excel V
Office 365 TR
Konu Sahibi
Herkese selamlar,
Sistemden çektiğimiz karmaşık ürün stok listesinde veriler tek bir hücreye çok düzensiz girilmiş. Örneğin bazı hücrelerde Kablo_150_Metre_X12, bazılarında ise 300Adet_Hortum_Siyah veya Vida-M8-25mm-500Pcs yazıyor. Yani metinler ve sayılar tamamen birbirine girmiş durumda. Sabit bir karakter uzunluğu olmadığı için Hızlı Doldurma veya Metni Sütunlara Dönüştür özellikleri işe yaramıyor, veriler kayıyor.
Hücrenin içindeki metin ne kadar karmaşık olursa olsun, içindeki sadece sayısal değerleri (rakamları) ayıklayıp B sütununa, harfleri (metni) ise C sütununa hatasız bölebilecek bir kullanıcı tanımlı fonksiyon (KTF) veya RegEx (Regular Expressions) makro kalıbı aramaktayım. Örnek senaryoyu içeren excel belgesi ektedir, desteklerinizi bekliyorum.
 
Çözüm
Regex deseninin açıklaması şu şekilde :
Kullanırken dikkate edilmesi gereken nokta büyükharf - küçükharf olarak yazılmasının sonucu farklı olacaktır. Örnek dosyada denersek eğer küçükharf olarak kullanılsaydı harf ve sayı değerlerinin dışındaki karakterler ( - , _ ) metinde kalacaktı.


1790845765757.png
soru net değil.
 
Konu Sahibi
Galapagos Hocam selamlar, aslında soruyu örneklerle oldukça netleştirdiğimi düşünüyordum ama gözden kaçan bir detay olmaması adına daha da detaylandırayım.
Elimizdeki ham veri tek bir hücrede hem harf, hem rakam hem de özel karakter (, -) barındıran karmaşık stok kodlarından oluşuyor. Sabit bir uzunluk veya belirli bir ayırıcı karakter karakter ( gibi) her satırda aynı hizada olmadığı için Metni Sütunlara Dönüştür seçeneği patlıyor.
Tam olarak talep ettiğim çıktı şu şekilde:
Örnek 1: Kablo_150_Metre_X12
  • B Sütununa (Sayılar): 15012 (Hücre içindeki tüm rakamların birleşik hali)
  • C Sütununa (Metinler): Kablo_Metre_X (Rakamlar ve özel karakterler temizlenmiş sadece harf hali)
Örnek 2: 300Adet_Hortum_Siyah
  • B Sütununa (Sayılar): 300
  • C Sütununa (Metinler):Adet_Hortum_Siyah

    (veya özel karakterler giderek AdetHortumSiyah)
Yani standart döngülerle tek tek karakter kontrolü yapmak yerine, VBA tarafında VBScript.RegExp (Regular Expressions) kütüphanesini kullanarak;
  • Sayılar için [0-9] veya \d pattern'i ile eşleşenleri ayıklayacak,
  • Metinler için ise sayıları ve özel karakterleri [^a-zA-ZĞÜŞİÖÇğüşıöç] regex kalıbıyla temizleyecek,
büyük veride de hızlı çalışacak bir kullanıcı tanımlı fonksiyon (KTF) veya buton makrosu aramaktayım. Örnek dosyamda da bu senaryoya uygun 10 adet farklı kırılımda gerçek veri bulunuyor hocam. Şimdi daha net açıklayabildim mi acaba? Belirttiğim RegEx mimarisini koda dökebilecek hocalarımızın desteğini bekliyorum.
 
365 işlevleriyle resimdeki formül ile dökülmeli olarak tek seferde işlemi yapabilirsiniz.
Eğer KTF istiyorsanız LAMBDA ile KTF yapmanız da mümkün.

1790779444536.png
 
PowerQuery kullanıyorsanız onunla da yapılır.

1790779895460.png
 
  • Beğen
İfadeler: Admin
Regex deseninin açıklaması şu şekilde :
Kullanırken dikkate edilmesi gereken nokta büyükharf - küçükharf olarak yazılmasının sonucu farklı olacaktır. Örnek dosyada denersek eğer küçükharf olarak kullanılsaydı harf ve sayı değerlerinin dışındaki karakterler ( - , _ ) metinde kalacaktı.


1790845765757.png
 
Çözüm
Konu Sahibi
Galapagos Hocam çok teşekkür ederim, ellerinize sağlık.
Tam olarak bahsettiğiniz gibi, verilerde sabit bir ayırıcı veya uzunluk olmadığı için formüller ya da yerleşik araçlar çaresiz kalıyordu. Önerdiğiniz VBA RegEx (Regular Expressions) kalıbı sayesinde, karmaşık stok kodları içindeki sayıları ve metinleri hiçbir kayma olmadan milisaniyeler içinde kusursuzca ayıklamayı başardım.
 
  • Beğen
İfadeler: Galapagos
Merhaba,

Bu işlem için hangi kodu kullandınız paylaşabilir misiniz?
 
Konu Sahibi
Korhan AYHAN Hocam selamlar,
Tabii ki, dosyada kullandığım ve karmaşık hücre verilerini (sabit uzunluğu veya standart ayırıcısı olmayan stok kodlarını) milisaniyeler içinde ayıran VBA RegEx (Kullanıcı Tanımlı Fonksiyon) kodunu aşağıda paylaşıyorum.


HTML:
PHP:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Hücrede sayıları ayırmak için: =SadeceSayiAl(A2)
Hücrede metinleri ayırmak için: =SadeceMetinAl(A2)
İlginiz ve forum arşivine katkı sağlama gayretiniz için çok teşekkür ederim hocam.
 
Benim anlam veremediğim Galapagos size Ofis 365 sürümü için fonksiyonla çözüm önerdi. Profilinizde Ofis 365 TR bilgsi var.

Bu durumda KTF aramanıza gerek yok ki. Yerleşik işlevle sorunuz çözülebiliyor. Bunu kullanmanız daha uygun olacaktır.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst