• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü VBA ile düşeyara/vlookup kullanımı

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

Asterix123

Yeni Üye
Katılım
21 Tem 2023
Mesajlar
24
Aldığı beğeni
2
Excel V
Office 365 EN
Konu Sahibi
Merhaba,
Ekli dosyanın HGS sayfasına her defasında aylık 3.000 satır veri girişi yapılıyor.

Benim yapmak istediğim;
1. HGS sayfasında siyah ile highlight ettiğim başlıklara ait verileri manuel girişini yapıyorum.
2. Kırmızı renk ile highlight edilen satır başlıklığı olan boş hücrelerin Araçlar sayfasından ilgili plakaya ait verilerini çekerek bu alana yazmak
3. Son olarak L ve M sutunlarında K sutunundaki tarihin Ay ve Yıl bilgisini yazdırmak istiyorum.

2 ve 3. sorularım için Data sayfasından CO1:CW1 aralığındaki formülü kopyala yapıştır yapıyordum.
Ama veriler çok uzun satır olunca vba kasıyor.
Bunun daha pratik hızlı bir yolu var mı ?

Kısaca B ile G sütunlarındaki boşlukları bulup Araçlar sayfasından verileri çekerek bu alanlara yapıştırmak ve Ay ile Yıl bilgisini boş olan L ve M kolonlarına yazdırmak.

Şimdiden desteğiniz ve emeğiniz için teşekkür ederim.

iyi çalışmalar.
 
Çözüm
Son olarak iki dosya hazırladım.
Bunlarda tarih boşsa veri getirmeyecek.
Soru_Asterix123 (A sütun yada H_K sütun yada K sütun kopyalama ) bu dosyada A yada K:K kopyalanırsa veriler gelecek.
Diğerinde ise H:K kopyalama için.(Bunu tavsiye ederim A sütununa ilk önce veri kopyalamada boş çalışmaması için)
Kolay gelsin.
Merhaba.
Alternatif olarak mir modül ekleyip sub içine alttaki kodu yapıştırın.

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Son düzenleme:
Sayın Asterix123
HGS sayfasında listele butonuna tıklamanız yeterli.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Sayın excelcan .Kodlarınızı inceledim sadece fikrimi yazayım istedim.Anladığım kadarıyla hgs sayfasının son dolu satırına kadar döngü kurmuşsunuz ve her satır içinde araçlar sayfası son dolu satırına kadar döngü kurmuşsunuz.Bence kod yavaşlaması olmuş bundan dolayı ve hız için dictionary exists en uygun gibi ve dictionarydada comparetext olayı var zaten.Birde tek tek satıra kaydettirmekte yavaşlatıyor bunun için array çok hızlı oluyor.

Kolay gelsin.
 
Sayın Refaz yazdıklarınızda haklısınız.
Ben de kod yazarken kolay kolay sayfada
döngü kuran bir kimse değilim.
Daha önce yazdığım kodlara bakarsanız görürsünüz.
Dictionary i de dizileri de kod yazımının merkezinde
tutmayı çoğunlukla tercih ederim. Bakın geriye dönük
kod yazımlarıma yüzde doksanı böyledir.
Burda dictionary kullanmamamın sebebi araclar sayfasındaki
tablonunun zaten benzersiz tablo olması.
HGS sayfasındaki döngü diziyle kurulmuş olsa çok da yavaşlama olmaz.
Diğer bir sebeb tablonun bölünmüş olması.
Sadece plaka bilgileri değil bir de ay ve yıl istenmesi.
Hiç sayfada döngüye girmeden bütün bir tablo diziye alınıp
sonra sayfaya tekrar yapıştırılabiirdi. Bu da yanlış bir işlemde veri
güvenliğininin tehlikeye girmesi demekti.
Bir de ben burda farklı bir fonksiyon denemek istedim.
Çoğunlukla sayfadaki verileri diziye alıyoruz ve bu diziler içinde
eleman arıyoruz. Benim derdim benzersiz liste oluşturmadan dizi içinde
tekrarlı verilerin ındexine topluca ulaşmak idi.
Fonksiyonda Collection nesnesine atayarak bu sorunu epeyce kolayladığımı düşünüyorum.
Ve oldukca da kullanışlı bir fonksiyon yazdığımı düşünüyorum.
Kodları tersten yazmış olsam bu fonksiyonu oluşturmaktaki amacımı da denemiş olacaktım.
O zaman döngü kod tagındaki gibi olacaktı.
Ve tekrar denerseniz epeyce hızlı olduğunu görürüsünüz.
Kolay gelsin.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Abey yanlış anlamayın amacım yarışmak felan değil.Sadece öncedende dediğim gibi kodun çok fazla döngüyle çalışması idi.
Veri az olunca farketmiyor ama denemek için Araclar sayfasında 2432satır,HGS sayfasında ise 9999 satır ekledim satırları alta çekerek.
Giftede zaten farkediliyor.Önceden Ay ve Yıl olayını 100bin satırda denemiştim 1 saniyede aktarıyor döngü olsada.
Aslında kullandığım arr(i, 1) = dict(diziHGS(i, 1))(0) gibide biraz yavaş çalışıyor normal diziye göre belki alternatif yazabilirimde iş olsun diye.
Dediğim gibi yarışmak yada iddalaşmak değil amacım sadece çok fazla veride yavaş çalışacağını düşündüğüm için yazmıştım kodlarınız.


