süzme ile rapor almak

Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Merhaba sevgili arkadaşlar
uzun süre vb den uzak kaldığım için bazı konuları hatırlamakta zorluk çekiyorum.
sorunum ile ilgili ekte bir dosyam var.Bu dosyada bir kaç kritere göre rapor aldırmak için kod yazmaya çalıştım ama başarılı olamadım.ilgilenirseniz müteşekkir olacağım.saygılarımla
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar

Sorunuzdan pek birşey anlamadım açıkçası ... Verdiğiniz örneğe göre, 21.Satırda olan, Lot No:1, Teklifler :105 ve Bayrak No :4 olan veri en büyük teklif midir?

Lot numaraları birden fazla mıdır? Eğer öyleyse, verilerinizi tam olarak temsil edecek geniş bir örnek koyun ve olmasını istediğiniz sonuçları el ile hesaplayıp, belirttiğiniz alana yazın.

Daha sonra VBA veya fonksiyonlarla çözüm yoluna gidelim.
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
teşekkür ederim ilginize..dosyayı daha açıklamalı gönderiyorum..
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdakileri, standart bir modül sayfasına kopyalayıp çalışırınız veya örnek dosyayı inceleyiniz.

Kod:
Sub BuyukleriSec()
Dim sh As Worksheet
Dim Teklifler() As Variant
Dim Secilen() As Variant
Dim EnBuyukIndis&, Enbuyuk&, son&, i&, j&, m&, x&
Dim hcr As Range
Set sh = Sheets("Sayfa1")
son = sh.Cells(65536, 1).End(xlUp).Row
ReDim Teklifler(1 To son - 1, 1 To 3)
For i = 2 To sh.Cells(65536, 1).End(xlUp).Row
    For j = 1 To 3
        Teklifler(i - 1, j) = sh.Cells(i, j)
    Next j
Next i
sh.Range("G16:I18").ClearContents
ReDim Secilen(1 To 3, 1 To 3)
For m = 1 To 3
    Enbuyuk = sh.Cells(2, 2)
    For i = 1 To UBound(Teklifler)
        If Teklifler(i, 2) > Enbuyuk Then
           Enbuyuk = Teklifler(i, 2)
           EnBuyukIndis = i
        End If
    Next i
    For j = 16 To 18
        If sh.Cells(j, "I") = Teklifler(EnBuyukIndis, 3) Then
           x = x + 1
        End If
    Next j
    If x = 0 Then
       For Each hcr In Range("G16:G18").Cells
           If IsEmpty(hcr) = True Then
              sh.Cells(hcr.Row, "G") = Teklifler(EnBuyukIndis, 1)
              sh.Cells(hcr.Row, "H") = Teklifler(EnBuyukIndis, 2)
              sh.Cells(hcr.Row, "I") = Teklifler(EnBuyukIndis, 3)
              Teklifler(EnBuyukIndis, 2) = 0
              Exit For
           End If
       Next
    Else
       Teklifler(EnBuyukIndis, 2) = 0
       m = m - 1
    End If
    x = 0
Next m
Set sh = Nothing
End Sub
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Sayın FPC olağanüstü yardımınız için çok teşekkür ederim.sorunun çözülmesinden öte, bana çok önemli bir ders verdiniz..
saygılarımla
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Estağfurullah, probleminizin çözülmesine sevindim.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Sayın hocam kodların açıklmasını istesem çok şey istemiş olurmuyum ....
Redim nedemektir... sonucu başka bir sayfaya almak istersek ne yapmalıyız vs...
lot/tutar/bayrak sütunlarının yanı sıra başka sütun olursa ne olmalı
vs
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Sevgili FPC küçük bir şey daha soracaktım, lotlar A kolonondan başlıyor örnekte, ama B kolonundan başlarsa yani A,B,C kolonları yerine, B,C,D kolonlarında olursa tablo kod nasıl olmalı.Defalarca uygulama yaptım ama hep Out of range verdi, ekte görebilirsiniz.
saygılarımla..
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Sevgili FPC küçük bir şey daha soracaktım, lotlar A kolonondan başlıyor örnekte, ama B kolonundan başlarsa yani A,B,C kolonları yerine, B,C,D kolonlarında olursa tablo kod nasıl olmalı.Defalarca uygulama yaptım ama hep Out of range verdi, ekte görebilirsiniz.
saygılarımla..
Bahsettiğiniz durum için aşağıdaki yeni kodları kullanabilirsiniz.

