Soru Veri tablosuna göre takvim oluşturma

Katılım
17 Aralık 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 Türkçe
Merhaba linkte paylaştığım excel dosyasında 1. Sekmede A B C D sütunlarında veri girişi kısmı bulunmakta, 2. Sekmede ise takvim kısmı bulunmakta.
1. Sekmeye veri girişi yaptıkça 2. Sekmede bulunan Ahmet ve Ayşe isimli kişilerin hangi tarihte hangi konuda (1. Sekme B sütunu) olduğunun otomatik işlenmesi için sonuca varamadım. Sorunu nasil çözebilirim?

 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,744
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

B2 hücresine uygulayıp alta ve sağa doğru sürükleyiniz.

C++:
=EĞERHATA(İNDİS(Sayfa1!$A$2:$D$11;TOPLA.ÇARPIM(KAÇINCI($A2&B$1;Sayfa1!$A$2:$A$11&Sayfa1!$D$2:$D$11;0));2);"")
 
Katılım
17 Aralık 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 Türkçe
Tekrar merhabalar.

Korhan bey öncelikle yardımınız için tekrar teşekkür ediyorum.
Vermiş olduğunuz formülü kullanarak excel belgesini oluşturdum. Örneği bu bağlantıda https://drive.google.com/file/d/1CBmP-U79XzO78uCa4X4Hj5EUw2Py9-YO/view?usp=drivesdk sorunsuz olarak çalışmaktadır.
Lakin şöyle bir sıkıntı yaşamaktayım. Veri giriş sayfasında 5000 satır olacak şekilde formülleri güncelledim, daha fazla yaptığımda formül hesaplama süresi dakikalarca sürecek kadar uzuyor. Veri giriş sayfasında tahmini olarak 30000 satır veri olacak ilerleyen zaman diliminde.

Bu sebeple takvim sayfasında I2:BQ131 aralığına vermiş olduğunuz formülü makro kullanarak hücrelere veri olarak yazdırmanın bir yolu var mıdır? 2 gündür farklı yöntemlerle videolardan izlediğim kadarıyla kod yazmaya çalıştım fakat bir sonuç alamadım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,744
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Eğer formül kullanımından vazgeçmek istemiyorsanız dosyayı hızlandırmak için hesaplama yöntemini ELLE (Manuel) olacak şekilde ayarlamanız yeterli olacaktır.

Bu sayede dosyada çalışmak daha verimli olacaktır. Sonuçları görmek istediğinizde ise F9 tuşuna basarak ya da dosyanızı kayıt ederek işlem yapabilirsiniz.

Ek olarak TOPLA.ÇARPIM fonksiyonu güzel bir fonksiyondur. Fakat çok fazla satıra ve sütuna uygulandığında dosyada maalesef yavaşlama yapmaktadır.

Bunun yerine VERİ GİRİŞ sayfasında yardımcı sütun kullanırsanız daha basit fonksiyonla sonuç alınabilir.
 
Katılım
17 Aralık 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 Türkçe
Teşekkürler Korhan bey, manuel güncelleme ve yardımcı sütun yöntemini deneyeceğim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,744
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu da makro ile çözüm;

Bir butona atayıp kullanabilirsiniz. Ya da TAKVİM sayfası açılırken çalışması için sayfanın "Activate" olayına aşağıdaki kodu Call Analiz şeklinde yazarak çalışmasını sağlayabilirsiniz.

C++:
Option Explicit

Sub Analiz()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Son As Long, Say As Long, Veri As Variant, Sutun As Integer
    Dim X As Long, Y As Integer, Aranan As String, Zaman As Double
    
    Zaman = Timer
    
    Application.ScreenUpdating = False
    
    Set S1 = Sheets("VERİ GİRİŞ")
    Set S2 = Sheets("TAKVİM")
    Set Dizi = CreateObject("Scripting.Dictionary")
    
    Son = S1.Cells(S1.Rows.Count, 2).End(3).Row
    If Son = 2 Then Son = 3
    Veri = S1.Range("A2:K" & Son).Value
    
    For X = LBound(Veri) To UBound(Veri)
        Dizi.Item(Veri(X, 2) & "|" & Veri(X, 10)) = Veri(X, 8)
    Next
    
    Son = S2.Cells(S2.Rows.Count, 3).End(3).Row
    Sutun = S2.Cells(1, S2.Columns.Count).End(1).Column
    S2.Range("I2:" & S2.Cells(Son, Sutun).Address(0, 0)).ClearContents
    
    If Son = 2 Then Son = 3
    Veri = S2.Range("C2:C" & Son).Value
    
    ReDim Liste(1 To Son, 1 To Sutun - 8)
    
    For X = LBound(Veri) To UBound(Veri)
        Say = Say + 1
        For Y = 9 To Sutun
            Aranan = Veri(X, 1) & "|" & S2.Cells(1, Y)
            If Dizi.Exists(Aranan) Then
                Liste(Say, Y - 8) = Dizi.Item(Aranan)
            End If
        Next
    Next
    
    S2.Range("I2").Resize(Say, Sutun - 8) = Liste
    S2.Select
    
    Application.ScreenUpdating = True
    
    MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing
End Sub
 
Katılım
17 Aralık 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 Türkçe
Yardımcı sütun ile çalışma kitabı inanılmaz derecede hızlandı, bu şekilde makro kullanmaya gerek bile kalmadı ancak kullanımda hangi çözüm daha rahat olur ona göre birini kullanacağım. Tekrardan teşekkürlerimi sunuyorum.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,744
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Makro her zaman daha performanslı olur. Ama bazı kişiler kodları düzenlemeyi/kullanmayı bilmediği için tercih etmiyorlar.
 
Katılım
17 Aralık 2017
Mesajlar
7
Excel Vers. ve Dili
Excel 2013 Türkçe
Makroyuda test ettim sorunsuz ve çok daha hızlı çalıştı. Makroyu kullanmaya karar verdim.
 
Üst