uuuu.gif
 
Son düzenleme:
Konu Sahibi
HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Sayın Refaz,
Ellerinize sağlık kodlar hızlı ve sorunsuz çalışıyor.
Ancak aşağıda belirttiğim konularda destek verirseniz sevinirim.

** If Not Intersect(Target, Range("K:K")) Is Nothing Then altına kodlarınızı yazdım.

1. Her yeni veri girişimde dosyadaki tüm satırları en baştan itibaren güncelliyor.
Yani 34ABC52 plakalı aracın kullanıcısı değişti ise geriye dönük tüm kayıtları yeni kullanıcı verilerini alarak güncelliyor.
Benim istediğim sadece HGS dosyasına plaka,açıklama,lokasyon,tutar ve tarih yazdığım zaman sadece yeni giriş yaptığım boş hücrelerde kodlar çalışmalı. Geriye dönük kayıtlarda çalışmasın.

2. Tarih girmemişsem bana uyarı versin tarih girmeye zorlatsın işlem yapmasın.

3. Girdiğim plaka araç listesinde yok ise bana uyarı versin tarih girmeye zorlatsın işlem yapmasın.
 
Konu Sahibi
Sayın Asterix123
HGS sayfasında listele butonuna tıklamanız yeterli.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Sayın Excelcan merhaba,
Aynı sorun sizin kodlarınızda da mevcut.

Ben her ay HGS geçişlerini bu dosyaya ekliyorum.

Diyelim ki 34ABC12 plakalı araç sizin kullanımınızda olsun. Bu aracı Mart itibari ile ben devralmış olayım. (araç listesinde kullancı değişikliği yapmış oluyorum)
Mart ayı HGS girişleri yaptığımda, kodlar sadece Mart ayında çalışması gerekirken sayfanın tamamında çalışıyor ve 34ABC12 plakalı aracın tüm geriye dönük kayıtlarında benim ismim yazıyor. Dolayısı ile siz sanki bu aracı hiç kullanmamış oluyorsunuz.

Son olarak kodlar ağır çalışıyor. Her ay ortalama aylık 12.000 satır kayıt girdiğimiz zamanlarda oluyor. Bu durumda epey bir zaman kaybı yaratır.

Emekleriniz için tekrar teşekkür ederim.
 
Sayın Refaz,
Ellerinize sağlık kodlar hızlı ve sorunsuz çalışıyor.
Ancak aşağıda belirttiğim konularda destek verirseniz sevinirim.

** If Not Intersect(Target, Range("K:K")) Is Nothing Then altına kodlarınızı yazdım.

1. Her yeni veri girişimde dosyadaki tüm satırları en baştan itibaren güncelliyor.
Yani 34ABC52 plakalı aracın kullanıcısı değişti ise geriye dönük tüm kayıtları yeni kullanıcı verilerini alarak güncelliyor.
Benim istediğim sadece HGS dosyasına plaka,açıklama,lokasyon,tutar ve tarih yazdığım zaman sadece yeni giriş yaptığım boş hücrelerde kodlar çalışmalı. Geriye dönük kayıtlarda çalışmasın.

2. Tarih girmemişsem bana uyarı versin tarih girmeye zorlatsın işlem yapmasın.

3. Girdiğim plaka araç listesinde yok ise bana uyarı versin tarih girmeye zorlatsın işlem yapmasın.
Rica ederim.ilk mesajınızda alttaki yazınızdan ben ve üstad yaptığımız gibi anladık.Az veri ile manuel sonuç nasıl olacaksa öyle açıklarsanız tam olur sayfada sanıyorum.
Kısaca B ile G sütunlarındaki boşlukları bulup Araçlar sayfasından verileri çekerek bu alanlara yapıştırmak ve Ay ile Yıl bilgisini boş olan L ve M kolonlarına yazdırmak.
 
Konu Sahibi
Rica ederim.ilk mesajınızda alttaki yazınızdan ben ve üstad yaptığımız gibi anladık.Az veri ile manuel sonuç nasıl olacaksa öyle açıklarsanız tam olur sayfada sanıyorum.
Haklısınız, belki de ben yanlış ifade ettim. Dosyayı nasıl kullanıdğımı izahat edeyim siz daha doğrusunu bilirsiniz.

Kısaca A sutunu dolu B sutunu boş ise kodlar çalışmalı. Bu şartı sağlamayan satırlarda kodlar çalışmamalı.