Aldığınız hata mesajının nedenine gelince ... Eski kodlarda Veritabanının boyutunu hesaplarken A sütunu kullanılıyordu. Yani A sütununun en son dolu hücresi bulunuyordu. Oysa ki siz A'daki tüm bilgileri silerek B'ye yerleştirirseniz, Teklifler() adlı dizi değişkeni boyutlandırılamaz ve doldurulamaz.. Sonuç olarak böyle bir hataya sebep olur.

Aşağıdaki kodları incelerseniz farkı görebilirsiniz. Değişiklikler kırmızı ile gösterilmiştir.

Kod:
Option Explicit
Sub BuyukleriSec()
Dim sh As Worksheet
Dim Teklifler() As Variant
Dim Secilen() As Variant
Dim EnBuyukIndis&, Enbuyuk&, son&, i&, j&, m&, x&
Dim hcr As Range
Set sh = Sheets("Sayfa1")
[COLOR=red]son = sh.Cells(65536, 2).End(xlUp).Row[/COLOR]
ReDim Teklifler(1 To son - 1, 1 To 3)
[COLOR=red]For i = 2 To sh.Cells(65536, 2).End(xlUp).Row[/COLOR]
    For j = 1 To 3
[COLOR=red]        Teklifler(i - 1, j) = sh.Cells(i, j + 1)[/COLOR]
    Next j
Next i
sh.Range("G16:I18").ClearContents
ReDim Secilen(1 To 3, 1 To 3)
For m = 1 To 3
    Enbuyuk = sh.Cells(2, 2)
    For i = 1 To UBound(Teklifler)
        If Teklifler(i, 2) > Enbuyuk Then
           Enbuyuk = Teklifler(i, 2)
           EnBuyukIndis = i
        End If
    Next i
    For j = 16 To 18
        If sh.Cells(j, "I") = Teklifler(EnBuyukIndis, 3) Then
           x = x + 1
        End If
    Next j
    If x = 0 Then
       For Each hcr In Range("G16:G18").Cells
           If IsEmpty(hcr) = True Then
              sh.Cells(hcr.Row, "G") = Teklifler(EnBuyukIndis, 1)
              sh.Cells(hcr.Row, "H") = Teklifler(EnBuyukIndis, 2)
              sh.Cells(hcr.Row, "I") = Teklifler(EnBuyukIndis, 3)
              Teklifler(EnBuyukIndis, 2) = 0
              Exit For
           End If
       Next
    Else
       Teklifler(EnBuyukIndis, 2) = 0
       m = m - 1
    End If
    x = 0
Next m
Set sh = Nothing
End Sub
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Sayın hocam kodların açıklmasını istesem çok şey istemiş olurmuyum ....
Redim nedemektir... sonucu başka bir sayfaya almak istersek ne yapmalıyız vs...
lot/tutar/bayrak sütunlarının yanı sıra başka sütun olursa ne olmalı
vs
Merhabalar,

Ana mantık birinci listenin değerlendirilmesi ve İkinci Liste ile karşılaştırılıp, koşul sağlanmışsa ikinci listeye değer atanması ...

Hayali bir Excel Tablosu oluşturmak için, Dim Teklifler() adında bir değişken tanımladık. Teklifler yazan yerin yanındaki parantezler bunun bir dizi değişkeni olduğunu gösteriyor. Dizi değişkenleri, birden fazla sonucu veya veriyi; içlerinde depolama kapasitesine sahiptir.

Redim ifadesi ise, diziyi boyutlandırmak için tekrar tanımlamak demektir.

Şöyle bir örnek vermek gerekirse, bir manava gidip Elma istediğinizi söylediğinizde bunun VBA'daki karşılığı Dim Teklifler() demektir. Manav size, "Ne kadar vereyim abi ?" diye sorduğunda "3 kilo olsun, çoluk çocuk yeriz" diye cevap verdiğinizde, VBA'da diziyi boyutlandırmış olursunuz. Bunun karşılığı da; Redim Teklifler(1 to ....) şeklinde verilen satırdır.

