Hiç bir elemenı ortak olmayan grupları bulma

Katılım
11 Nisan 2005
Mesajlar
24
Merhaba arkadaşlar.
Ben bir isim grubu içindeki elemanlardan birinin, diğer bir isim grubunda olup olmadığını tespit etmeye çalışıyorum.Bunu döngü kullanarak yapabiliyorum.Mesela:
A grubu üyeleri (Range)----------B grubu üyeleri(Range)

Adı Soyadı--------------------------Adı Soyadı
Ahmet ..........----------------------Turan .......
Fatma ..........----------------------Gülay ......
Salih .........------------------------Fatih .......
Turan .........-----------------------faruk

Þeklinde gruplar var.Ben döngü kullanmadan A grubundaki Turan..... isminin B grubunda da olduğunu tespit etmek istiyorum.Veya isimler tam olarak bilinemese de ortak isim olup olmadığını, kısaca iki grubun kesişim kümesinin boş küme olup olmadığını bilmek istiyorum. Döngü kullanmak istemeyişimin sebebi performans ve kod sadeliği arıyor olmam.
İlgilenen arkadaşlara şimdiden çok teşekkür ederim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bunun için EÐERSAY(COUNTIF) formülünü kullanabilirsiniz. Yani formül sonucu 0 (sıfır) dan büyük çıkarsa ortak demektir.

C sütununa formülü şu şekilde yazın.

=EÐERSAY(A1:A10000;B1)
 
Katılım
11 Nisan 2005
Mesajlar
24
Sayın leventm ilginize çok teşekkür ederim.Fakat ben bunu formüllerle değil VBE'de yapmak istiyorum.Ve dediğim gibi döngü ile bunu zaten yapabiliyorum.Fakat ikiden daha fazla sayıda grup ve gruplar içinde çok sayıda eleman olunca zaman birazcık uzuyor. Amacım bunu bi çırpıda(bir nebze de olsa) yapabilecek bir operatör, veya metot bulmak.Döngülerle herbir grup elemanı için arama yapmak biraz zaman alıyor.
İlginize çok teşekkür ederim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bunun için bir örnek dosya eklermisiniz.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bence Leventm'in önerdiği formul işinize yarıyorsa, o zaman aşağıdaki gibi bir döngünün performansı fena değildir.
[vb:1:59dbc96475]Sub Test()
For i = 1 To 10000
x = x + Application.WorksheetFunction.CountIf _
(Range("A1:A10000"), Range("B" & i))
Next
MsgBox x & " adet veri her iki listede de var ..."
End Sub
[/vb:1:59dbc96475]

Aşağıdaki de, döngü kullanmadan bir öneri ... (A1:B10 aralığında boş hücre olmaması gerekir)

[vb:1:59dbc96475]Sub Test2()
Range("X2000").Formula = "=counta(A1:B10)-sumproduct(1/countif(A1:B10,A1:B10))"
MsgBox Range("X2000") & " adet veri her iki listede de var ..."
Range("X2000").Clear
End Sub
[/vb:1:59dbc96475]
 
Katılım
11 Nisan 2005
Mesajlar
24
Sayın Raider.
İlginize çok teşekkür ederim.Ã?nceden bildiğim "Raider" iseniz çok çok teşekkür ederim.Bilginize,paylaşmanıza ve sabrınıza :hey:

Ben aşağıdaki gibi bir döngü kullanıyorum.
cakisma = "yok"--Başlangıçta çakışma yok kabul ediliyor.
set grupeldeki = range(grupeldeki)
For k = 1 to 5------grup adlarının bulunduğu hücre satırları.Her satırda ayrı grup var
set grup = range(sheets(1).cells(k,1).value)
for t = 1 to grupeldeki.rows.count-----"grupeldeki" grubuna ait elemanların satır numaraları
on error resume next
if not grup.find(grupeldeki.cells(t,1).value) is nothing then----"grupeldeki" grubunun t numaralı elemanı "grup" içinde var ise
cakisma = "var"
exit for----Artık arama yapmasına gerek yok. Çünkü çakışma (ortak eleman) var.
end if
next t
if cakisma = "var" then exit for
end if
next k

if cakisma = "yok" then
.........
else
.........
end if
........
.....
...


Umarım yukarıdaki kodlar yeterince anlaşılırdır.
Kodları yazmamın sebebi zaten yeterince uygun kodları kullanıyor muyum? Yoksa daha uygun (hızlı) bişeyler var mı?...
Ha pardon! Sayın Raider ikinci önerinizi tam olarak anlayamadım ( ....sumproduct(1/countif(A1:B10,A1:B10)) )

Acaba rica etsem biraz açıklayabilir misiniz?
Þimdiden çok teşekkür ederim.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ã?nceden bildiğim "Raider" iseniz çok çok teşekkür ederim.....
Sizi tanıyormuyum bilmiyorum, belki nick değiştirimişinizdir.....

Internette benden başka Raider nickini kullanan başka bir Excel meraklisina ben henüz rastlamadım.

Her neyse....

Benim yukarıdaki 1nci önerim, A1:A10000 ve B1:B10000 hücrelerindeki 2 adet listeyi karşılaştırır ve bulduğu ortak eleman sayısını verir. Eğer sonuç sıfır olarak dönerse, demek ki yoktur.... Bu işlerin yapılmasıyla ilgili bir döngüdür ve performansı iyidir.

2nci önerimde ise döngü kullanılmamıştır. Kullandığınız Excel versiyonu Türkçe mi yoksa Ingilizce mi, bilemediğim için ben kendi kullandığım Ingilizce versiyonuna göre yazdım. Eğer Türkçe versiyon kullanıyorsanız aşağıdaki linke tıklayıp, oradaki Ingilizce fonksiyonları Türkçeleri ile değiştirip de bir deneyin. Bu örnek A1:A10 ve B1:B10 aralığındaki 2 liste üzerinde çalışır.

http://www.excel.web.tr/viewtopic.php?t=129
 
Katılım
11 Nisan 2005
Mesajlar
24
Hayır beni tanımıyorsunuz. Ben sizi daha önceki forumlardan takip ediyordum. Çok zamandır da isminizi göremiyordum. Taa ki üye olduğum forum kapanıncaya ve sizin bulunduğunuz bu siteyi buluncaya kadar. Sizin isminizi görünce ayrıca teşkkür etme gereği duydum.

Ã?nerileriniz için teşekkür ederim. Bunları deneyeceğim.
 
Üst