• DİKKAT

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

"For Next" döngü yavaşlığı, alternatif

Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Merhaba

"=" isimli çalışma sayfamın "B" sütunundaki veriyi ;
"referans" isimli sayfanın "A" sütununda arıyor, veriyi bulunca bir yanındaki hücreden başka bir veriyi "=" isimli çalışma sayfasının "A" sütununa getiriyor

Bir nevi düşey ara formülünü yapıyor. Lakin ben bu ara bul yapıştır işlemlerini for next döngüsü kullanarak yaptırdım. 950 satırlık veriyi 2500 satırlık veri aralığında arayıp sonucu getirmek neredeyse 1 dakikamı alıyor.

Formül kullanarak bu kadar beklemiyordum. Makro ile olsun dedim, ama süre bakımında kullanışlı olmadı. For next kodunu nasıl bir modif yaparız veya alternatif kod ne olmalı. Dosyam ektedir
 

Ekli dosyalar

Merhaba
aşağıdaki kodu dener misiniz?

Kod:
Sub ara()
Dim i As Integer, ara
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("=").Range("A:A").ClearContents
    For i = 1 To Sheets("=").Cells(Rows.Count, "B").End(xlUp).Row
        ara = Sheets("=").Cells(i, 2).Value
        Set ara = Sheets("referans").Range("A:A").Find(ara, , xlValues, xlWhole)
            If Not ara Is Nothing Then
                Sheets("=").Cells(i, 1).Value = Sheets("referans").Range("B" & ara.Row).Value
            End If
    Next
Application.ScreenUpdating = True
MsgBox "islem tamam"
End Sub
 
sayın emr123
yazdığınız kod, benim yaptığımda koddan çok daha hızlı çalışıyor, yalnız bir eklenti daha olması lazım

eğer Sheets("referans").Range("B" & ara.Row).Value boşa eşitse o zaman Sheets("referans").Range("C" & ara.Row).Value hücresindeki veriyi alsın
 
Merhaba.

Alternatif olsun.
Not: Kod oluştururken örneğin 944 sayısı sabit değilse, döngünün son satırını
a.Cells(Rows.Count, 2).End(3).Row şeklinde yazmanızı öneriyorum.
.
Kod:
[B]Sub Referanstara_BRN()[/B]
Dim i As Integer
Set a = Sheets("="): Set r = Sheets("referans")
a.Range("A:A").ClearContents
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
a.Range("C1:C" & a.Cells(Rows.Count, 2).End(3).Row).Copy a.[A1]
For i = 1 To [COLOR="blue"]a.Cells(Rows.Count, 2).End(3).Row[/COLOR]
    If WorksheetFunction.CountIf(r.Range("A:A"), a.Cells(i, 2)) = 1 Then
        brn = WorksheetFunction.Match(a.Cells(i, 2), r.Range("A:A"), 0)
        a.Cells(i, 1) = r.Cells(brn, 2) & r.Cells(brn, 3)
        GoTo 10: End If
10: Next i
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
MsgBox "İşlem Tamamlandı.", vbInformation, "..::.. Ömer BARAN ..::.."
[B]End Sub[/B]
 
Bu şekilde değiştirdim, uygundur değil mi ?

Kod:
 If Not ara Is Nothing Then
                If Sheets("referans").Range("B" & ara.Row).Value = "" Then
                Sheets("=").Cells(i, 1).Value = Sheets("referans").Range("C" & ara.Row).Value
                Else
                Sheets("=").Cells(i, 1).Value = Sheets("referans").Range("B" & ara.Row).Value
                End If
            End If
 
Gönderdiğim cevap konusunda hiçbir şey söylemediniz!...
 
Ömer bey bende konuya cevap yazıyordum arada kaldığı için gözümden kaçmış, kusura bakmayın. Sizin verdiğiniz alternatif kod ; sayın emr123'ün verdiği koda göre daha da hızlı çalışıyor

Çok teşekkür ediyorum, çok yardımcı oldunuz
 
Geri
Üst