• DİKKAT

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

Bir kritere göre birden çok verinin getirtilmesi

  • Konbuyu başlatan Konbuyu başlatan sakoz
  • Başlangıç tarihi Başlangıç tarihi
Katılım
17 Nisan 2007
Mesajlar
319
Excel Vers. ve Dili
Office 2013 Türkçe
Arkadaşlar Mehaba ,

Benim için çok önemli bir konuda yardımlarınıza ihtiyacım var :(

Ekte örnek dosya mevcuttur.
Şimdi ;

Elimizde yaklaşık 5000 satırlık bir liste var. Yaklaşık 12 tane tedarik firmasındanda liste geliyor.

Yapmak istediğimiz ;

LISTE sayfasında C sütunundaki parça kodlarını diğer sayfalardaki (tedarikçilerden gelen listeler sayfa sayfa kopyalanıyor) kodların içinde arayacak ve eşleşen kodların karşılığındaki fiyat ve marka bilgilerini getirecek.
Yalnız önemli bir nokta var. Bizim ve tedarikçilerden gelen listedeki kodlarda aynı koddan birden fazla oluyor(Markası farklı olduğu için)

İstediğimiz aynı kodlardan kaç tane varsa hepsinin fiyat ve marka bilgisini getirmesini istiyoruz.

Örneğin ; LISTE sayfasındaki YS412261AA kodundan 2 tane var (marka sütununda farklı markalar olduğu görülüyor) Bu kodu tedarikçilerden gelen listelerde arayacak, bulursa fiyat ve marka bilgisini getirecek. (Aynı marka için). Bu kod için aynı markayı bulamazsa " Bu marka yok" diyecek, bu kodun başka bir marka için olanı varsa onun fiyat ve marka bilgisini getirecek.
Umarım kafanızı karıştırmadan anlatabilmişimdir.
Bunu yapabilecek bir makro olursa çok sevinirim.
Şimdiden teşekkür ederim.
Saygılar,

Ornek dosya : http://s6.dosya.tc/server11/t6khx7/Ornek.xlsx.html
 
Merhaba.

Ekteki belgeyi deneyiniz.
İstediğinize yakın bir şey oldu sanırım.

Ancak tavsiyem; tüm ürünler için değil, belli bir hücreye yazılacak KOD için arama yaptırmanız yönünde.

Belgeye, fareyle buraya tıklayarak da erişebilirsiniz.
.
 

Ekli dosyalar

Sayın Ömer Hocam ,

Deneyip hemen bilgisini aktaracağım..
 
Ömer hocam,

Makroyu çalıştırınca Parça kodlarından bir çoğunu BRN sayfasına getirmiyor. (LISTE sayfasındaki tüm kodları getirmesi gerekiyor)

Birde mesela YC1J3289AA parça kodunu tedarikçi listesinde bulmuş fakat aynı satırları 5 defa getirmiş listeye...
 
Son düzenleme:
Arkadaşlar konuyla ilgili yardımcı olabilirseniz çok sevinirim...
 
Ömer Hocam Selamlar,

Affınıza sığınarak tekrardan yazıyorum.
Hocam öncelikle dün gece verdiğiniz emek için ne kadar teşekkür etsem azdır.

Listede istediğim düzende olmuş sağolun varolun. Yalnız bir kaç yerde yapılması gerekenler var.

Birincisi LISTE sayfasındaki en son 6M343395BA kodu diğer sayfalarda bulmuş ve BRN kısmına getiriyor fakat liste sayfasındaki bilgileri getirmiyor.

İkincisi ve en önemlisi hocam ;
Örneğin YC1U11000AF bu koddan LISTE sayfasında 3 adet farklı marka var. BRN listesine bunlardan ilkini getiriyor ama diğerlerini getirmiyor. Bunlarıda getirmesi gerekiyor (Çünkü LOGOSUZ NO kısmındaki veriler farklı)
Bunlar dışında mükemmel olmuş Ömer hocam tekrardan teşekkür ederim.
Saygılar,
 
Bir de ekteki belgeyi deneyin bakalım.
Belge içerisinde açıklamalar yazdım.

Belgeye, fareyle buraya tıklayarak da erişebilirsiniz.
.
 

Ekli dosyalar

Ömer Hocam tekrardan selamlar,

Yok hocam bu şekilde olmayacak. İlk yazmış olduğunuz kod tamamdır. Sadece bu kodda bazı düzeltmelerin yapılması gerekiyor.

Birincisi LISTE sayfasındaki 3827.satırdaki 6M343395BA kodu diğer sayfalarda bulmuş ve BRN sayfasına getiriyor fakat liste sayfasındaki bilgileri (gri ile yazdırdıklarınız) getirmiyor.

İkincisi ve en önemlisi hocam ;
Örneğin YC1U11000AF bu koddan LISTE sayfasında 3 adet farklı marka var. BRN listesine bunlardan ilkini getiriyor ama diğerlerini getirmiyor. Bunlarıda getirmesi gerekiyor (Çünkü LOGOSUZ NO kısmındaki veriler farklı)
Bunlar dışında mükemmel olmuş Ömer hocam tekrardan teşekkür ederim. Bu arada listele ve sil kısmı çok güzel olmuş ellerinize sağlık.
 
Ömer Hocam selamlar,

http://www.dosya.tc/server10/s4ki4c/sakoz_BRN3.rar.html

Örnek dosyayı ekledim.
Birincisi BRN sayfasında 8205,8206,8207 nolu satırlar belirtildiği şekilde gelmeli.

İkincisi YC1U11000AF kod için 26 ile 34. satırlar arası belirtildiği şekilde gelmeli.
Yani ; birden fazla olan kodlar içinde satır açıp bilgileri getirmeli.

İlginize sonsuz teşekkürü bir borç bilirim. :dua2:
 
Tekrar merhaba.

İşlem sonrasında diğer sonuçları da kontrol edin, bakalım bunu hallederken başka veride istenmeyen sonuç oluşuyor mu?
LISTE_BRN adlı kod'u aşağıdakiyle değiştirerek deneyin.
.
Kod:
[B][COLOR="red"]Sub LISTE_BRN()[/COLOR][/B]
Set l = Sheets("LISTE"): Set b = Sheets("BRN")
If b.Cells(Rows.Count, 7).End(3).Row > 1 Then b.Range("A2:M" & Rows.Count).Clear
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
zaman = Timer
For lsat = 2 To l.Cells(Rows.Count, 3).End(3).Row
    If l.Cells(lsat, 3) = "" Then GoTo 10
    bsat = b.Cells(Rows.Count, 8).End(3).Row + 1
    l.Range(l.Cells(lsat, 1), l.Cells(lsat, 7)).Copy: b.Cells(bsat, 2).PasteSpecial Paste:=xlPasteValues
        If bsat - 1 > 1 And b.Cells(bsat - 1, 1) > b.Cells(bsat, 1) Then
            ilk = WorksheetFunction.Match(b.Cells(bsat - 1, 1), b.[A:A], 0)
            minI = 0
            If ilk = bsat - 1 Then
                b.Cells(ilk, "M") = "LISTE"
                GoTo 30
            End If
            For bb = ilk To bsat - 1
                If IsNumeric(b.Cells(bb, "I")) = False Then GoTo 20
                If b.Cells(bb, "I") > minI Then minJsat = bb
20:         Next
            b.Cells(ilk, "K") = b.Cells(minJsat, "F")
            b.Cells(ilk, "L") = b.Cells(minJsat, "I")
            b.Cells(ilk, "M") = b.Cells(minJsat, "J")
        End If
30: minJsat = 0
    b.Range(b.Cells(bsat, 1), b.Cells(bsat, 13)).Interior.ColorIndex = 20
    b.Cells(bsat, 1) = WorksheetFunction.Max(b.[A:A]) + 1
    For Each shf In ActiveWorkbook.Worksheets
        If shf.Name <> "BRN" And shf.Name <> "LISTE" Then
        Set s = Sheets(shf.Name)
            ssut = WorksheetFunction.Match("*KOD*", s.Range("1:1"), 0)
            s.Range("A1:Z" & Rows.Count).AutoFilter Field:=ssut, Criteria1:="*" & l.Cells(lsat, 3) & "*"
            If s.Cells(Rows.Count, 1).End(3).Row > 1 Then
                markasut = WorksheetFunction.Match("*MARKA*", s.Range("1:1"), 0)
                netsut = WorksheetFunction.Match("*NET*", s.Range("1:1"), 0)
                fiyatsut = WorksheetFunction.Match("*FİYAT*", s.Range("1:1"), 0)
                sson = s.Cells(Rows.Count, 1).End(3).Row
                    With s.AutoFilter.Range
                        For Each brn In .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible).Areas
                            If brn.Row > s.Cells(Rows.Count, 1).End(3).Row Then Exit For
                            bsatt = b.Cells(Rows.Count, 8).End(3).Row + 1
                            b.Cells(bsatt, 10) = s.Name
                            b.Cells(bsatt, 1) = b.Cells(bsatt - 1, 1)
                            b.Cells(bsatt, 6) = s.Cells(brn.Row, markasut)
                            b.Cells(bsatt, 8) = s.Cells(brn.Row, fiyatsut)
                            b.Cells(bsatt, 9) = s.Cells(brn.Row, netsut)
                        Next
                    End With
            End If
            s.Range("A1:Z" & Rows.Count).AutoFilter Field:=ssut
        End If
    Next
10
Next

bson = b.Cells(Rows.Count, 1).End(3).Row
b.[H:M].NumberFormat = "#,##0.00"
b.Range("A2:M" & bson).Font.Size = 10
b.Range("A1:M" & bson).AutoFilter
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
MsgBox "İşlem, " & Format(Timer - zaman, "0.00") & "  saniye sürdü.", vbInformation, "..::.. Ömer BARAN ..::.."
[B][COLOR="Red"]End Sub[/COLOR][/B]
 
Ömer Hocam tek kelime ile süpersiniz , zihninize, emeğinize sağlık.
Ne kadar teşekkür etsem azdır , beni büyük bir dertten kurtardınız sağolun varolun...
 
Sizin izlediğiniz, C sütunundaki herbir satır için ayrı ayrı kontrol yöntemi dolayısıyla,
LİSTE sayfasındaki her bir satır C sütunundaki değer için (For..Next döngüsüyle)
diğer sayfalarda filtre uygulatıp, kalan satırlardaki bilgileri hücrelere yazdırma şeklinde çalışan bir kod ortaya çıktı.
Çalışma mantığı nedeniyle biraz yavaş çalışan bir kod oldu.

Bu arada verilerin sıralamasının bir önemi var mıdır onu sorayım.
Belki de sayfalarda bir-iki yardımcı sütuna formüller uygulayıp,
tek tek işlem yaptırmak (For...Next döngüsü) yerine basit alt alta yapıştır, sırala, kopyala, yapıştır yöntemi de uygulanabilirdi.
Vaktim olursa bunun için de bakarım.
Böylece birkaç saniyede sonuç alınabilirdi sanırım ama işlem tamam dediğinize göre mesele yok.

İyi çalışmalar dilerim.
.
 
Ellerinize sağlık hocam kod şuanda düzgün çalışıyor. Verilerin sıralamasının bir önemi yok.
Ben şimdi diğer tedarikçilerden gelen listeleri de ekleyip deneyeceğim. Bir problem olursa aynı konu üzerinden dönüş yapsam olur mu Ömer hocam ?
 
Konu aynı konu olduğuna göre, sonucu bu konu sayfasına yazarsınız.
 
Ömer Hocam tekrar selamlar ,

Diğer tedarikçilerden gelen listeleride ekledim ve sorunsuz olarak çalışıyor, ellerinize sağlık. Şimdi şöyle bir talep geldi Ömer hocam.

SN 'daki satırlara bakacak ve en küçük rakamı, markayı ve hangi firma olduğunu ayrı bir sütuna yazacak.
Örneğin ; SN 'sı 20 olan satırlara bakacak ve bu satırlardaki en düşük fiyat, karşılığındaki marka ve firma bilgisi. Tüm SN 'sında ayrı ayrı bu işlemleri yapması gerekiyor. Bunu yaptırabilir miyiz acaba ?

Eklemeyi unutmuşum hocam kusura bakmayın , net fiyat sütünundaki en düşük rakamı alması gerekiyor.

Örnek dosyayı ekliyorum hocam. Dosyada açıklama olarak yazdım.
Teşekkür ederim.
Saygılar,

http://s8.dosya.tc/server5/41xnzd/sakoz_BRN3.rar.html
 
Son düzenleme:
Ömer hocam müsait değil herhalde , diğer üstadlarımın yardımlarını bekliyorum.
Şimdiden teşekkür ederim...
 
Üstadlar günaydın, Konu günceldir , yardımlarınızı bekliyoruz...
 
Ömer hocam ,

Hızır gibi yetiştiniz yine teşekkürler , Allah sizden razı olsun...
Yalnız Brüt fiyatlardaki en düşük rakamı getiriyor hocam ama Net Fiyatlardaki en düşük rakamı getirmesi gerekiyor. Ben koddaki H olan kısımları I olarak değiştirip denedim fakat olmadı.
 
Tekrar merhaba.

10 numaralı cevaptaki kod'u güncelledim, sayfayı yenileyerek kontrol edin.

Yeni belgede (en küçük fiyat/marka/firma sütunlarının olduğu belge)
güncellediğim kod'u kullanabilirsiniz.
.
 
Geri
Üst