2 boyutlu dizide filtreleme

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,040
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba

Aşağıdaki kodda;

If UBound(Filter(Array_1, eleArr_1)) = 0 Then

satırında hata vermekte, bunu nasıl düzenleyebilirim?
ilginiz için şimdiden teşekkürler,

Kod:
Sub Remove_All_Duplicated()
Dim Rng As Range
Dim Array_1
Dim Array_2()
Dim eleArr_1, x
x = 0

LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, "N").End(xlUp).Row
Set Rng = ActiveSheet.Range("N2:N" & LR)

Array_1 = Rng.Value

For Each eleArr_1 In Array_1
    If UBound(Filter(Array_1, eleArr_1)) = 0 Then
        ReDim Preserve Array_2(x)
        Array_2(x) = eleArr_1
        x = x + 1
    End If
Next

End Sub
 
Katılım
24 Nisan 2005
Mesajlar
3,669
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Merhaba

Aşağıdaki kodda;

If UBound(Filter(Array_1, eleArr_1)) = 0 Then

satırında hata vermekte, bunu nasıl düzenleyebilirim?
ilginiz için şimdiden teşekkürler,

Kod:
Sub Remove_All_Duplicated()
Dim Rng As Range
Dim Array_1
Dim Array_2()
Dim eleArr_1, x
x = 0

LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, "N").End(xlUp).Row
Set Rng = ActiveSheet.Range("N2:N" & LR)

Array_1 = Rng.Value

For Each eleArr_1 In Array_1
    If UBound(Filter(Array_1, eleArr_1)) = 0 Then
        ReDim Preserve Array_2(x)
        Array_2(x) = eleArr_1
        x = x + 1
    End If
Next

End Sub
Bu şekilde dener misiniz?

Array_1 = Application.Transpose(Rng.Value)
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,040
Excel Vers. ve Dili
Office 2013 İngilizce
Bu şekilde dener misiniz?

Array_1 = Application.Transpose(Rng.Value)
Asri Hocam öncelikle teşekkürler,

bu şekilde denedim, hata vermiyor, yalnız döngünü sonunda Array_2() dizisi boş geliyor.
burada amacım benzersiz değerleri Array_2() içine almak.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,040
Excel Vers. ve Dili
Office 2013 İngilizce

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,669
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Benim gönderdiğim resimde altraki watches bölümünde Array_2 içeriğine baktınız mı?
Orada boş olmadığını görebilirsiniz.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
241027
Kod:
Sub test()
    Dim Array_1, Array_2, elem
    Array_1 = Range("N2:N" & Cells(Rows.Count, "N").End(3).Row).Value
    With CreateObject("Scripting.Dictionary")
        For Each elem In Array_1
            .Item(elem) = .Item(elem) + 1
        Next elem

        For Each elem In .keys
            If .Item(elem) > 1 Then
                .Remove elem
            End If
        Next elem
        Array_2 = .keys
    End With
End Sub

Sub tekrarEtmeyenleriBul()
    Dim lr&, sn
    lr = Cells(Rows.Count, "N").End(3).Row
    sn = Filter(Evaluate("transpose(if(COUNTIF(N2:N" & lr & ",N2:N" & lr & ")=1,""_""&N2:N" & lr & ", """" ) )"), "_")
    sn = Split(Replace(Join(sn, ","), "_", ""), ",")
    MsgBox "Tekrarsızlar:" & Chr(10) & Join(sn, vbLf), vbExclamation, ""
End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Kodla tam olarak ne elde etmek istediğinizi söyleyebilir misiniz? Yazdığınız kod çalışıyor. Amacı dizide sadece 1 kez geçenleri bulmak. Tekrarsız liste çıkarmak değil. N sutunun altına xxxxx ekleyin deneyin.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,040
Excel Vers. ve Dili
Office 2013 İngilizce
Kodla tam olarak ne elde etmek istediğinizi söyleyebilir misiniz? Yazdığınız kod çalışıyor. Amacı dizide sadece 1 kez geçenleri bulmak. Tekrarsız liste çıkarmak değil. N sutunun altına xxxxx ekleyin deneyin.
Veysel Hocam daha önce bahsetmiştim ama; N sutunda tekrar edilenleri kaldırmak, yani tekrar edenleri kaldırıp tekrarsız bir liste elde etmek,

excel' in yerleşik işlevi olan "Yenilenleri Kaldır" işleminin kod ile yapılması
teşekkürler,
iyi çalışmalar.
 

Ekli dosyalar

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Sub test()
    Dim Array_2, elem
    With CreateObject("Scripting.Dictionary")
        For Each elem In Range("N2:N" & Cells(Rows.Count, "N").End(3).Row).Value
            .Item(elem) = Null
        Next elem
        Array_2 = .Keys
    End With
End Sub
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,040
Excel Vers. ve Dili
Office 2013 İngilizce
Kod:
Sub test()
    Dim Array_2, elem
    With CreateObject("Scripting.Dictionary")
        For Each elem In Range("N2:N" & Cells(Rows.Count, "N").End(3).Row).Value
            .Item(elem) = Null
        Next elem
        Array_2 = .Keys
    End With
End Sub
Teşekkürler Veysel Hocam,
Ben de bu arada aşağıdaki i gibi çözüm üretmiştim.

Kod:
Sub Remove_All_Duplicated()
Dim Rng As Range
Dim Array_1
Dim Array_2()
Dim eleArr_1
Dim a, x

x = 0

lr = ActiveSheet.Cells(ActiveSheet.Rows.Count, "N").End(xlUp).Row
Set Rng = ActiveSheet.Range("N2:N" & lr)

Array_1 = Application.Transpose(Rng.Value)

 ReDim Array_2(0)
 Array_2(0) = ActiveSheet.Range("N2")
 
 x = 1
 
For Each eleArr_1 In Array_1
a = UBound(Filter(Array_2, eleArr_1))
    If a = -1 Then
        ReDim Preserve Array_2(x)
        Array_2(x) = eleArr_1
        x = x + 1
    End If

Next

End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Transpose, filter, preserve bunlar ağır çalışan fonksiyonlardır. Hız bakımından Dictionary ile boy ölçüşemez.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Dizilerle uğraşmadan ADO ile sorguda Distinct ifadesi ile kolayca yapılabilir.
 
Üst