a dizisi ile b dizisini karşılaştırma ve olmayanı bos değişkenine atama

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
sub dizidenolmayan()

diziHepsi = array(1,2,3,4,5)
diziKars = array(5,3,1,2)

karsılaştırma: 

bos = [COLOR=Red]4[/COLOR] ama nasıl bulacağım

end sub
diziHepsi sabit olup, diziKars BenzersizRastgeleSayılar Fonksiyonu ile elde edilen bir dizidir.

iki diziyi kjarşılaştırıp olmayan elemanı bos değikenine atamak nasıl olmalıdır?
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Olmayan eleman birden fazla olabilir (mi ?) ... Bu ihtimale karşı aşağıdaki gibi bir çözüm geliştirildi.

Kod:
Sub DizidenOlmayan()
    
    Dim bBoo As Boolean
    Dim aBos()
    Dim aHepsi
    Dim aKars
    Dim i%, j%, x%
    
    aHepsi = Array(1, 2, 3, 4, 5)
    aKars = Array(5, 3, 1, 2)
    If IsArray(aKars) And IsArray(aHepsi) Then
        If UBound(aKars) > 0 And UBound(aHepsi) > 0 Then
            For i = 0 To UBound(aHepsi)
                
                For j = 0 To UBound(aKars)
                    If aHepsi(i) = aKars(j) Then
                        bBoo = True
                        Exit For
                    End If
                Next j
                
                If Not bBoo Then
                    x = x + 1
                    ReDim Preserve aBos(1 To x)
                    aBos(x) = aHepsi(i)
                End If
                
                bBoo = False
            Next i
        End If
    End If
            
    If x > 0 Then
        MsgBox x & " adet sayı farklı ... Debug Mode'da oluşturulan diziyi inceleyin"
    Else
        MsgBox "Boş yok"
    End If
    
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam şimdiki durumda olmaz ama bu daha iyi olmuştur.
deneyip fonksiyon yapayım bunu.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam ben bu hale getirdim.
Kod:
Sub Testdizi()
    aHepsi = Array(1, 2, 3, 4, 5)
    aKars = Array(5, 3, 1, 4, 2)
    AA = fncDizideOlmayan(aHepsi, aKars)
    If Not IsEmpty(yok) Then yok = AA(1)
    'yok = AA(1)
    MsgBox yok
    Stop
End Sub


Function fncDizideOlmayan(aHepsi, aKars)
'Ferhat Pazarçevirdi'nin kodlarından uyarlamadır.
    Dim bBoo As Boolean
    Dim aBos()
    Dim i%, j%, x%
    fncDizideOlmayan = Empty

'    If UBound(aKars) = UBound(aHepsi) Then Exit Function
    If IsArray(aKars) And IsArray(aHepsi) Then
        If UBound(aKars) > 0 And UBound(aHepsi) > 0 Then
            For i = 0 To UBound(aHepsi)
                
                For j = 0 To UBound(aKars)
                    If aHepsi(i) = aKars(j) Then
                        bBoo = True
                        Exit For
                    End If
                Next j
                
                If Not bBoo Then
                    x = x + 1
                    ReDim Preserve aBos(1 To x)
                    aBos(x) = aHepsi(i)
                End If
                
                bBoo = False
            Next i
        End If
    End If
Stop
fncDizideOlmayan = aBos
    
End Function
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Küçük bir öneri :

Kodlarınızda; Stop komutunu kullanmamaya özen gösterin. Bunun yerine; aynı amaca hizmet edecek şekilde, Break-Point'ler kullanabilirsiniz.

Kodlarında Stop kullandığınız bir çalışma kitabını her ne zaman açarsanız, durma noktaları bellidir. Bu son kullanıcıya kadar sirayet edebilir.

Oysaki, Break-Point'ler tasarımcının kullanımındadır ve Dosya yeniden açıldığında temizlenmiş olurlar.

Herhangi bir satıra Break-Point koymak için, ya o satırın üzerinde iken F9 tuşuna basın veya satır başına Mouse ile tıklayın. Kahverengiye boyanacaktır.

Kaldırmak için ise, yine aynı işlemleri yapın.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Küçük bir öneri :

Kodlarınızda; Stop komutunu kullanmamaya özen gösterin. Bunun yerine; aynı amaca hizmet edecek şekilde, Break-Point'ler kullanabilirsiniz.

Kodlarında Stop kullandığınız bir çalışma kitabını her ne zaman açarsanız, durma noktaları bellidir. Bu son kullanıcıya kadar sirayet edebilir.

Oysaki, Break-Point'ler tasarımcının kullanımındadır ve Dosya yeniden açıldığında temizlenmiş olurlar.

Herhangi bir satıra Break-Point koymak için, ya o satırın üzerinde iken F9 tuşuna basın veya satır başına Mouse ile tıklayın. Kahverengiye boyanacaktır.

Kaldırmak için ise, yine aynı işlemleri yapın.
biliyorum hocam ama buna elim son günlerde fazla alıştı. Alakanıza teşekkür ederim.
 
Üst