• DİKKAT

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

Fonksiyon hızını arttırmak

Katılım
19 Ocak 2009
Mesajlar
56
Excel Vers. ve Dili
excell 2003 Türkçe
Merhaba

Excelde veri tablosunda bulunan son kaydı bulmak için aşağıdki kodu kullanıyorum. Ancak sık kullanımdan dolayı bilgisayar kitlenip kalıyor. Maalesef excelin kendi fonksiyonu gibi olmuyor :( Bu sorunu aşabileceğim bir yol yöntem bilen var mı? Exceldeki düşeyara fonksiyonu bulduğu ilk değeri veriyor ama son değerini vermez mi? En azından aşağıdaki makroyu hızlandırabilir miyiz?

Function SONKAYDIARA(aranan As String, alan As Range, sutun As Integer) As String

If aranan = "" Or sutun = 0 Then GoTo cik
veri = alan.Value
For i = 1 To UBound(veri)
If veri(i, 1) = aranan Then
SONKAYDIARA = veri(i, sutun)
End If
Next i
Exit Function
cik: SONKAYDIARA = "-"
End Function
 
Merhaba

verdiğiniz linkteki örnekleri inceledim ancak düşeyara fonksiyonuna nasıl uyarlayabileceğimi bulamadım. Bu fonksiyonlar belli bir satır ve sütün içindeki son değeri buluyor. Benim ihtiyacım olan aradığım referansa ait olan değer. Yinede teşekkürler..
 
Ekteki dosyada ornek olarak kullanımı mevcut. Ancak dediğim gibi makroda olduğu için bu fonksiyon bir çok satırda bulunacağından bilgisayarı kilitliyor. Münkünse mevcut fonksiyonlarla çözmek istiyorum.
 

Ekli dosyalar

Selamlar,

D3 hücresine aşağıdaki formülü uygulayıp denermisiniz.

Kod:
=KAYDIR(Fason!$A$1;TOPLA.ÇARPIM(MAK((Fason!$A$2:$A$65536=$B3)*SATIR($2:$65536)))-1;SÜTUN(B$1);;)
 
Merhaba

Evet bu formül çalışıyor. Ama tam olarak nasıl işlediğini gerçekten anlamadım, elinize sağlık. :)

Diğer değerler içinde "SÜTUN(B$1)" kısmındaki harfi arttırırsam oluyor. Gerçekten çok teşekkür ederim emekleriniz için..
 
Son düzenleme:
Selamlar,

İsterseniz aşağıdaki kullanıcı tanımlı fonksiyonuda kullanabilirsiniz. Bu da hızlı sonuç vermektedir.

Kod:
Option Explicit
 
Function SON_KAYIT_ARA(Aranan As Range, Alan As Range, Sütun As Integer)
    Dim BUL As Range, Aranacak_Sütun As Range
    
    Application.Volatile True
    
    If Aranan = Empty Then SON_KAYIT_ARA = "-": Exit Function
    
    If Alan.Columns.Count > 1 Then
        Set Aranacak_Sütun = Alan.Resize(, Alan.Columns.Count - (Alan.Columns.Count - 1))
    Else
        Set Aranacak_Sütun = Alan
    End If
    
    If WorksheetFunction.CountIf(Aranacak_Sütun, Aranan) = 0 Then
        SON_KAYIT_ARA = "-"
        Exit Function
    End If
    
    Set BUL = Aranacak_Sütun.Find(Aranan, , , xlWhole, , xlPrevious)
    If Not BUL Is Nothing Then
        SON_KAYIT_ARA = BUL.Offset(0, Sütun)
    Else
        SON_KAYIT_ARA = "-"
    End If
 
    Set BUL = Nothing
End Function
 
Selamlar,

Üstteki mesajımdaki kullanıcı tanımlı fonksiyonu biraz daha geliştirdim. Şimdi daha da hızlı sonuç veriyor.
 
Geri
Üst