• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Benzersiz liste oluşturmak

Erdal

Altın Üye
Katılım
23 Ekim 2006
Mesajlar
1,057
Excel Vers. ve Dili
Ev: 2021 - Türkçe 32 Bit
İşyeri: 2016 - Türkçe 64 Bit
Merhabalar
Bir tablodaki benzersiz verileri yan sütunda listelemek için ekteki örneğin H sütunundaki formülü kullanıyorum. Formül kısa tablolar için çalışıyor ama uzun tablolar için hatalı sonuç (B sütunu) üretiyor. Ama tablodaki değişik veri sayısını arttırırsam tekrar doğru sonuç (E sütunu) üretiyor. Acaba formülde neyi hatalı yapıyorum. Veya her türlü tabloda çalışan dinamik bir formül üretebilir miyiz? Ayrıntılı açıklama örnekte mevcuttur. Saygı ve selam ile …
 

Ekli dosyalar

Merhaba,
Diziye çevirerek bu formülü deneyiniz.

C sütununda deneyiniz.
Kod:
=İNDİS($A$2:$A$120;KAÇINCI(0;EĞERSAY($C$1:C1;$A$2:$A$120);0))
 
Selamlar,

Altarnatif olarak aşagıdaki kodları kullanabilirsiniz,

Kod:
Option Explicit
 
Sub listele()
Dim S1 As Worksheet
Dim i As Long, son As Long, son1 As Long, son2 As Long, sat As Long
 
Set S1 = Sheets("Sayfa1")

Application.ScreenUpdating = False
 
son = S1.[a65536].End(3).Row

S1.Range("b2:b65536").ClearContents
S1.Range("e2:e65536").ClearContents
S1.Range("h2:h65536").ClearContents

sat = 1
For i = 2 To son

    If WorksheetFunction.CountIf(S1.Range("a2:a" & i), S1.Cells(i, "a")) = 1 Then
        sat = sat + 1
        S1.Cells(sat, "b") = S1.Cells(i, "a")
    End If
Next i

son1 = S1.[a65536].End(3).Row

sat = 1
For i = 2 To son

    If WorksheetFunction.CountIf(S1.Range("d2:d" & i), S1.Cells(i, "d")) = 1 Then
        sat = sat + 1
        S1.Cells(sat, "e") = S1.Cells(i, "d")
    End If
Next i

son2 = S1.[g65536].End(3).Row

sat = 1
For i = 2 To son

    If WorksheetFunction.CountIf(S1.Range("g2:g" & i), S1.Cells(i, "g")) = 1 Then
        sat = sat + 1
        S1.Cells(sat, "h") = S1.Cells(i, "g")
    End If
Next i

Application.ScreenUpdating = True

MsgBox "İşleminiz tamamlanmıştır", vbCritical

End Sub
 
Merhabalar
Vedat Bey kodlar için teşekkürler. Kodun işlevselliği açısından tablonun değişik adreslerde olması durumunda kodlarda değiştirilmesi gereken yerleri işaretleyebilir misiniz?
Mahir Bey
vermiş olduğunuz formül işe yarıyor fakat ekteki sayfa 2'deki durumda hata veriyor. Acaba nasıl düzeltebiliriz? Saygı ve selam ile ...
 

Ekli dosyalar

Selamlar,

Kod:
son = S1.[[B]a65536[/B]].End(3).Row

S1.Range("[B]b2:b65536[/B]").ClearContents

sat = 1
For i = 2 To son

    If WorksheetFunction.CountIf(S1.Range("[B]a2:a[/B]" & i), S1.Cells(i, "[B]a[/B]")) = 1 Then
        sat = sat + 1
        S1.Cells(sat, "[B]b[/B]") = S1.Cells(i, "[B]a[/B]")
    End If
Next i

A sütunu veri aralığı
B yeni liste

Bu şekilde anlaşılırmı ?
 
Selamlar,

Mahir beye vermiş oldugu formül için teşekkür ederim,

Aşagıdaki şekilde düzeltirmisiniz formülü,


Kod:
=İNDİS($A$2:$A$19;KAÇINCI(0;EĞERSAY($B$1:B1;$A$2:$A$19);0))
 
Vedat Bey
Kodlar için teşekkürler. Vermiş olduğunuz formül ile 4 nolu mesajımdaki örnekte sonuç alamadım. Acaba neyi yanlış yapıyorum? Saygı ve selam ile ...
 
Selamlar,


Ekdeki dosyayı inceleyin,


Dosyayı güncelledim
 

Ekli dosyalar

Son düzenleme:
Merhaba,

Formül hesaplama yaparken bir önce bulduğu veri üzerinden işlem yapmaktadır. Bu yüzden bi başlık satırı ekleyip formülü B2 den aşağıdaki gibi başlatın.

Kod:
=İNDİS($A$2:$A$19;KAÇINCI(0;EĞERSAY($B$1:B1;$A$2:$A$19);0))
.
 
Başlık satırı eklemeden bir çözüm yolu bulunabilir mi?
 
Teşekkür ederim Ömer Bey
 
merhaba,

A SÜTUNUNA KARMA VERİLERİ GİRECEĞİNİZ SÜTUN OLSUN.
B1 HÜCRESİNE;
=EĞER(EĞERSAY(A1:$A$120;A1)=1;SATIR();"")

FORMÜLÜ YAZIN 120. SATIRA KADAR MAUS İLE SAĞ ALT OK A BASILI TUTARAK FORMÜLÜ ÇOĞALTMAK İÇİN ÇEKİN AŞAĞI. SONRADA BU SÜTUNU GİZLETİN.

C1 HÜCRESİNE;

=EĞER(EHATALIYSA(İNDİS(A:B;KÜÇÜK(B:B;SATIR());1));"";İNDİS(A:B;KÜÇÜK(B:B;SATIR());1))

FORMÜLÜ YAZIN 120. SATIRA KADAR ÇOĞALTIN ( MAUS İLE AĞAŞI ÇEKİN)

EĞER KARMA VERİLERİNİZ 120 SATIRDAN FAZLA İSE DİYELİM 250 ADET OLSUN,
BU DURUMDA $A$120 YERİNE $A$250 YAZIN.

HEPSİ BU...
 
Sn. ssdestek
Çok teşekkür ederim. ALLAH (c.c.) razı olsun.
 
Merhaba,

Formül hesaplama yaparken bir önce bulduğu veri üzerinden işlem yapmaktadır. Bu yüzden bi başlık satırı ekleyip formülü B2 den aşağıdaki gibi başlatın.

Kod:
=İNDİS($A$2:$A$19;KAÇINCI(0;EĞERSAY($B$1:B1;$A$2:$A$19);0))
.



buna iki tarih arası şartı koyabilir misiniz. teşekkür ederim.
 
Merhaba,

Sorunuzu örnek dosya ekleyerek detaylı açıklar mısınız.
 
[TR][TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD][/TR]
[TR][TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD][/TR]
 
Son düzenleme:
G2 hücresine yazıp dizi formülüne çevirdikten sonra alt satırlara kopyalayınız.
Kod:
=EĞERHATA(İNDİS($B$2:$B$500;KÜÇÜK(EĞER(SIKLIK(EĞER($B$2:$B$500<>"";EĞER($A$2:$A$500>=$F$1;EĞER($A$2:$A$500<=$G$1
;KAÇINCI("~"&$B$2:$B$500;$B$2:$B$500&"";0))));SATIR($B$2:$B$500)-SATIR($B$2)+1);SATIR($B$2:$B$500)-SATIR($B$2)+1);SATIRSAY($G$2:G2)));"")
 
G2 hücresine yazıp dizi formülüne çevirdikten sonra alt satırlara kopyalayınız.
Kod:
=EĞERHATA(İNDİS($B$2:$B$500;KÜÇÜK(EĞER(SIKLIK(EĞER($B$2:$B$500<>"";EĞER($A$2:$A$500>=$F$1;EĞER($A$2:$A$500<=$G$1
;KAÇINCI("~"&$B$2:$B$500;$B$2:$B$500&"";0))));SATIR($B$2:$B$500)-SATIR($B$2)+1);SATIR($B$2:$B$500)-SATIR($B$2)+1);SATIRSAY($G$2:G2)));"")


ilginizden ve yardımınızdan dolayı teşekkür ederim. Ömer Bey
 
Geri
Üst