Tabi Manav'da verdiğim örnek, tek boyutlu bir dizi için geçerlidir.

Eğer birkaç çeşit meyve almak isterseniz, dizi çok boyutlu hale gelir ve örnekteki gibi bir Redim ifadesi gerektirir.

Bu kodlarda; En Büyük değeri seçip, yerine yazdıktan sonra, ana listeden bunu yokedip, listede tekrar en büyüğü aramak zorundaydım. Takdir edersiniz ki, Bravo64 özenle hazırladığı listeden birşey silmeme izin vermeyecekti :) Onun için, Sheet üzerinde olan tabloyu alıp, hayali bir kopya tablo yaratmalıydım. Bu tablo, sheet'ten bağımsız olacağı için istediğim gibi silip, verilerini değiştirebilecektim. İlk For-Next döngüsü bu hayali tabloya veri depolamak için kullanılmaktadır.

Daha sonra en az 3 defa döngüye girerek, seçtiğim verileri, G16:H18 aralığına tek tek yazdırmalıydım. For m ile başlayan döngü de, bu döngü ...

Geri kalanında ise, hayali tabloyu tek tek tarayıp, en büyük değeri ve bunun hangi sırada olduğunu bulma işlemleri yapılıyor. Tabloda en büyük buluduğunda, bunun G16:H18 aralığında olan bir veri ile aynı olup olmadığına bakılıyor falan filan ...

Açıklamak; düşünmekten daha zormuş yahu ... :)

Özel olarak ilgilendiğiniz bir satır veya blok varsa onu cevaplayayım. Çünkü, açıklama için baya yazmak gerekiyor.

Kolay gelsin.
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Ne söyleyebilirim ki, mükemmelsiniz.
Bundan daha iyisi olamaz herhalde..
Çok teşekkür ederim..Faydalanan ve faydalanacak tüm katılımcılar adına..
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
açıklamalarınız ve ilginiz için teşekkür ederim kısmen anladım....
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
merhaba arkadaşlar
daha önce yaptığımız (sayın FPC nin desteğiyle)kodlarda sorun yoktu ama,sütunlara girilen veri sayısı 3 ten az olduğunda hata oluşuyor.ekte daha iyi anlaşılacaktır sanırım..
ilginize teşekkür ederim.
 
Son düzenleme:
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Günaydın arkadaşlar,bu başlık altındaki problemle ilgili yorumu olan var mı?
Teşekkürler
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Sevgili arkadaşlar problemle ilgili görüş varmı acaba?
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
yeniden merhaba
dosyamla ilgili yardım edebilecek yokmu acaba?
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
süzme ile rapor alma

İyi akşamlar arkadaşlar
test adlı dosyada görüleceği üzere, 2 adet modül eğer veri sayısı 3 ten küçük ve sıralı olursa çalışmıyor.defalarca denedim ama olmadı.
Çözümde yol gösterecek hocalarımıza teşekkür ederim..
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Tekrar merhaba,

Sizinle daha önce yazdığımız kodlar, belirli sayfa referanslarına dayanmaktaydı. Yani standart bir sayfa, standart bir liste aralığı ve standart bir rapor aralığı ....

Siz bu belirlediğimiz sayfa ayarlarını değiştirirseniz, kodların çuvallaması normaldir. Diziler okunamadığı için yaratılamaz, çalışma kipi hataları oluşur ...

En son gönderdiğiniz dosyaya; daha önce verdiğimiz kodların birebir oturması zaten mümkün değil.

Dosyanızın en son şekli bu mu? Eğer buysa, listenize daha fazla örnek yerleştiriniz?

NOT : Toplamda 2'den daha az sayıda teklif verilmişse; "en büyük 3 teklif" diye bir sorununuzun doğal olarak olmaması gerekir ama bir satır kod ilavesi ile bu da halledilebilir
 
Katılım
21 Eylül 2005
Mesajlar
184
Excel Vers. ve Dili
ofis 365 İngilizce
Altın Üyelik Bitiş Tarihi
25-10-2024
Sayın Üstadım çok teşekkür ederim ilginize.ve ekte sorduğunuz biçimde dosya mevcuttur.
saygılarımla,
 
Üst