Her ay HGS kayıtlarını giriyorum. (çok fazla satır)
Plaka, açıklama, lokasyon, tutar ve tarih bilgilerini manuel giriyorum. Tarih bilgisini girdiğimde kodları tetikliyorum ve sadece yeni veri girişi yaptığım satırlarda kodlar çalışarak Araçlar sekmesinden verileri getiriyor.

Ama bu böyle olmuyor tüm satırlarda çalışıyor. Sadece veri girişi yaptığım satırlarda çalışması gerekiyor. Aksi halde geriye dönük kayıtlarıda değiştiriyor.
 
Kod altta ve gifteki gibi çalışıyor.
Tarih silinirse verilerde siliniyor gerekirse koddaki o satır silinir.
Ayrıca fazla veride deneyin yavaş olacakmı fazla veri HGS syfasında olması önemli değil Araçlar sayfasında fazla olması.
Yavaş olursaki sanmıyorum ona göre küçük bir kıl ayarı çekeriz.

888.gif

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Biraz düşününce döngüsüz ve Dictionary siz Find(Bul) komutuyla yaptım bu tam oldu bence.

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
Biraz düşününce döngüsüz ve Dictionary siz Find(Bul) komutuyla yaptım bu tam oldu bence.

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Üstad ellerine sağlık, bu kodlar diğer sayfalarımda da kullanabileceğim çok kısa ve hızlı kodlar. Bunun için çok teşekkür ederim.
Ancak bir bilgi vermeyi atladım sanırım. Veriler çok fazla olduğu için tek tek yani satır satır girmiyorum.

500 Satırlık veri gireceksem önce 500 plakayı tek seferde sutuna copy paste yapıyorum sonra diğer verileri de aynı şekilde copy paste yapıyorum. Son tarihleri de bu şekilde yapınca kodlar çalışıyor.

Siz satır satır giriyorum diye düşünüp yapmışsınız ama dediğim gibi ben topluca yapıyorum.
 
Rica ederiz,bizde yapacağımızı şaşırdık :)
Neyse dediğiniz içinde ayrıca uğraşırım akşam felan.
 
Konu Sahibi
Zannetmiyorum ama yukardakini silip on error resume next
Yazıp deneyin.Olmazsa targetler arasında döngü kurulacak.
Sayın Refaz,
Farklı bir dosyadan önce topluca plakaları copy paste yapıyorum
Sonra lokasyon,tutar bilgilerini kopyala yapıştır yapıyorum
En son olarak plakalarda yaptığım gibi topluca tarihleri kopyala yapıştır yapıyorum.
 
Deneyin.Eğer doğru çalışırsa hızıda deneyin.
Çok yavaş olursa hızlandırma yapabiliriz belki.

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
Dim shAraclar As Worksheet, shHGS As Worksheet Dim sonAraclar As Long, bul As Range, hcr As Range If Target.Column = 11 And Target.Row >= 2 Then Set shAraclar = ThisWorkbook.Worksheets("Araclar") Set shHGS = ThisWorkbook.Worksheets("HGS") Union(shHGS.Range("B" & Target.Row & ":G" & Target.Row + Target.Cells.Count - 1), _ shHGS.Range("L" & Target.Row & ":M" & Target.Row + Target.Cells.Count - 1)).ClearContents sonAraclar = shAraclar.Cells(Rows.Count, 1).End(3).Row If sonAraclar < 2 Then GoTo hatasub With shHGS On Error Resume Next Application.EnableEvents = False If WorksheetFunction.CountA(Range(Target.Address)) > 0 Then For Each hcr In Target.Cells Set bul = shAraclar.Range("A:A").Find(.Cells(hcr.Row, "A").Value, , xlValues, 1) If Not bul Is Nothing Then .Cells(hcr.Row, 2).Value = shAraclar.Cells(bul.Row, 2).Value .Cells(hcr.Row, 3).Value = shAraclar.Cells(bul.Row, 3).Value .Cells(hcr.Row, 4).Value = shAraclar.Cells(bul.Row, 4).Value .Cells(hcr.Row, 5).Value = shAraclar.Cells(bul.Row, 5).Value .Cells(hcr.Row, 6).Value = shAraclar.Cells(bul.Row, 6).Value .Cells(hcr.Row, 7).Value = shAraclar.Cells(bul.Row, 7).Value .Cells(hcr.Row, "L").Value = Month(.Range("K" & Target.Row).Value) .Cells(hcr.Row, "M").Value = Year(.Range("K" & Target.Row).Value) End If Next End If End With End If hatasub: Application.EnableEvents = True On Error GoTo 0 Set shAraclar = Nothing: Set shHGS = Nothing: Set bul = Nothing
Maalesef olmadı, yine satır satır ilerliyor. Bu nedenle hızlı çalışıp çalışmadığını bilmiyorum.

Kayıt 2023-10-25 092438.gif
 
En sonda tarih kopyalıyom yazdınız ama.
Tarih sütunundakileri en son kopyalayın
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst