• 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 VBA ile Farklı Yazılmış Cari İsimleri Eşleştirme (Bulanık Mantık / Fuzzy Logic Mutabakatı)

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.
A 2

Aydın Efeler

Yeni Üye
Katılım
28 Ara 2023
Mesajlar
4
Aldığı beğeni
0
Katkı
%0.00
Excel V
Office 2016 TR
Konu Sahibi
İyi forumlar herkese. Elimde iki farklı sistemden alınmış cari hesap listesi var ve mutabakat yapmam gerekiyor. Ancak firmaların isimleri iki tarafta da farklı yazılmış. Örneğin banka listesinde 'Ahmet Yılmaz İnş. San. Tic. Ltd. Şti.' yazarken, bizim muhasebe sisteminde 'Ahmet Yılmaz İnşaat' veya 'A.Yılmaz İnş.' yazıyor. Haliyle DÜŞEYARA veya ÇAPRAZARA ile bunları eşleştirmek imkansız.Microsoft'un harici Fuzzy Lookup eklentisi var ama şirketteki bilgisayarlara güvenlik nedeniyle kuramıyoruz. Ekte iki örnek listeyi paylaştım. Tamamen makro (VBA) kullanarak, iki listedeki metinleri karakter ve kelime benzerliğine göre (Levenshtein algoritması gibi bir mantıkla) tarayacak ve yanlarına '%85 benzer, %90 benzer' diyerek en yakın adayları eşleştirecek bir mutabakat kodu yazabilir miyiz? Elle yapmaktan gözlerimiz bozuldu valla, şimdiden sağ olun.
 
Çok sayıda örnek olan dosya eklerseniz. Bir firmanın yazımı iki listede de hep aynı mı?
 
Konu Sahibi
Alicimri hocam selamlar, ilginiz için teşekkür ederim. Hayır hocam, maalesef iki listede de yazımlar tamamen farklı ve değişken. Örneğin bir listede sadece 'Ahmet Yılmaz' yazarken, diğer listede 'A. Yılmaz İnşaat Ticaret Anonim Şirketi' gibi ucu açık şekilde uzayabiliyor.
Yani kelime sayısı ve karakterler tamamen düzensiz. Tam da bu yüzden DÜŞEYARA gibi formüller uyuşmuyor hocam. Ekteki dosyaya birkaç farklı varyasyonda örnek satırlar eklemiştim ama algoritmayı denemek için gerekirse daha fazla hayali veri de üretebilirim. Karakter veya kelime benzerlik oranını (Levenshtein mantığıyla) karşılaştıracak bir makro kodu kurabilir miyiz?
 
İşinize yararsa Word de bir özellik var, deneyin
İki adet word dosyası oluşturun.
Birine Excelde A sütynundaki verileri seçip, 1. word dosyasına yapıştırın,
Aynı şekilde B sütunundaki verileri 2. word dosyasına yapıştırın.
İki word dosyasıda açık olsun.
Word dosyaların birinde iken Gözden Geçir>Karşılaştır a tıklayın
Açılan iletişim Kutusunda
Özgün Belge de ilk Word dosyasını seçin.
Düzeltilmiş Belge 2. Word dosyasını seçin.
Tamam a tıklayın
 
  • Beğen
İfadeler: Admin
Konu Sahibi
Alicimri Hocam emeğinize sağlık ama Word'ün belge karşılaştırma özelliği bu iş için hiç uygun değil maalesef. O özellik sadece aynı metindeki revizyonları, silinen/eklenen kelimeleri buluyor.
Bizim elimizde ise iki farklı Excel listesinde yüzlerce firma unvanı var. Word'e atıp karşılaştırdığımızda Excel'deki gibi satır satır eşleştirme yapamaz veya yanlarına "%85 benziyor" gibi bir oran çıkartamaz.
Şirket kısıtlamalarından dolayı dışarıdan eklenti kuramadığımız için bize kesinlikle VBA tarafında çalışacak bir kod lazım. Levenshtein algoritmasıyla A sütunundaki her firmayı B sütunundakilerle tek tek kıyaslayıp en yüksek benzerlik skoru alan adayı yanına getirecek makro tabanlı bir kurgu kurabilir miyiz.
 
Deneyiniz.
İşe yarar mı Bilemiyorum.
Not: YZ'dan yardım alındı.
 
  • Beğen
İfadeler: Admin
Çözüm
Eğer sadece aynı satırdaki A2 ve B2 hücreleri karşılştırılacaksa Google AI yın önerdiği koda küçük bir ekleme yaptım. Örnek ekte.
 
  • Beğen
İfadeler: Admin
Konu Sahibi
Patron Hocam ve Alicimri Hocam, ikinizin de emeklerine, ellerine sağlık. İlginiz ve çözümleriniz için çok teşekkür ederim.
Alicimri Hocam, sizin yaptığınız A2-B2 gibi karşılıklı satır kısıtlaması maalesef bizim ticari listelerde işe yaramıyor. Çünkü iki farklı sistemden çekilen verilerde firmalar karşılıklı olarak aynı satırlara denk gelmiyor. A2 satırındaki firma, B sütununun belki 50. veya 100. satırında duruyor. Dolayısıyla kodun sadece karşılıklı hücre kıyası yapması mutabakatı tamamen kaçırıyor.

Patron Hocam, sizin paylaştığınız mantık tam olarak buydu işte; A'daki bir firmayı alıp B'nin tamamında çapraz döngüyle taratarak en yüksek skoru yakalamak tam isabet olmuş. Ancak sizin de kodun altına not düştüğünüz "YZ'dan (Yapay Zeka) yardım alındı" kısmı tam bir performans bariyeri oluşturmuş. Yapay zeka döngüyü hücre hücre (Cells) kurduğu için Excel her adımda sürekli sayfaya gidip okuma-yazma yapıyor. Küçük veride uçsa da, gerçek listemdeki binlerce satırda Excel tamamen kilitlendi ve saatlerce dönmeye başladı. Yapay zekanın bu hantallığı maalesef bilinen bir durum.
Hem Alicimri hocanın bahsettiği satır kaçırma problemini aşmak hem de Patron hocanın algoritmasını kurumsal boyuttaki büyük listelerde de uçurabilmek için, yapay zekanın kodunu tamamen RAM üzerinde çalışan Variant Array (Dizi) mimarisine çevirdim.
Mantığı koruyan ama işlemi saniyeler seviyesine indiren optimize edilmiş güncel kodu aşağıda paylaşıyorum. Büyük verilerle çalışan diğer arkadaşların da işine yarayacaktır.


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

(Not: Bu kodun çalışması için ilk mesajlarda paylaştığımız LevenshteinSimilarity fonksiyonunun da aynı modülde ekli olması gerekir).

Yapay zekanın hücre hamallığını da bu dizi yöntemiyle çözünce harika bir kurumsal mutabakat aracı oldu. Destek veren, fikir yürüten tüm hocalarıma tekrar çok teşekkürler.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst