Birden fazla kritere göre fiyatları getirtme

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Günaydın hocam.

Hammadde alımlarında nakliyecilerin faturalarını da takip edelim dedik ve buna da nisan ayında başladık öncesinde böyle bir talep yoktu ben firmaları bildiğim için elle kontrol ediyordum.

Sadece L30-L31 hücreleri değil üstündeki firmanında iki tane nakliyecisi var. Yani bazı firmalardan malları birden fazla nakliyeci çekebiliyor. Formülle yaptığımda çoketopla veya topla.çarpım kullanıyordum. BU arada sonradan gönderdiğimde nakliye fiyat tablosunu l sütununa çekmişim özür dilerim.

Anında hesaplama işlemini benim cahilliğime verin. Böyle olacağını bilemedim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu ikili nakliye firmaları nasıl ayrılacak kriter nedir?
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Hocam I sütununda mal aldığımız firma ve S sütununda nakliye firması var. W sütununda formülde bu iki sütundaki kriterlere göre üstte yer alan nakliye tablosunda karşılık geen fiyatı getirtiyorum. ekteki dosyada sarı ile işaretledim.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
O zaman şöyle sorayım. W65 hücresine hangi fiyat gelmeli?
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Hocam S sütunundaki boş hücreleri daha iyi anlaşılabilmesi için sildim.

W65 hücresine;

I65 (Firma) ve S65 (Nakliye Firması) hücrelerine bakacak. Ve L22:O33 (Nakliye Fiyat Listesi) aralığındaki karşılık gelen 50 tl yi yazacak.

eklediğim dosyada renklendirdim.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
1 Nisan tarihinden önceki kayıtların nakliye fiyatlarını kendiniz mi dolduracaksınız?
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Ben sorun olmayacağını düşündüğüm için geriye dönük boş bırakmıştım ama makro için sıkıntı olacaksa evet doldurabilirim boş bir zamanımda.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
#16 nolu mesajımdaki kodu son eklediğiniz dosyaya göre revize ettim. Bu kod ile tüm kayıtlarınız için hammadde fiyatlarınız doğru şekilde gelecektir. 1 Nisan ve sonrası için nakliye fiyatlarınız doğru şekilde gelecektir. Bu kodu eski verileriniz için bir kez çalıştırmanız yeterli olacaktır.

Güncel işlemlerinizde anında hesaplama işlemi için ayrı bir kod hazırlıyorum.
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Çok çok teşekkür ederim hocam Allah sizden razı olsun.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki kodu HAMMADDE GİRİŞ sayfasının kod bölümüne uygulayınız.

C38:X1048576 hücrelerinde olacak değişikliklerde kod çalışacaktır.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Hammadde As Object, Nakliye As Object, Alan As Range, Veri As Range
    Dim Hammadde_Data As Variant, Nakliye_Data As Variant, X As Long, Aranan As String
    
    On Error GoTo Son
    
    If Intersect(Target, Range("C38:X" & Rows.Count)) Is Nothing Then Exit Sub
    
    Application.ScreenUpdating = False
    Application.EnableCancelKey = xlDisabled
    Application.EnableEvents = False
    
    Set Hammadde = CreateObject("Scripting.Dictionary")
    Set Nakliye = CreateObject("Scripting.Dictionary")
    
    Hammadde_Data = Range("C2:H35").Value
    
    For X = LBound(Hammadde_Data) To UBound(Hammadde_Data)
        Hammadde.Item(Hammadde_Data(X, 1) & Hammadde_Data(X, 2) & Hammadde_Data(X, 3)) = Hammadde_Data(X, 6)
    Next
    
    Nakliye_Data = Range("L22:O33").Value
    
    For X = LBound(Nakliye_Data) To UBound(Nakliye_Data)
        Nakliye.Item(Nakliye_Data(X, 1) & Nakliye_Data(X, 2)) = Nakliye_Data(X, 4)
    Next
    
    If Target.Cells.Count = 1 Then
        Set Alan = Target
    Else
        Set Alan = Selection
    End If
    
    For Each Veri In Intersect(Alan, Range("C38:X" & Rows.Count))
        Cells(Veri.Row, "R") = Cells(Veri.Row, "O") * Cells(Veri.Row, "P") * Cells(Veri.Row, "Q") / 1000000
        Aranan = Cells(Veri.Row, "I") & Cells(Veri.Row, "L") & Cells(Veri.Row, "M")
        Cells(Veri.Row, "U") = Hammadde.Item(Aranan)
        Cells(Veri.Row, "V") = Cells(Veri.Row, "N") * Cells(Veri.Row, "U")
        Aranan = Cells(Veri.Row, "I") & Cells(Veri.Row, "S")
        If Nakliye.Exists(Aranan) Then Cells(Veri.Row, "W") = Nakliye.Item(Aranan)
        Cells(Veri.Row, "X") = Cells(Veri.Row, "N") * Cells(Veri.Row, "W")
    Next

Son:
    Application.EnableCancelKey = xlInterrupt
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
En kısa zamanda uygulayıp sonucu bildireceğim inşaallah. Tekrar teşekkürler.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ek olarak bu kodla #16 nolu mesajımda ki kodu beraber kullanabilirsiniz. Bu sebeple #16 nolu mesajımda ki koda küçük eklemeler yaptım.

Son önerdiğim sayfa kodu anlık veri girişleri için kullanılabilirken, #16 nolu mesajımdaki kodu toplu şekilde tüm sayfayı güncellemek istediğinizde kullanabilirsiniz.
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Hocam Allah razı olsun tam istediğim gibi çalışıyor. Sağolun.
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Hocam çok kısa bir şey sormak istiyorum vaktiniz varsa.

Sorunsuz çalışıyor dedim ancak ben sol baştan tarih vs girmeye başlıyorum ve her veri girdiğimde sayfa yenileniyor gibi tüm tabloda bir titreme oluyor.

Bu aynı anda fiyat sorguladığı için mi acaba? Ve bunu gidermenin bir yolu var mıdır?

Teşekkürler şimdiden.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodun çalışması için alan daraltması yapabiliriz. Şu anda C:X yani veri olan tüm sütunlarda veri girişi anında çalışıyor.

Kod içindeki bu bölümü isteğinize göre düzenleyebilirsiniz.

If Intersect(Target, Range("C38:X" & Rows.Count)) Is Nothing Then Exit Sub
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Yani hesaplattığımız m3 ve diğer fiyatlar R sütunundan başlıyorsa R38:X desek sadece o tarafı yenileyecek doğru mudur hocam?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Önerdiğim kod sayfada hücre değişiminde çalışmaktadır. Yani hücrelerin değişmesi gerekmektedir. Doğal olarak siz hesaplamalar için hangi alanlara ihtiyaç duyuyorsanız o sütunları tanımlamanız gerekiyor.

Örneğin;

Hammadde Fiyatı için, I-L-M sütunlarına ihtiyacınız var.
Nakliye Fiyatı için, I-S sütunlarına ihtiyacınız var.
Metreküp için; O-P-Q sütunlarına ihtiyacınız var.
Hammadde Tutarı için; N-U sütunlarına ihtiyacınız var.
Nakliye Tutarı için; N-W sütunlarına ihtiyacınız var.

Bu bahsettiğim sütunlardaki hücre değişimleri sizin hesaplamalarınızı etkilemektedir.

Eğer sayfanıza verileri sıralı giriyorsanız en son "S" sütununa veri girişi yaptığınızda tüm işlemler yapılabilir. Tabi bu durumda diğer sütunlardaki değerleri değiştirdiğinizde hesaplamalar tetiklenmeyeceği için son olarak "S" sütuna gelip hücre içine girip çıkmanız gerekecektir.

Ben tanımlama yaparken "C" sütunundan başlatmıştım. Belki bu alan aşağıdaki gibi olabilir.

If Intersect(Target, Range("I38:X" & Rows.Count)) Is Nothing Then Exit Sub
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
I yı denedim ama S yi de denedim. Bütün bilgileri girip en son nakliyeci adını yazınca hepsi birlikte geliyor. Ancak yukarıdaki hammadde fiyat tablosunda olmayan bir firma vardı kodu çalıştırınca o firmaya ait bütün giriş satırlarını silmiş. tekrar yükledim. Artık dikkat etmem gerekiyor sanırım. Çok teşekkürler ilginize.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örneklendirirseniz riski belki kaldırabiliriz.
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Örneklendirirseniz riski belki kaldırabiliriz.
Hocam o siliyor dediğim olay bu son gönderdiğinizde değildi hatırladım. Bu her veri girdiğimde güncelliyor sorun yok. Toplu halde güncelleme yaptırdığınız kodda ham madde fiyat listesinde olmayan kayıtlar silinmişti. Ama ben anlık olarak güncellemesini istediğim için sorun yok benim için teşekkürler yine de.
 
Üst